PHP 中关联数组的插值(双引号字符串)

2022-08-30 09:46:30

在插入 PHP 的字符串索引数组元素 (5.3.3, Win32) 时,可能会或不会出现以下行为:

$ha = array('key1' => 'Hello to me');

print $ha['key1'];   # correct (usual way)
print $ha[key1];     # Warning, works (use of undefined constant)

print "He said {$ha['key1']}"; # correct (usual way)
print "He said {$ha[key1]}";   # Warning, works (use of undefined constant)

print "He said $ha['key1']";   # Error, unexpected T_ENCAPSED_AND_WHITESPACE
print "He said $ha[ key1 ]";   # Error, unexpected T_ENCAPSED_AND_WHITESPACE
print "He said $ha[key1]";     # !! correct (How Comes?)

无可估量的是,最后一行似乎是正确的PHP代码。有什么解释吗?是否可以信任此功能?


编辑:帖子的要点现在设置为粗体字,以减少误解。

答案 1

是的,您可以信任它。文档中很好地介绍了插值变量的所有方法

如果你想有一个这样做的原因,好吧,我不能帮助你。但一如既往:PHP很古老,已经发展了很多,因此引入了不一致的语法。


答案 2

是的,这是定义良好的行为,并且将始终查找字符串键 ,而不是(可能未定义的)常量的值。'key'key

例如,请考虑以下代码:

$arr = array('key' => 'val');
define('key', 'defined constant');
echo "\$arr[key] within string is: $arr[key]";

这将输出以下内容:

$arr[key] within string is: val

也就是说,编写这样的代码可能不是最佳做法,而是使用:

$string = "foo {$arr['key']}"

$string = 'foo ' . $arr['key']

语法。


推荐