【问题标题】:Why does php need complex(curly) syntax to parse associative array values in a string为什么php需要复杂(卷曲)语法来解析字符串中的关联数组值
【发布时间】:2022-01-05 06:50:59
【问题描述】:

这个问题可能与why in array single quotes not required according to the syntax重复

但我没有在那里需要我的解释。我们知道我们可以做echo "$myArr[0]",但我们不能对像echo "myAssocArr['myKey']" 这样的关联数组做同样的事情。我知道我们可以使用 php 复杂的语法来绕过,比如echo "{myAssocArr['myKey']}"

我的问题是,如果 php 可以在没有复杂语法的情况下访问普通索引数组,那么为什么它也不能访问辅助数组的值。 php 编译器/zend/whatever 引擎内部发生了什么阻止它在没有复杂语法的情况下访问字符串中的关联数组的值。

【问题讨论】:

  • 我可以使用echo "$assocArray[mykey]";
  • @vee 我也这样做了,但是 stackoverflow 上的其他帖子表明这是一种不好的做法,因为那不是标准的 php 允许的语法。
  • @vee 您的链接都没有使用不带引号的数组键。在这里它说这是一种不好的做法,可能会抛出错误stackoverflow.com/a/13622685/3429430
  • 它不会抛出任何错误。在 PHP 7.0+ 上测试。 php.net/language.types.string 请看一下示例 15 echo "He drank some $juices[koolaid1] juice.".PHP_EOL; 没有引号 (')。 KIKO 的回答也没有引号。
  • 但是如果这个代码echo "$arr['mykey']";

标签: php arrays syntax


【解决方案1】:

我读过the manual on variable parsing

我认为除了"' 可以用来开始和结束一个字符串之外,没有任何合理的解释。但是,当您为变量解析字符串时,您已经在字符串中。 简单语法中不允许使用这些“令牌”。遇到一个新的字符串开头或结尾没有什么意义。但是,您可以使用以下语法:

echo "myAssocArr[myKey]";

避免了这个问题。我同意这不是很令人满意,但是除了检查 PHP 源代码之外,我认为您不会得到更好的答案。

【讨论】:

  • " 和 ' 可用于开始和结束字符串。 ... 这些“标记”在简单语法中是不允许的。 它们是,特别是单引号' 是允许的。例如echo "$var is a 'variable'"。很明显,用双引号分隔的字符串",单引号' 不是开始/结束标记。
  • @user31782 我指的是解析变量时使用的“简单语法”,而不是字符串中允许的内容。请参阅我的答案开头的链接。
  • Yes in a simple syntax单引号' 不能是开始/结束标记。
  • @user31782 我同意,但使用的算法可能没有意识到这一点。我做了一个假设。
  • @user31782:你重复了同一点。在 echo "$var is a 'variable'" 中,单引号不是需要解析的变量的一部分,但在 echo "$var['test'] is a variable" 中它是。这是一种不同的情况,正如我们所知,它的处理方式不同,因为它不是一个简单的字符串,它是一个字符串中的变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-20
  • 2012-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-20
相关资源
最近更新 更多