考虑一下:
$a = 'u';
$b[$a] = 'v';
$c[$b[$a]] = 'w';
这很好用:
php > echo $c[$b[$a]];
w
这也有效:
php > echo '$c[$b[$a]]';
'$c[$b[$a]]'
然而,这会导致语法错误:
php > echo "$c[$b[$a]]";
PHP Parse错误:语法错误,意外'[',期待']'
虽然较短的版本有效:
php > echo "$b[$a]";
v
为什么?
答案 0 :(得分:3)
简短的回答是:不要像这样写PHP!如果阅读困惑则使用中间变量。
但是,它可以修复:看起来PHP只是想在变量的最外边缘使用大括号分隔符:
<?php
$a = 'u';
$b[$a] = 'v';
$c[$b[$a]] = 'w';
echo "{$c[$b[$a]]}";
这也很好:
echo "${c[$b[$a]]}";
在第一种情况下,整个事物用大括号括起来,而在第二种情况下,$
被允许在大括号构造之外,以说下一位是一个变量。
答案 1 :(得分:3)
在double quoted string中有两种variable parsing,简单和复杂。简单的解析只适用于单维数组或对象。所以这些将起作用:
echo "Valid: $foo[1]";
echo "Valid: $foo[bar]";
echo "Valid: $foo->bar";
但这些不会:
echo "Invalid: $foo[1][2]";
echo "Invalid: $foo->bar->baz";
echo "Invalid: $foo->bar()[2]";
复杂的解析是他的答案中提出的halfer,它将表达式包装在花括号中,并且确实可以解决你的问题:
echo "Valid: ${foo[1][2]}";
echo "Valid: ${foo->bar->baz}";
echo "Valid: ${foo->bar()[2]}";