PHP变量插值,为什么它工作


PHP variable Interpolation, why it works

给定这个设置

$names = array('Smith', 'Jones', 'Jackson');

我明白这行得通:

echo "Citation: {$names[1]}[1987]".PHP_EOL; //Citation: Jones[1987]

PHP通过复杂的语法与花括号,是拉动数组的第二个元素的值和[1987]只是另一个文本…

但是在下一个代码中:

echo "Citation: $names[1][1987]".PHP_EOL;

我希望出现错误,我希望PHP将其解释为二维数组并抛出错误,但相反,它给了我相同的输出,上面的代码"Citation: Jones[1987]"

为什么?

对于]的第一次出现,PHP会转到这里,因为您有一个数组,正如您在手册中看到的:

同样,数组索引或对象属性也可以解析。对于数组索引,右方括号(])标志着索引的结束。同样的规则适用于对象属性和简单变量。

表示末尾是第一个索引,例如

<>以前回声"引用:名称美元[1 ] [1987]".PHP_EOL;//^开始^结束之前

所以这意味着你的"第二次元"只是解析为一个正常的字符串。因此,对于更复杂的结构,你必须使用复杂的语法来标记变量的开始和结束,例如

echo "Citation: {$names[1][1987]}".PHP_EOL;
              //^ See here      ^

那么这会给你一个警告:

注意:未初始化字符串偏移量:1987