在php中动态访问对象变量

在php中动态访问对象变量,php,object,Php,Object,我的服务提供商提供了多种响应类型,这就是我创建如下配置数组的原因 $configArray = array( 'type_1' => array( 'name' => array('parent', 'user', 'profile', 'name', 'fullName') ), 'type_2' => array( 'name' => array('parent', 'person', 'info', 'basic', 'name')

我的服务提供商提供了多种响应类型,这就是我创建如下配置数组的原因

$configArray = array(
  'type_1' => array(
     'name' => array('parent', 'user', 'profile', 'name', 'fullName')
   ),
  'type_2' => array(
     'name' => array('parent', 'person', 'info', 'basic', 'name')
   ) 
);
因此,如果返回类型为“类型1”,则变量“name”的对象路径为
$obj->parent->user->profile->name->fullName
,类型2的对象路径为
$obj->parent->person->basic->name

我的问题是,在php中,哪个是动态设置此对象路径的正确实现?现在,我的计划如下

$path = '';
foreach($configArray[$type]['name'] as $chunks ){ 
  if($path != ''){ $path .= '->'; }
  $path .= $chunks;
}
如果有人能提出一个标准方法,那将非常有帮助

提前感谢,,
Tismon Varghese

您可以通过使用来实现这一点,但是我不建议使用这种方法,因为如果输入来自外部,它很容易远程执行代码:

$path = '';
foreach($configArray['type_1']['name'] as $chunks ){
  $path .= '->'.$chunks;
}
// $config will have value of $obj->parent->user->profile->name->fullName
eval('$config = $obj'.$path.';');
相反,您可以循环对象路径中的每个给定对象,并检查对象中是否存在该属性:

// Say $obj is your root object
foreach($configArray[$type]['name'] as $prop) { 
    if (!is_object($obj)) break;
    if (property_exists($obj, $prop)) {            
        $obj = $obj->$prop;
    }         
}

// This will have value of say $obj->parent->user->profile->name->fullName
print_r($obj);

在不清理输入的情况下,不要让外部输入决定如何调用对象名。否则,您的代码会被黑客攻击。标准的方法是使用构造函数,它分离输入并返回实例化的对象。谢谢Ulver。根据建议修改代码,因为这似乎是合理的。