我有一个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的其他已经初始化好的资源。

解决方案 »

  1.   

    eval 感觉很危险啊,不敢用。 
    我试了: $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了吗?
      

  2.   


    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,好像没办法了。
      
    }
      

  3.   

    我非常非常喜欢$this,指向当前子类的功能,这太强大了, 再加上eval。 就能实现无限层动态调用。
      

  4.   

    如老大所说,单例模式可以不再让你把对象传来传去。在需要的地方调用一个静态方法就可以了
    另外动态调用一个方法,用 call_user_func_array() 足够
      

  5.   

    我想你是把事情弄混了columnVo extends Model
    你实例化的是 columnVo 而不是 Model
    所谓的在 Model 中调用 columnVo 的方法
    就是在 继承的父类方法中调用子类新增的方法