php中的$ foo [bar]和$ foo ['bar']之间的区别

时间:2014-02-05 12:04:05

标签: php arrays constants

我一直在很多项目上使用$foo[bar]而没有注意到遗漏的'

如今,我理解它为什么会起作用,我认为这是因为缺少常量被它的名称替换,因此指的是完全相同的数组项。

但是......这是非常错误还是可以被接受。有什么缺点?我应该深入挖掘旧的项目来取代这个,还是性能下降真的不明显?

3 个答案:

答案 0 :(得分:5)

  

有什么缺点?

假设您有一个类似http://somesite.com/test.php?item=20

的网址

场景:1(您的情况)

<?php
echo $_GET[item]; // 20 is printed with a warning.. 

场景:2(最坏的情况)

<?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