shuipfcms:应用实例之__get()魔术方法--ShuipFCMS的组件(Components)调用原理

今天在研究ShuipFCMS的源代码,在Admin模块中的ModuleController中有一个install方法:

这个方法是安装模块的方法,具体的逻辑我们不去管他,我们着重看$this->Module这个成员变量。


先说一下,这个cms是基于tp写的,而tp本身是没有组件机制的。刚开始我也不知道这里面有组件的概念。


好,下面我们来找找这个$this->Module成员变量。ModuleController继承自AdminBase,而AdminBase继承自ShuipFCMS。在这三个类里面我们没有看到Module变量。不过在ShuipFCMS这个类中我们看到了__get()方法。

逻辑很清楚,首先调用父类的__get()方法,如果有返回值,直接返回,如果没有返回值,那么就从组件类中找。

总结:ShuipFCMS通过__get()方法实现了在任何控制器中任意调用组件的机制。我们进到Components类中可以看到,类中已经有了默认组件,并且如果我们要添加自己的组件,就可以把组件写到配置文件中去。在实例化Components类的时候,程序会自动做一个合并操作。而在Components类中,依然是通过__get()方法来实例化和调用组件的。

转载于:https://my.oschina.net/zedisdog/blog/614983

相关推荐

相关文章