2010-01-16 78 views
2

是否可以动态访问对象的子属性?我管理它来访问一个对象的属性,但不是一个子对象的属性。PHP在运行时按名称访问子属性

这里是我想要做的事情的例子:

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; 

回答

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')); 
+0

在我看来这是一个非常优雅的解决方案!感谢分享。接受的答案 – 2010-01-16 15:03:30

1

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

$access_property1 = "sub"; 
$access_property2 = "age"; 

echo $test->$access_property1->$access_property2;