5

I am working in PHP, I have to define variables in sequence to save in Mysql. Both field name and variable name must be same in my case.

Can I declare a variable like this

$1 OR $2 etc 

If not why not and if yes why yes?

I tried:

$id = 0;
$6  = $_REQUEST['6'];
$7  = $_REQUEST['7'];
$8  = $_REQUEST['8'];

$xary = array('6','7','8','9')

$oAppl->save_record("tablename", $id, "id");

which give me error.

Also can I create and use fields in Mysql with the same name?

4

11 回答 11

16

这就是 PHP 的设计方式。您不能以数字开头的变量名称。

你可以做的是使用下划线:

$_6 = $_REQUEST['6'];

编辑: 由于 PHP 中的变量以$开头,因此变量可能以数字开头,但这对大多数人来说会有点混乱,因为没有其他语言允许变量以数字开头(或者至少我没有不知道)。

但是让我们假设允许以数字开头的变量。

你能想象一个同事对你说:23 等于 74?这有点令人困惑。听到n23 等于 74更有意义。您知道n23是一个变量,而无需明确说明。

于 2013-03-15T08:15:11.027 回答
6

是的,您可以在 PHP 中声明以数字开头的变量:

${'1'} = 'hello';

"1"这用PHP 中的变量名声明了变量。

要访问它,您需要再次使用大括号语法:

echo ${'1'};

这是必要的,因为在 PHP 代码中您不能逐字编写:

echo $1;

那会产生语法错误。


我也可以在 Mysql 中创建和使用同名的字段吗?

是的,你可以,它的工作方式与 PHP 类似。在 Mysql 中,您还需要引用列的仅数字标识符,引用不同:

mysql> create table test (`0` INT);
mysql> describe test;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| 0     | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+

这里使用了反引号(默认 Mysql 配置)。PHP 手册和 Mysql 手册都解释了这方面的细节,在 Stackoverflow 网站上也有许多关于引用 PHP 和 Mysql 标识符的相关问题。

于 2013-09-27T15:03:32.553 回答
2

它没有任何意义。但是您仍然可以使用变量的动态名称。

<?php

$name = 1;

$ $name = 'name';
// $ 1 = 'name'; // the same, but syntax not allowed

var_dump($ $name); // value of $1
var_dump(${$name});
var_dump($$name);
于 2017-09-20T14:10:49.877 回答
1

好好想想这个:

$2d = 42;
$a = 2d;

什么是一个?2.0?还是42?

提示,如果你不明白,数字后的 d 表示它之前的数字是双字面量

难以明确地确定编译单元中的数字字符是表示文字还是标识符。

由于这个原因,空间不重要的语言(如 ALGOL 和原始 FORTRAN,如果我没记错的话)不能接受数字来开始标识符。

这可以追溯到 - 在表示存储或数字基数的特殊符号之前。

有关更详细的讨论,请访问为什么变量名不能以数字开头?

于 2013-03-15T08:14:53.930 回答
1

为了增加@hakre的答案,您还可以为了简洁而丢失引号

${1}

但唉,你不能将它与字符串值结合起来。我做了一些实验,显然 PHP 需要一个字符串或一个数字值。你可以在大括号内做任何事情,最终返回一个数字或一个字符串值,或者隐式转换为任何一个。

<?php
function eight (){
   return 8;
}
${7+'fr'} = ${7*'fr'+1} = ${'hi'.((string)8).'hi'} = ${7.8910} = ${eight()} = ${(eight()==true)+4} = 'hi';

var_dump(get_defined_vars());

输出

array(8) { ["_GET"]=> array(0) { } 
["_POST"]=> array(0) { } 
["_COOKIE"]=> array(0) { } 
["_FILES"]=> array(0) { } 
["7.891"]=> string(2) "hi" 
["7"]=> string(2) "hi" 
["1"]=> string(2) "hi" 
["hi8hi"]=> string(2) "hi"
["8"]=> string(2) "hi" 
["5"]=> string(2) "hi" } 

另外我发现了一些有趣的东西:

<?php
${false} = 'hi';
${true} = 'bye';

var_dump(get_defined_vars());

输出

array(6) { ["_GET"]=> array(0) { } 
["_POST"]=> array(0) { } 
["_COOKIE"]=> array(0) { }
[""]=> string(2) "hi" 
["1"]=> string(3) "bye" } 

这意味着false计算为空字符串,而不是 0 和true1。

于 2018-02-23T08:45:14.887 回答
0

这是某种遗产,从 C、Fortran 等早期开发的语言开始。此外,一些 shell 脚本语言对以数字开头的标识符(即输入参数)有特殊的方法。PHP 标准只是决定遵守这个一般规则。

于 2013-03-15T08:15:23.873 回答
0

正如php 文档所说,您不能:

基本

PHP 中的变量由一个美元符号后跟变量名表示。变量名区分大小写。

变量名称遵循与 PHP 中其他标签相同的规则。有效的变量名称以字母或下划线开头,后跟任意数量的字母、数字或下划线。

作为一个正则表达式,它可以这样表达: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*

关于 MySQL,文档说:

标识符可以以数字开头,但除非引用,否则标识符可能不仅仅由数字组成。

于 2013-03-15T08:12:28.567 回答
0

您不能在 PHP 中定义以数字开头的变量。看看下面的链接。它具有定义变量的基础知识。

PHP 变量 - 基础

于 2013-03-15T08:13:56.400 回答
0

您不能命名以数字开头的变量(或者只是一个数字)。您可以做的是使用另一个字符开始(例如,和下划线,或 3 个字母组合,说明它是什么类型的变量:

$_1 = $_REQUEST['1'];

或者

$str1 = $_REQUEST['1'];

您还可以使用数组:

$retrievedValuesFromDB = array();
$retrievedValuesFromDB['1'] = $_REQUEST['1'];

这样你就可以同时遍历两者:

$i=1;
while ($i<mysql_num_rows())
{
    $retrievedValuesFromDB[$i] = $_REQUEST[$i];
    $i++;
}
于 2013-03-15T08:48:19.353 回答
0

首先PHP设计为a variable can't start with a number. 大多数语言都遵循相同的命名规则。这主要用于better readabilitycompiling performance optimisation。编译时在词法分析中避免回溯。

假设变量如下:

test = 12;
123test = 12;

test当它遇到字母't'时,编译器会立即知道它是一个标识符。

如果是123test,编译器将无法确定它是数字还是标识符,直到它在 't' 之后命中3,因此它需要回溯。

于 2020-02-10T09:33:16.277 回答
0

所有说您可以在 PHP 中成功创建 NUM 变量的答案都是错误的!

所有说 {num} 实际上创建一个名为 num 的变量的答案都是错误的。

如果我们使用 {1} 创建一个数字变量,则 $GLOBALS 变量将没有它。

但是返回的数组get_defined_vars()可能会有它(我有时不明白)......

现在如果我以另一种方式应用这个逻辑,通过使用 $GLOBALS 来定义一个变量,同样的事情肯定会发生。

绝对不建议使用这种(脏/不稳定)逻辑(如文档中直接描述的那样),我很确定您在编程时永远不会缺少变量名,除非您过于注重语法简洁。

因此,请避免在开始时使用数字/作为变量名,就像您在其他语言中所期望的那样

于 2021-06-29T13:59:26.500 回答