为什么变量不能以数字开头?

Met*_*hew 5 php variables numbers

我在PHP工作,我必须按顺序定义变量以保存在Mysql中.在我的情况下,字段名称和变量名称必须相同.

我可以声明这样的变量吗?

$1 OR $2 etc 
Run Code Online (Sandbox Code Playgroud)

如果不是为什么不,如果是,为什么是?

我试过了:

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

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

$oAppl->save_record("tablename", $id, "id");
Run Code Online (Sandbox Code Playgroud)

这给了我错误.

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

Rob*_*ess 15

这就是PHP的设计方式.您无法使用数字启动变量名称.

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

$_6 = $_REQUEST['6'];
Run Code Online (Sandbox Code Playgroud)

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

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

你能想象一个同事对你说:23等于74?这有点令人困惑.听力n23等于74更有意义.你知道n23是一个变量而不必明确地说出来.

  • 但为什么呢?为什么我们不能 (2认同)

hak*_*kre 5

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

${'1'} = 'hello';
Run Code Online (Sandbox Code Playgroud)

"1"在PHP中声明了变量名称的变量.

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

echo ${'1'};
Run Code Online (Sandbox Code Playgroud)

这是必要的,因为在PHP代码中,你不能写:

echo $1;
Run Code Online (Sandbox Code Playgroud)

这会产生语法错误.


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

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

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

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