使用数组键将属性添加到对象
问题描述:
是否有可能具有这样的构造。说我有一个这样的数组:使用数组键将属性添加到对象
$names = array ('name1', 'name2', 'name3');
$values = array ('value1', 'value2', 'value3');
然后,我要做到以下几点:
foreach ($names as $field) {
$this->$field = $values[$counter];
$counter ++;
}
这样,以后,我可以访问上述目标是这样的:
$var1 = $object->name1;
$var2 = $object->name2;
// produces "value1"
echo $var1;
// produces "value2"
echo $var2;
我想要做的是拥有一个动态命名字段的对象。 OO PHP有可能吗?
答
是的,这会工作,但一般变量变量都望而却步。
也许更优雅的解决办法是使用__get magic method的类像这样:然后
class Person
{
public function __construct($vars)
{
$this->vars = $vars;
}
public function __get($var)
{
if (isset($this->vars[$var])) {
return $this->vars[$var];
}
return null;
}
}
的瓦尔阵列将工作像这样:
$vars = array(
'name1' => 'value1',
'name2' => 'value2',
'name3' => 'value3',
);
$object = new Person($vars);
或者,如果你特别希望从两个阵列构建它:
$vars = array_combine($names, $values)
答
使用特殊配置您可以使用以下语法访问成员:
$object = new ArrayObject(array_combine($names, $values), ArrayObject::ARRAY_AS_PROPS);
echo $object->name1; // value1
echo $object['name1']; // value1
是的。你没有尝试过吗?虽然上面的代码不会起作用,因为你需要执行'foreach($ names = $ k => $ name)$ this - > $ name = $ values [$ k];' – DaveRandom
@DaveRandom:代码与'$ counter '。不是我会去的方式,但结果是一样的。 – webbiedave
我认为这个问题已经在这里解答:http://stackoverflow.com/questions/829823/can-you-create-class-properties-dynamically-in-php – Sam