是否可以在构造函数中为类定义属性。 例如,我将一个关联数组传递给一个类构造函数,我希望根据关联数组中的内容声明和设置该类的属性。
TIA
答案 0 :(得分:2)
class Foo{
function __construct($arr){
foreach($arr as $k => $v)
$this->$k = $v;
}
}
您可以查看constructor/desctructor manual和properties manual。
需要注意的是,由于您没有在课程中定义属性,因此所有属性都设置为 public ,其中恕我直言。我认为使用reflection可以实现相同的目标。我只是更深入地检查了反射,这是不可能的(使用PHP5),因为从PHP6可能带来的反射能够做到这一点是有意义的。
完整样本
<?php
class Foo{
function __construct($arr){
foreach($arr as $k => $v)
$this->$k = $v;
}
function getBar(){
return $this->bar;
}
}
$bar = new Foo(array(
'bar' => 'bar',
'foo' => 'foo'
)
);
var_dump($bar->bar);
?>
答案 1 :(得分:0)
是的,你可以这样做。在我的头顶
public function __constructor($data){
foreach($data as $k=>$v){
$this->{$k} = $v;
}
}
这应该这样做,当然你需要数学定义字段。
我不太确定它是{$ k}还是$ {k}或$ {$ k},但其中任何一个都应该有效。
答案 2 :(得分:0)
你可以做到这一点,正如RageZ上面描述的那样,但我认为我不会建议这样做。这样做会造成这个类用户之间的“契约”过于松散 - 即没有人真正知道该类有哪些属性。
我不打算动态定义属性,而是打赌你有一组预先定义的“对象属性集”,可以反过来定义一个类层次结构。
所以不要做
这样做:
然后,根据传递给静态工厂方法的参数,使用Factory模式生成正确类型的对象。