我在PHP工作,我必须按顺序定义变量以保存在Mysql中。在我的情况下,字段名称和变量名称必须相同。
我可以声明一个像这样的变量
$1 OR $2 etc
如果不是为什么不,如果是,为什么是?
我试过了:
$id = 0;
$6 = $_REQUEST['6'];
$7 = $_REQUEST['7'];
$8 = $_REQUEST['8'];
$xary = array('6','7','8','9')
$oAppl->save_record("tablename", $id, "id");
这给了我错误。
我也可以在Mysql中创建和使用同名的字段吗?
答案 0 :(得分:14)
这就是PHP的设计方式。您无法使用数字启动变量名称。
你可以做的是使用下划线:
$_6 = $_REQUEST['6'];
修改强> 因为变量以PHP中的 $ 开头,所以可能有变量以数字开头,但这对大多数人来说有点混乱,因为没有其他语言允许变量以数字开头(或者至少我不知道。)
但是让我们假设允许以数字开头的变量。
你能想象一个同事对你说: 23等于74?这有点令人困惑。听力 n23等于74 更有意义。您知道 n23 是一个变量而无需明确说明。
答案 1 :(得分:5)
是的,您可以在PHP中声明以数字开头的变量:
${'1'} = 'hello';
这在PHP中声明变量名为"1"
的变量。
要访问它,您需要再次使用大括号语法:
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的标识符也有很多相关的问题。
答案 2 :(得分: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);
答案 3 :(得分:1)
好好想想:
$2d = 42;
$a = 2d;
什么是? 2.0?还是42?
提示,如果你没有得到它,d之后的数字意味着它是双字面之前的数字
难以明确地确定编译单元中的数字字符是表示文字还是标识符。
空间无关紧要的语言(如果我没记错的话,就像ALGOL和原来的FORTRAN一样)因为这个原因无法接受数字来开始标识符。
这可以追溯到 - 在表示存储或数字基础的特殊符号之前。
有关更详细的讨论,请访问Why can't variable names start with numbers?
答案 4 :(得分:0)
正如php documentation所说,你不能:
基本
PHP中的变量由美元符号后跟变量名称表示。变量名称区分大小写。
变量名遵循与PHP中其他标签相同的规则。一个有效的 变量名称以字母或下划线开头,后跟任意名称 字母,数字或下划线的数量。
作为正则表达式,它将表达为:
[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*
关于MySQL,documentation说:
标识符可以以数字开头,但除非引用可能不包含 只是数字。
答案 5 :(得分:0)
你无法在PHP中定义一个以数字开头的变量。看看下面的链接。它具有定义变量的基础知识。
答案 6 :(得分:0)
这是一种遗留问题,从早期开发的语言开始,如C,Fortran等。此外,一些shell脚本语言对于以数字开头的标识符(即输入参数)具有特殊的方法。 PHP标准只是决定遵守这个一般规则。
答案 7 :(得分: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++;
}
答案 8 :(得分:0)
为了增加@ 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而true
评估为1。
答案 9 :(得分:0)
首先PHP
被设计为a variable can't start with a number
。大多数语言都遵循相同的命名规则。这主要用于better readability
和compiling performance optimisation
。编译时在词法分析中避免回溯。
假设变量如下:
test = 12;
123test = 12;
编译器在遇到字母“ t”时会立即知道test
是标识符。
在123test
的情况下,编译器将无法确定它是数字还是标识符,直到它在3
之后命中“ t”,并且结果需要回溯。
答案 10 :(得分:0)
所有说可以在 PHP 中成功创建 NUM 变量的答案都是错误的!
所有说 {num} 实际上创建一个名为 num 的变量的答案都是错误的。
如果我们使用 {1} 创建一个数字变量,$GLOBALS 变量将没有它。
但是 get_defined_vars()
返回的数组可能会有它(我有时不明白)...
现在如果我以另一种方式应用这个逻辑,通过使用 $GLOBALS 来定义一个变量,同样的事情肯定会发生。
绝对不推荐使用这种(脏/不稳定)逻辑(如文档中直接描述的那样),我很确定您在编程时永远不会缺少变量名,除非您对语法过于简洁。
因此请避免在开头使用数字/作为变量名称,因为您在其他语言中会这样做