为什么PHP在添加数组键值对时需要双引号用于键变量?
foreach($coreXml->Environment as $Environment) {
$env = $Environment->Name;
$envArr["$env"] ="test";
}
在这个循环中,如果我不在$ env周围使用双引号或使用单引号,它将破坏错误“非法偏移类型”的代码。有什么想法吗?谢谢!
答案 0 :(得分:7)
你不需要双引号。 $envArr[$env]
是完全合法的语法
$envArr['$env']
会创建文字键'$env'
,这不是您想要的。
但是,如果$env
不是字符串或整数,而是一个对象或null
,那就是当你收到非法的抵消通知时。将变量插值为"$env"
的字符串会强制将变量强制转换为字符串,从而避免出现此问题。但后来可以说问题是你正在尝试使用非字符串作为数组偏移量,因此错误信息将是完全合理的并且更可取。
我猜你正在使用SimpleXML而$env
是SimpleXMLElement
对象。你应该使用它:
$envArr[(string)$env]
// or
$envArr[$env->__toString()]
这与用双引号括起变量基本相同,它会强制进行字符串转换,但在这种情况下,它是明确的而不是神秘的。
答案 1 :(得分:2)
我猜$ env是null或对象。如果为null,则$envArr[""]
的结果将是$envArr["$env"]
的结果。拥有空字符串索引是完全正确的。
答案 2 :(得分:1)
查看string interpolation rules的手册。当您将变量放在双引号内时,它们的值将被插值。当您将变量放在单引号内时,它们将不会被插值。以下是字面上尝试加载索引'$env
':
$envArray['$env']