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


Why does PHP require double quotes for key variable in adding array key-value pairs?

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

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

在这个循环中,如果我没有在$env周围使用双引号或使用单引号,它会破坏代码,错误是"非法偏移类型"。知道为什么吗?谢谢!

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

然而,如果$env 不是字符串或整数,而是一个对象或null,那么就会得到非法偏移通知。使用"$env"将变量插入到字符串中强制将变量强制转换为字符串,从而避免了该问题。但是问题是,您试图使用非字符串作为数组偏移量,因此错误消息将是完全合理的,并且更可取。

我猜你正在使用SimpleXML和$envSimpleXMLElement对象。你应该使用这个:

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

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

我猜$env是null或一个对象。如果为空,则$envArr[""]将是$envArr["$env"]的结果,使用空字符串索引完全可以。

查看手册中的字符串插补规则。当你把变量放在双引号内时,它们的值将被插入。当你把变量放在单引号内时,它们不会被插入。下面的代码试图加载索引为'$env '的数组:

$envArray['$env']