php对象在构造函数中定义和设置属性

时间:2009-11-16 02:57:06

标签: php oop

是否可以在构造函数中为类定义属性。 例如,我将一个关联数组传递给一个类构造函数,我希望根据关联数组中的内容声明和设置该类的属性。

TIA

3 个答案:

答案 0 :(得分:2)

class Foo{
   function __construct($arr){
       foreach($arr as $k => $v)
          $this->$k = $v;
   }
}

您可以查看constructor/desctructor manualproperties 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上面描述的那样,但我认为我不会建议这样做。这样做会造成这个类用户之间的“契约”过于松散 - 即没有人真正知道该类有哪些属性。

我不打算动态定义属性,而是打赌你有一组预先定义的“对象属性集”,可以反过来定义一个类层次结构。

所以不要做

  • 如果我得到一个数组“a = 2且b = 3“,使用$ obj-> a = 3创建对象 和$ obj-b = 3
  • 如果我得到一个数组 “c = 5”,用。创建一个对象 $ obj-&gt; c = 5

这样做:

  • 为MyObjectOfTypeOne定义一个类,它具有属性$ a和$ b
  • 为MyObjectOfTypeTwo定义一个具有属性$ c
  • 的类

然后,根据传递给静态工厂方法的参数,使用Factory模式生成正确类型的对象。