2

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

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

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

制作可以初始化的类的最简单方法是什么,将数组传递给构造函数?

校正BranchSalaries不是直接从 CComponent 派生的,而是从 CDataProvider 派生的。

4

2 回答 2

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

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

编辑:如果您需要使用设置器:(这假设设置器类似于 setId() 而不是 setid()

function __construct($arr){
   foreach($arr AS $key=>$value){
       $method = "set".ucfirst($key);
       $this->$method($value);
   }
}
于 2013-06-11T15:58:19.353 回答
1

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

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。

于 2013-06-12T13:02:07.770 回答