php中的动态类属性$$value
Posted
技术标签:
【中文标题】php中的动态类属性$$value【英文标题】:dynamic class property $$value in php 【发布时间】:2010-10-25 15:36:26 【问题描述】:如何引用只知道字符串的类属性?
class Foo
public $bar;
public function TestFoobar()
$this->foobar('bar');
public function foobar($string)
echo $this->$$string; //doesn't work
评估字符串的正确方法是什么?
【问题讨论】:
【参考方案1】:在使用字符串变量引用对象的成员变量时,只需要使用一个$即可。
echo $this->$string;
【讨论】:
这种语法在 php7(.1?)+ 中可能会遇到挑战,请按照下面 Rick 的回答使其在那里正常工作。【参考方案2】:如果要使用属性值来获取属性名,需要使用“”括号:
$this->$this->myvar = $value;
即使它们是对象,它们也可以工作:
$this->$this->myobjname->somemethod();
【讨论】:
惊人的是 PHP 允许这些结构!但对其他人也可能相当模糊 如果你将文字与动态变量结合起来也很方便,例如:$this->"my_prop_".$i
【参考方案3】:
正如其他人所提到的,$this->$string 应该可以解决问题。
但是,这个
$this->$$string;
将实际评估字符串,并再次评估结果。
$foo = 'bar';
$bar = 'foobar';
echo $$foo; //-> $'bar' -> 'foobar'
【讨论】:
【参考方案4】:你很亲密。您刚刚添加了 1 个额外的 $ 符号。
public function foobar($string)
echo $this->$string; //will work
【讨论】:
【参考方案5】:echo $this->$string; //should work
在访问仅将其名称存储在字符串中的局部变量时,您只需要$$string
。由于通常在一个类中您可以像$obj->property
一样访问它,因此您只需添加一个$
。
【讨论】:
【参考方案6】:要记住确切的语法,请记住您使用的 $
比通常使用的要多。当您使用$object->property
访问对象属性时,动态访问是使用$object->$property_name
完成的。
【讨论】:
以上是关于php中的动态类属性$$value的主要内容,如果未能解决你的问题,请参考以下文章