我一直在很多项目上使用$foo[bar]
而没有注意到遗漏的'
如今,我理解它为什么会起作用,我认为这是因为缺少常量被它的名称替换,因此指的是完全相同的数组项。
但是......这是非常错误还是可以被接受。有什么缺点?我应该深入挖掘旧的项目来取代这个,还是性能下降真的不明显?
答案 0 :(得分:5)
有什么缺点?
假设您有一个类似http://somesite.com/test.php?item=20
,
<?php
echo $_GET[item]; // 20 is printed with a warning..
<?php
define('item',20);
echo $_GET[item]; // A warning will be thrown and nothing will be printed.
我应该挖掘旧项目来取代这个或性能 这真的不明显吗?
答案 1 :(得分:2)
如果您已显示错误,则可以找到
等通知注意:使用未定义的常量条 - 在[...] [...]中假定为'bar' 在线
如果你像$foo[bar]
如果执行以下代码,您可以看到区别
$arr1 = array(1=>1);
$arr2 = array(a=>2);
$arr3 = array('a'=>3);
print_r($arr1);
print_r($arr2);
print_r($arr3);
但如果数组的键是一个字符串,它会重新使用单引号,因为警告会导致性能下降。
答案 2 :(得分:2)
$foo[bar]
bar
中的必须保持不变,而$ foo ['bar'] bar
是关键
如果您使用
$foo[bar] = "a";
你会收到这样的通知
Notice: Use of undefined constant bar - assumed 'bar' in [some_path] on line 5
通知显示bar
未定义为常量
首先将bar
称为常量
define("bar", 10);
$foo[bar] = "a";
echo $foo[bar]; // will display 10