我有一个VO类。
columnVo extends Model我要Model里调用Vo的方法。 但是: new ColumnVo($db) ,这里要传入一个重量级的$db.
但是我的Vo里的方法是不要应用到$db的。
------------------------------------------
在Model里要实现这种功能: $this->Vo方法(方法参数) 怎么办?因为当前$this已经指向ColumnVo,而ColumnVo初始化的时候,已经有$db了。
如果用反射的话,是不是要经历如下步骤:
1.new ColumnVo
2.调用新的Vo的方法。
这样的话,资源浪费。而且也没有办法调用当前$this的其他已经初始化好的资源。
columnVo extends Model我要Model里调用Vo的方法。 但是: new ColumnVo($db) ,这里要传入一个重量级的$db.
但是我的Vo里的方法是不要应用到$db的。
------------------------------------------
在Model里要实现这种功能: $this->Vo方法(方法参数) 怎么办?因为当前$this已经指向ColumnVo,而ColumnVo初始化的时候,已经有$db了。
如果用反射的话,是不是要经历如下步骤:
1.new ColumnVo
2.调用新的Vo的方法。
这样的话,资源浪费。而且也没有办法调用当前$this的其他已经初始化好的资源。
我试了: $this->Vo方法(方法参数) 可以用。
方法参数里面有对象引用,不是纯标量。
如下:Vo方法: getSubDes($this->column_type,$this->db);而 $this->column_type,$this->db 又是来源于配置信息字符串,
即: $param_array = array('$this->column_type','$this->db');
所以这种方法:$this->Vo方法(方法参数),好像不行。
也就是说:动态的动态,就只能用eval了吗?
class ColumnVo {
public $column_id;
public $column_name='string类型';
public $column_type = array('a','b','c','d'); 对象类型
public $column_conf = 对象类型;
public function vofuntest($type,$conf){
// 本来这里可以直接使用:$this->column_type; 但我希望对象是传入的,方便复用。
..........
}
}不是,我就是要父类动态调用子类的方法。 ColumnVo extends Module
Module中的方法:collectVoInfo(){
$this:(指向当前VO);
要实现类似 : $this->vofuntest($this->column_type,$this->column_type); 的功能。
$funname = 'vofuntest';
$param_arr = array('$this->column_type','$this->column_type');
也就是要实现:动态的动态调用。不用eval,好像没办法了。
}
另外动态调用一个方法,用 call_user_func_array() 足够
你实例化的是 columnVo 而不是 Model
所谓的在 Model 中调用 columnVo 的方法
就是在 继承的父类方法中调用子类新增的方法