提问人:Cameron A. Ellis 提问时间:5/13/2009 更新时间:6/22/2017 访问量:36012
Dynamic Class 属性 PHP 中的 $$value
dynamic class property $$value in php
问:
我怎样才能引用一个只知道字符串的类属性?
class Foo
{
public $bar;
public function TestFoobar()
{
$this->foobar('bar');
}
public function foobar($string)
{
echo $this->$$string; //doesn't work
}
}
评估字符串的正确方法是什么?
答:
72赞
Antonio Haley
5/13/2009
#1
使用字符串变量引用对象的成员变量时,只需使用一个 $。
echo $this->$string;
评论
1赞
Jerod Venema
12/31/2019
这种语法在php7(.1?)中可能会遇到挑战+,按照下面 Rick 的回答使其在那里正常工作。
3赞
Mike Stanford
5/13/2009
#2
你离得很近。您刚刚添加了 1 个额外的 $ 符号。
public function foobar($string)
{
echo $this->$string; //will work
}
1赞
Marc W
5/13/2009
#3
echo $this->$string; //should work
只有在访问仅其名称存储在字符串中的局部变量时才需要。由于通常在一个类中,您可以像 一样访问它,因此您只需要添加一个。$$string
$obj->property
$
19赞
Matthew H.
5/13/2009
#4
正如其他人所提到的,$this->$string应该可以解决问题。
但是,这
$this->$$string;
将实际计算字符串,并再次评估其结果。
$foo = 'bar';
$bar = 'foobar';
echo $$foo; //-> $'bar' -> 'foobar'
0赞
Kiam
8/3/2009
#5
要记住确切的语法,请记住,您使用的语法比通常使用的要多。当您用于访问对象属性时,动态访问是使用 完成的。$
$object->property
$object->$property_name
37赞
Rick
4/14/2010
#6
如果要使用属性值来获取属性的名称,则需要使用“{”括号:
$this->{$this->myvar} = $value;
即使它们是对象,它们也可以工作:
$this->{$this->myobjname}->somemethod();
评论
0赞
melledijkstra
2/11/2017
令人惊讶的是,PHP允许这些结构!但对其他人来说也可能很模糊
2赞
jave.web
8/21/2017
如果您将文字与动态变量相结合,它也很方便,例如:$this->{"my_prop_".$i}
评论