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