【问题标题】:Using citation marks around a variable in array access在数组访问中在变量周围使用引用标记
【发布时间】:2016-06-10 09:30:56
【问题描述】:

我正在阅读一些遗留代码并遇到一个奇怪的案例:

$my_assoc_array; /* User defined associative array */
$my_key; /* User defined String */
$value = $my_assoc_array["$my_key"];

当变量用作键时,您是否希望在变量周围加上引文标记 (")?像一个非常特殊的角落案例?还是根本没有理由这样做?

-- 编辑--
也许在某些旧版本的 PHP 中存在差异? (记住这是遗留代码)。

【问题讨论】:

  • 在这个具体的例子中,这是没有意义的,但你的场景是非常非常严格的。
  • @JonStirling 什么时候可以这样做?
  • 好吧,与任何其他双引号字符串一样,您可以在变量上构建,例如“key_$my_key”。还有一个想法是$my_key 可能是一个带有 __toString 的对象(尽管我一生都无法理解为什么有人会这样做)。但它们不适用于您给出的示例。

标签: php arrays string associative-array


【解决方案1】:

有一个例子我可以找到输出不同的地方,即$mykey = false。 (这可能不适用于 $mykey 是字符串的示例,但话又说回来:这是 PHP 的狂野世界)

<?php
$arr = array("1"=>"b", "0"=>"a");
$mykey = false;
var_dump($arr[$mykey]);
// returns "a"
var_dump($arr["$mykey"]);
// gives Undefined index error

$mykey = true;
var_dump($arr[$mykey]);
// returns "b"
var_dump($arr["$mykey"]);
// returns "b"

这可以(错误)用于击败我......

【讨论】:

    【解决方案2】:

    数组索引内不必用双引号绑定变量名:

    你可以简单地写没有引号:

    $value = $my_assoc_array[$my_key];
    

    【讨论】:

      【解决方案3】:

      如果 $my_key 是一个整数值,那就不同了

      $my_key = 3; /* User defined String */
      $value = $my_assoc_array["$my_key"]; /* returns $my_assoc_array["3"] */
      $value = $my_assoc_array[$my_key]; /* returns $my_assoc_array[3] */
      

      【讨论】:

      • 你不能生成(afaik)一个键为3键为"3"的数组,所以在这个例子中,这两行都是一样。
      猜你喜欢
      • 1970-01-01
      • 2015-12-21
      • 1970-01-01
      • 1970-01-01
      • 2013-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      相关资源
      最近更新 更多