【问题标题】:PHP Access sub property by name at runtimePHP 在运行时按名称访问子属性
【发布时间】:2011-01-05 20:31:19
【问题描述】:

是否可以动态访问对象的子属性?我管理它来访问对象的属性,而不是子对象的属性。

这是我想做的事情的一个例子:

class SubTest
{
    public $age;

    public function __construct($age)
    {
        $this->age = $age;
    }
}

class Test
{
    public $name;
    public $sub;

    public function __construct($name, $age)
    {
        $this->name = $name;
        $this->sub = new SubTest($age);
    }
}

$test = new Test("Mike", 43);

// NOTE works fine
$access_property1 = "name";
echo $test->$access_property1;

// NOTE doesn't work, returns null
$access_property2 = "sub->age";
echo $test->$access_property2;

【问题讨论】:

    标签: php oop class properties


    【解决方案1】:

    你可以使用像

    这样的函数
    function foo($obj, array $aProps) {
      // might want to add more error handling here
      foreach($aProps as $p) {
        $obj = $obj->$p;
      }
      return $obj;
    }
    
    $o = new StdClass;
    $o->prop1 = new StdClass;
    $o->prop1->x = 'ABC';
    
    echo foo($o, array('prop1', 'x'));
    

    【讨论】:

    • 在我看来这是一个非常优雅的解决方案!感谢分享。接受的答案
    【解决方案2】:

    我不这么认为......但你可以这样做:

    $access_property1 = "sub";
    $access_property2 = "age";
    
    echo $test->$access_property1->$access_property2;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-20
      • 2014-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多