在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。根据建议修改代码,因为这似乎是合理的。