提问人:Rahul Bhanushali 提问时间:4/4/2014 更新时间:4/4/2014 访问量:285
PHP 变量对象属性
PHP Variable object properties
问:
我理解PHP中变量的概念。 根据我对PHP中变量的理解,代码如下:
$foo = 'hello';
$$foo = 'world';
echo $foo . ' ' . $hello;
将生成输出为:
Hello World
但是我发现很难理解可变对象属性的情况
假设我有一个名为 foo 的类,其单个属性如下:
class foo {
var $r = 'I am r.';
}
现在,创建类 foo 的实例并使用变量变量的概念,代码如下:
$foo = new foo();
$bar = 'r';
echo $foo->$bar;
将输出:
I am r.
直到一切正常,但是当我包含一个具有数组值的属性时,它对我来说会搞砸。 例如,我将另一个具有数组值的属性添加到类 foo 中,现在该类如下所示:
class foo {
var $arr = array('I am A.', 'I am B.', 'I am C.');
var $r = 'I am r.';
}
现在,当我创建类 foo 的实例并尝试读取属性 $arr[1] 时,如下所示:
$arr = 'arr';
echo $foo->$arr[1];
其中输出:
I am r.
输出对我来说看起来很奇怪。我的意思是 $foo->$arr[1] 如何解析到类 foo 中的属性$r?
不应该将 $foo->$arr 解析为 $foo->arr[1](注意:没有美元符号)给出输出:
I am B.
这是怎么发生的?
我知道做 $foor{$arr}[1] 会输出“我是 B”。
我的问题是为什么 $foo->$arr 不能解析为 $foo->arr ?假设变量 $arr 的值为 'arr' ?
给管理员/主管的注意事项:这个问题不是重复的;我尝试搜索类似的问题,但没有一个问题回答我需要知道的问题。
答:
class foo {
var $arr = array('I am A.', 'I am B.', 'I am C.');
var $r = 'I am r.';
}
$foo = new foo;
$arr = 'arr';
echo $foo->$arr[1];
这是优先顺序在这里咬你。最后一行可以改写为
echo $foo->{$arr[1]};
由于字符串是从索引 0 开始的数组,因此引用“arr”中的第二个字符,即“r”,并导致打印字符串“I am r”。$arr[1]
为了得到你所期望的结果,你需要明确地告诉PHP表达式的哪一部分是变量名,因为默认情况下,它贪婪地获取了几乎所有的东西。将最后一行替换为 this 将获得您期望的输出:
echo $foo->{$arr}[1];
这将计算为其完整的字符串“arr”,然后将其用作 ;然后,索引将获取该数组中的第二个条目,“我是 B”。$arr
$arr
foo
评论
上一个:变量 $_POST
下一个:PHP 和带数组的变量变量
评论