在codeigniter中加载模型的魔术

时间:2016-03-13 19:46:30

标签: php oop codeigniter-2

几天前我去面试,面试官问我一个问题,这仍然只是个问题,我找不到答案。

To Load a Model In Codeigniter 
we do,
$this->load->model('xyz_model');
then magically 
$this->xyz_model->function_of_xyz_model();
Above line lets us access function of 'xyz_model' 
named'function_of_xyz_model'

这一切是如何发生的,哪个游戏是在地毯下进行的。 由于我在OPP方面经验不足,所以请指出里面使用的概念(如果有的话)。

1 个答案:

答案 0 :(得分:0)

我想象这样的东西(虽然它非常强大,并且许多验证应该事先完成),magic methods是关键:

class ControllerOrSimilar {
    /**
    * Loader
    */ 
    var $loader;
    public function __get($instance) {
        //retrieve static instances loaded in class Loader
        return Loader::$instances[$instance];
    }
}

class Loader {
    static $instances = array();
    public function load($modelRequested) { //instanciate in static variables to be accessed globally 
        if(!$this->$instances[$modelRequested]) {
            $this->$instances[$modelRequested] = new $modelRequested();
        }
    }
}

虽然实际的实现我认为它有所不同,但我已经使用了codeigniter但从未进入实现的部分