我有以下几类课程:
A
我想编写一个基于某个参数设置属性值的函数,例如,如果我在对象array('b_c_foo' => 'something')
上调用它并将$a -> b -> c -> foo = 'something'
传递给它,我想要{{1要设置。
例如:
$a = new A();
$params = array(
'first' => 'first',
'b_c_foo' => 'something'
);
$a -> fillAttributes($params);
var_dump($a); // here A object should have first == 'fist', and b -> c -> foo == 'something'
我只为A
类编写了这样的函数,这很简单,因为我可以找到数组索引并将其设置为A
类,如$this -> {$index} = $value;
,但这并不容易如果通话次数是动态的。
我怎么能这样做?
答案 0 :(得分:1)
像
这样的东西public function fillAttributes(array $params)
{
foreach ($params as $attributeName => $attributeValue) {
$rootObject = $this;
foreach(explode('_', $attributeName) as $proprietyName) {
if (property_exists($rootObject, $proprietyName)) {
if (is_object($rootObject->$proprietyName)) {
$rootObject = $rootObject->$proprietyName;
}
}
}
$rootObject->$proprietyName = $attributeValue;
}
}
基本上你explode
字符串并检查是否存在具有该名称的适当性并且它不是对象。只有这样你才能设置值。