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的主要内容,如果未能解决你的问题,请参考以下文章

动态创建类属性

php里面用魔术方法和匿名函数闭包函数动态的给类里面添加方法

PHP类中的属性范围

PHP中的反射

Python如何通过字符或数字动态获取对象的名称或者属性?

VBA 中的动态属性名称