PHP 中关联数组的插值:揭示意外行为
PHP 的字符串插值提供了一种将变量嵌入字符串的便捷方法。但是,在使用关联数组时,插值行为可能会偏离预期。
请考虑以下代码片段:
<code class="php">$ha = ['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?)</code>
注意代码的最后一行:
<code class="php">print "He said $ha[key1]";</code>
令人惊讶的是,这一行执行正确,尽管它使用了看似不正确的语法。为了理解这种行为,我们深入研究 PHP 的插值机制。
PHP 允许使用两种语法进行变量插值:
对于关联数组,文档中明确建议使用第二种语法。然而,PHP 的插值机制包含一个特殊的例外,用于访问双引号字符串内的关联数组元素。
如果双引号变量包含未用大括号括起来的键,则解释器假定它引用关联数组数组键。即使键与方括号之间被空格或其他空白字符分隔,此解释也会扩展。
因此,以下行被识别为有效插值:
<code class="php">print "He said $ha[key1]";</code>
总而言之,虽然PHP 解释器认为它是“正确的”,但这种插值行为可能是意外的。但是,将关联数组元素插入字符串的推荐语法仍然是使用大括号,因为它可以确保不同 PHP 版本之间的行为一致且可预测,并确保与未来版本的兼容性。
以上是为什么即使没有大括号,PHP 的字符串插值也能与关联数组一起工作?的详细内容。更多信息请关注PHP中文网其他相关文章!