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

当插入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代码 。 任何解释? 该功能可以被信任吗?


编辑:为了减少误解,现在发布的内容以粗体显示


是的,你可以信任它。 插入变量的所有方法都很好地包含在文档中。

如果你想有一个理由这样做,那么,我无法帮助你。 但是一如既往:PHP是老的并且已经发展了很多,因此引入了不一致的语法。


是的,这是明确定义的行为,并且将始终查找字符串键'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']

句法。


最后一个是由PHP标记器处理的特殊情况。 它不会查找是否定义了通过该名称定义的任何常量,它始终假定字符串文字与PHP3和PHP4兼容。

链接地址: http://www.djcxy.com/p/11973.html

上一篇: Interpolation (double quoted string) of Associative Arrays in PHP

下一篇: Syntax error unexpected T