【问题标题】:Difference between $foo[bar] and $foo['bar'] in phpphp 中 $foo[bar] 和 $foo['bar'] 的区别
【发布时间】:2014-02-05 12:04:05
【问题描述】:

我在很多项目中都使用$foo[bar] 却没有注意到丢失的'

现在,我明白它为什么起作用了,我认为这是因为缺少的常量被它的名称替换,因此指的是完全相同的数组项。

但是..这是非常错误的还是可以接受的。有什么缺点?我是否应该挖掘旧项目来替换它,或者它的性能下降真的不明显吗?

【问题讨论】:

  • 大错特错。它会产生警告,但最糟糕的是,在某些时候,您可能会拥有一个常量 define('bar', 'lorem ipsum') 并想象在这种情况下会发生什么。至于性能下降,这是一个很深的话题。如果您记录警告/错误,如果您记录到文件,则会增加硬盘上的 I/O 负载。

标签: php arrays constants


【解决方案1】:

有什么缺点?

假设您有一个类似 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.

我应该挖掘旧项目来代替这个还是性能 滴这个真的不显眼吗?

我建议你这样做。

【讨论】:

    【解决方案2】:

    如果您打开了错误显示,那么您可以找到类似的通知

    注意:使用未定义的常量 bar - 在 [...][...] 中假定为“bar” 上线

    如果你像$foo[bar]这样使用它

    执行以下代码可以看出区别

    $arr1 = array(1=>1);
    $arr2 = array(a=>2);
    $arr3 = array('a'=>3);
    
    print_r($arr1);
    print_r($arr2);
    print_r($arr3);
    

    但如果数组的键是字符串,建议使用单引号,因为警告会导致性能下降..

    【讨论】:

      【解决方案3】:

      in $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
      

      【讨论】:

      • 我认为你的最后一个例子是错误的,还是我?如果将 bar 定义为 int 10,那么最后一行将查找数组 $foo 的索引 10,在这种情况下不返回任何内容...不是吗?
      猜你喜欢
      • 1970-01-01
      • 2017-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-04
      • 1970-01-01
      • 2015-10-26
      • 1970-01-01
      相关资源
      最近更新 更多