今天在研究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

应用实例之__get()魔术方法--ShuipFCMS的组件(Components)调用原理相关推荐

  1. 巧用PHP中__get()魔术方法

    PHP中的魔术方法有很多,这些魔术方法可以让PHP脚本在某些特定的情况下自动调用.比如 __construct() 每次实例化一个类都会先调用该方法进行初始化.这里我们讲一下__get() 魔术方法的 ...

  2. vue怎么调用子元素的方法_vue 父组件中调用子组件函数的方法

    vue 父组件中调用子组件函数的方法 在父组件中调用子组件的方法: 1.给子组件定义一个ref属性.eg:ref="childItem" 2.在子组件的methods中声明一个函数 ...

  3. php魔术方法get,PHP魔术方法之__get,__set详解(代码实例)

    本文目标: 1.了解PHP中魔术方法的定义 2.了解__get()魔术方法的使用场景 3.掌握__get()魔术方法的用法 4.了解__set()魔术方法的使用场景 5.掌握__set()魔术方法的用 ...

  4. PHP中的常见魔术方法功能作用及用法实例

    这篇文章主要介绍了PHP中的常见魔术方法功能作用及用法实例,本文讲解了构造函数和析构函数__construct()和__desctruct()以及属性重载(Property Overloading)_ ...

  5. php 魔术方法__get,php常用魔术方法

    1.构造函数__construct()和析构函数__desctruct()分别在对象创建和销毁时被调用.对象被"销毁"是指不存在任何对该对象的引用,比如引用该对象的变量被删除(un ...

  6. php 魔术方法__get,PHP魔术方法之__set()和__get()

    先来看一段代码: class Article{ //私有成员属性 private $title = '标题'; //受保护的成员属性 protected $author = '作者'; //公有成员属 ...

  7. php如何在特定情况下触发,php类知识点滴---魔术方法,系统在特定时机触发的方法...

    __get()获取私有或受保护属性时调用的方法 class coach { private $chairfit = "徐晓冬"; public function __constru ...

  8. PHP面向对象的魔术方法

    <?php /** * Created by PhpStorm. * User: fu * Date: 2017/7/19 * Time: 9:41 */ class Person{ prote ...

  9. python 类继承方法_python类的继承、多继承及其常用魔术方法

    继承 一个类可以派生出一个子类,这个子类可以使用父类的属性及方法,也可以在父类的基础上添加自己的独特属性或方法.属性和方法的继承的顺序是先从自己开始,找不到再去找父类,父类没有再找父类的父类,其尽头就 ...

  10. php魔术方法在手册哪看,探秘PHP中的魔术方法

    欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 有了构造函数,我们可以像下面的代码一样实例化一个Device类的对象. 1 $device=new Device('iPh ...

最新文章

  1. 快过年了,为过完年跳槽的人准备一份面试题
  2. linux打理ftp用户,Linux中如何添加/删除FTP用户并设置权限
  3. 【以太坊】在测试网络上发布智能合约
  4. Arthas 征文活动火热进行中,cherry 键盘等你来拿!(内附第三期中奖名单)
  5. 开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别
  6. python3打包exe_[求助]入坑学习python 需要装pyinstaller打包成exe
  7. pb 执行存储过程带参数_数据库存储过程
  8. P1459 三值的排序 Sorting a Three-Valued
  9. React 项目开发问题积累
  10. GNSS说第(三)讲---最新的GNSS观测数据及精密星历等产品的下载方式及地址
  11. java架构师是做什么的 java架构师的工作内容
  12. 【KnockoutJS】KnockoutJS 绑定列表数据。实现表头合并,列生成,图片上传等功能
  13. 用摄动法证明fibs的一个公式(变形)
  14. 开源建站系统的开源组件风险
  15. 深度学习热点|超直观无公式图解Contrastive Predictive Coding从脸盲说起
  16. 转《论兔子怎么打败狼》
  17. 大学英语综合教程四 Unit 4 课文内容英译中 中英翻译
  18. Android x86的arm兼容库移植--初步分析及尝试手动移植houdini/ndk_translation
  19. html中onload的使用
  20. PPM、PCM和PWM的区别, I2S与pcm的区别

热门文章

  1. vue 通过 Ctrl 、Shift 键 + 点击鼠标实现 div 多选操作
  2. 绑住韩寒易中天,果麦文化上市的底气是什么?
  3. 【观察】飞象工业互联网平台,阿里云IoT的沉淀与释放
  4. 渗透测试常用工具-amap服务枚举
  5. Win 7 Office 2007,打开word出错
  6. ZYNQ系列(一) Petalinux建立工程
  7. 为什么对偶问题一定是凸优化问题?
  8. access中本年度的四月一日_吉林十二中古时孔夫子栽银杏设坛讲学 今日十二中植银杏校园生辉...
  9. 如何判断时间复杂度和空间复杂度
  10. CString的拆分词函数Tokenize