为什么PHP在添加数组键值对时需要双引号用于键变量?

时间:2014-03-27 19:07:22

标签: php

为什么PHP在添加数组键值对时需要双引号用于键变量?

foreach($coreXml->Environment as $Environment) {
    $env = $Environment->Name;
    $envArr["$env"] ="test";
}

在这个循环中,如果我不在$ env周围使用双引号或使用单引号,它将破坏错误“非法偏移类型”的代码。有什么想法吗?谢谢!

3 个答案:

答案 0 :(得分:7)

需要双引号。 $envArr[$env]是完全合法的语法 $envArr['$env']会创建文字键'$env',这不是您想要的。

但是,如果$env 不是字符串或整数,而是一个对象或null,那就是当你收到非法的抵消通知时。将变量插值为"$env"的字符串会强制将变量强制转换为字符串,从而避免出现此问题。但后来可以说问题是你正在尝试使用非字符串作为数组偏移量,因此错误信息将是完全合理的并且更可取。

我猜你正在使用SimpleXML而$envSimpleXMLElement对象。你应该使用它:

$envArr[(string)$env]
// or
$envArr[$env->__toString()]

这与用双引号括起变量基本相同,它会强制进行字符串转换,但在这种情况下,它是明确的而不是神秘的。

答案 1 :(得分:2)

我猜$ env是null或对象。如果为null,则$envArr[""]的结果将是$envArr["$env"]的结果。拥有空字符串索引是完全正确的。

答案 2 :(得分:1)

查看string interpolation rules的手册。当您将变量放在双引号内时,它们的值将被插值。当您将变量放在单引号内时,它们将不会被插值。以下是字面上尝试加载索引'$env':

的数组
$envArray['$env']