【问题标题】:dynamic class property $$value in phpphp中的动态类属性$$value
【发布时间】:2021-02-14 06:39:42
【问题描述】:

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

class Foo
{
    public $bar;

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

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

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

【问题讨论】:

    标签: php class dynamic variables properties


    【解决方案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 完成的。

          【讨论】:

            猜你喜欢
            • 2023-02-07
            • 2013-04-14
            • 2012-02-25
            • 2014-10-07
            • 2015-07-27
            • 2023-03-22
            • 1970-01-01
            • 2011-03-02
            相关资源
            最近更新 更多