用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3054|回复: 9
收起左侧

[讨论/交流] 新手求助,如何动态调用Model?

[复制链接]
发表于 2011-2-21 20:06:19 | 显示全部楼层 |阅读模式
本帖最后由 yayongm 于 2011-2-21 20:08 编辑

折腾了一下午,没有搞定,请高手指点:
正常情况下,我们
$this->load->model('ModelA');
然后
$this->modela->MethodA();
可是我想动态调用,类似下面:
$this->load->model('ModelA');
装载后
$this->getModel('modela')->MethodA();
可是折腾一个下午无法实现,请高手帮助,谢谢.
发表于 2011-2-21 20:30:13 | 显示全部楼层
本帖最后由 jeongee 于 2011-2-21 20:31 编辑

你非要这样的话,你就去扩展下CI_Controller吧
如:
PHP复制代码
 
    MY_Controller extends CI_Controller
{
      function __construct()
     {
          parent::__construct();
     }
 
   function getModel($model)
   {
         $this->load->model($model);
         return &$this->$model;
    }
}
 
复制代码
 楼主| 发表于 2011-2-22 08:46:36 | 显示全部楼层
本帖最后由 yayongm 于 2011-2-22 08:48 编辑

谢谢jeongee,貌似:
return &$this->$model;
这句话有错误,要声明$this->$model为类成员吗?还有
$this->load->model($model);
的返回值为void.
谢谢啦...
新手,首次接触CodeIgniter,请多多包涵....
 楼主| 发表于 2011-2-22 09:51:45 | 显示全部楼层
人工置顶吧.
其实这个问题可以简化为:根据类实例名称来调用类方法.
发表于 2011-2-22 14:14:57 | 显示全部楼层
恩,昨天想用CI写一个动态扩展的小工具,也有这个需求,试了很多办法都失败,然后就Google到这里来了...
如果是java的话很容易实现,用反射就行了,php的反射也能这么用嘛?
发表于 2011-2-22 14:37:02 | 显示全部楼层
回复 5# maboroshi


   php有个特性叫变量的变量,然后这个就很容易实现了
发表于 2011-2-22 14:48:17 | 显示全部楼层
啊,原来直接用名字就可以了orz
$fred = 'Test_model';
$this->$fred->info();

只试过2.0,之前的版本应该也可以...
发表于 2011-2-22 14:52:02 | 显示全部楼层
回复 7# maboroshi


   呵呵,是的,跟CI版本没关系,这个是PHP的特性
发表于 2011-2-22 14:59:36 | 显示全部楼层
$name='jhon';
$$name='Rose';
等价于$jhon='Rose';
 楼主| 发表于 2011-2-23 09:57:40 | 显示全部楼层
感谢楼上各位高手解答,问题已解决,谢谢大家!
CI终于入门啦,哈哈哈.....

本版积分规则