Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php中的动态类属性$$value_Php_Class_Dynamic_Variables_Properties - Fatal编程技术网

php中的动态类属性$$value

php中的动态类属性$$value,php,class,dynamic,variables,properties,Php,Class,Dynamic,Variables,Properties,如何引用只知道字符串的类属性 class Foo { public $bar; public function TestFoobar() { $this->foobar('bar'); } public function foobar($string) { echo $this->$$string; //doesn't work } } 计算字符串的正确方法是什么?使用字符串变量引用对象的

如何引用只知道字符串的类属性

class Foo
{
    public $bar;

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

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

计算字符串的正确方法是什么?

使用字符串变量引用对象的成员变量时,只需使用一个$

echo $this->$string;

你很接近。您刚刚添加了一个额外的$sign

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

当访问仅名称存储在字符串中的局部变量时,您只需要
$$string
。因为通常在类中,您可以像
$obj->property
那样访问它,所以您只需要添加一个
$

,正如其他人所提到的,$this->$string应该就可以了

但是,

$this->$$string;
将实际计算字符串,并再次计算其结果

$foo = 'bar';
$bar = 'foobar';
echo $$foo; //-> $'bar' -> 'foobar'

要记住确切的语法,请记住您使用的
$
比通常使用的多。当您使用
$object->property
访问对象属性时,动态访问是通过
$object->$property\u name

完成的。如果您想使用属性值获取属性名称,则需要使用“{”括号:

$this->{$this->myvar} = $value;
即使它们是对象,它们也能工作:

$this->{$this->myobjname}->somemethod();

令人惊讶的是,PHP允许这些结构!但对其他人来说也可能非常模糊。如果您将文字与动态变量相结合,这也很方便,例如:
$this->{“my_prop..”$i}
这种语法在php7(.1?)中可能会遇到挑战,请遵循Rick下面的答案,使其在那里正常工作。
$this->{$this->myobjname}->somemethod();