Dynamic Class 属性 PHP 中的 $$value

dynamic class property $$value in php

提问人:Cameron A. Ellis 提问时间:5/13/2009 更新时间:6/22/2017 访问量:36012

问:

我怎样才能引用一个只知道字符串的类属性?

class Foo
{
    public $bar;

    public function TestFoobar()
    {
        $this->foobar('bar');
    }

    public function foobar($string)
    {
         echo $this->$$string; //doesn't work
    }
}

评估字符串的正确方法是什么?

PHP 动态 变量 属性

评论


答:

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}