今天在研究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()方法来实例化和调用组件的。

本文深入探讨了ShuipFCMS中组件机制的实现方式,详细分析了通过__get()方法如何在任何控制器中调用组件,以及如何在Components类中进行组件的实例化和调用。
488

被折叠的 条评论
为什么被折叠?



