为什么即使没有大括号,PHP 的字符串插值也能与关联数组一起工作?

DDD
发布: 2024-10-30 12:39:02
原创
812 人浏览过

 Why does PHP's string interpolation work with associative arrays even without curly braces?

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 允许使用两种语法进行变量插值:

  1. 双引号字符串: "$var"
  2. 双引号字符串中的花括号:“${$var}”

对于关联数组,文档中明确建议使用第二种语法。然而,PHP 的插值机制包含一个特殊的例外,用于访问双引号字符串内的关联数组元素。

如果双引号变量包含未用大括号括起来的键,则解释器假定它引用关联数组数组键。即使键与方括号之间被空格或其他空白字符分隔,此解释也会扩展。

因此,以下行被识别为有效插值:

<code class="php">print "He said $ha[key1]";</code>
登录后复制
登录后复制

总而言之,虽然PHP 解释器认为它是“正确的”,但这种插值行为可能是意外的。但是,将关联数组元素插入字符串的推荐语法仍然是使用大括号,因为它可以确保不同 PHP 版本之间的行为一致且可预测,并确保与未来版本的兼容性。

以上是为什么即使没有大括号,PHP 的字符串插值也能与关联数组一起工作?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!