构建组件

时间:2013-06-11 15:52:21

标签: php properties yii yii-components

BranchSalaries是从CComponent派生的类。它具有monthyear属性的获取/设置方法。

以下代码不起作用(更具体地说,不初始化yearmonth属性):

new BranchSalaries(array('id'=>'branch_salaries', 'year'=>$year, 'month'=>$month));

最简单的方法是创建一个可以初始化的类,将数组传递给构造函数?

更正BranchSalaries不是直接来自CComponent,而是来自CDataProvider。

2 个答案:

答案 0 :(得分:2)

function __construct($arr){
   foreach($arr AS $key=>$value){
       $this->$key = $value;
   }
}

您需要一个可以处理数组的构造函数。

编辑:如果你需要使用setter :(这假设setter就像setId()而不是setid()

function __construct($arr){
   foreach($arr AS $key=>$value){
       $method = "set".ucfirst($key);
       $this->$method($value);
   }
}

答案 1 :(得分:1)

要像Yii那样设置类,可以使用Yii::createComponent(),然后不需要创建cunstomized构造函数。我的情况是:

Yii::createComponent(array(
    'class' => 'BranchSalaries',
    'id'=>'branch_salaries',
    'year'=>$year,
    'month'=>$month
));

虽然它看起来不方便用户,但它可用于自动创建对象。

class参数也可以与路径别名一起使用:

Yii::createComponent(array(
    'class' => 'ext.someExtension.BranchSalaries',
    'id'=>'branch_salaries',
    'year'=>$year,
    'month'=>$month
));

它还从外部类范围设置类属性,因此将自动使用getter和setter。