3

我知道 PHP 变量变量是如何工作的,但是无法理解为什么这个脚本会输出“I am r”。而不是“我是 B”。

<?php
class fooo {
    var $bar = 'I am bar.';
    var $arr = array('I am A.', 'I am B.', 'I am C.');
    var $r   = 'I am r.';
}
$fooo = new fooo();
$arr = 'arr';
echo $fooo->$arr[1] . "\n";
//above line output
//I am r.
?> 
4

3 回答 3

5

您正在定义$arr = 'arr';然后从字符串 'arr' 中获取第二个字符,而不是类 Foo 中的数组,这就是为什么你得到 'r' ([1]从你的单词中返回第二个字符)。

解决方案?你应该更换:

echo $fooo->$arr[1] . "\n";

和:

echo $fooo->arr[1] . "\n";

您应该收到您想要的输出:

'I am B.'
于 2013-03-20T23:46:31.060 回答
0

当您引用对象属性时,它是变量的名称,而不是变量本身。所以你会想做:

echo $fooo->arr[1] . "\n";

得到你所期望的。

于 2013-03-20T23:46:38.317 回答
0

得到“我是B”。

您需要先解决$arr

echo $fooo->${$arr}[1]

原因是变量的范围是$arr='arr'而不是属性 $arr=array

于 2020-11-09T05:25:20.557 回答