在学 php,理解不了为什么 $foo->$arr[1] 和 $foo->{$arr}[1] 的结果不一致...

2016-03-24 19:42:16 +08:00
 gamexg
class foo {
    var $bar = 'I am bar.';
    var $arr = array('I am A.', 'I am B.', 'I am C.');
    var $r   = 'I am r.';
}

$foo = new foo();
$bar = 'bar';
$baz = array('foo', 'bar', 'baz', 'quux');
echo $foo->$bar . "\n";  //$bar 的值是 bar ,$foo->bar 的值是 I am bar
echo $foo->$baz[1] . "\n"; //I am bar.

$start = 'b';
$end   = 'ar';
echo $foo->{$start . $end} . "\n";//$start 的值是'b' ,$end 的值是'ar' ,{$start . $end}的值是 'bar',$foo->{$start . $end} 的值是'I am bar.'

$arr = 'arr';
echo $foo->$arr[1] . "\n";// $arr 的值是 'arr' ,$arr[1] 的值是 r $foo->$arr[1]的值是 'I am r.'。
echo $foo->{$arr}[1] . "\n";// 我理解:$arr 的值是 'arr' ,{$arr}[1] 的值是 r $foo->$arr[1]的值是 'I am r.'。但实际输出是 I am B.不太理解这里的运算优先级是什么情况。查手册运算符优先级里面没有 -> ...

最后一行实在理解不了为什么输出 I am B ...

4092 次点击
所在节点    PHP
21 条回复
gamexg
2016-03-25 20:24:47 +08:00
@leitwolf 打算认真学习下 php ,看 php.net 文档时碰到了这个问题,实在太违反常识了...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/266147

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX