应用实例之__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
应用实例之__get()魔术方法--ShuipFCMS的组件(Components)调用原理相关推荐
- 巧用PHP中__get()魔术方法
PHP中的魔术方法有很多,这些魔术方法可以让PHP脚本在某些特定的情况下自动调用.比如 __construct() 每次实例化一个类都会先调用该方法进行初始化.这里我们讲一下__get() 魔术方法的 ...
- vue怎么调用子元素的方法_vue 父组件中调用子组件函数的方法
vue 父组件中调用子组件函数的方法 在父组件中调用子组件的方法: 1.给子组件定义一个ref属性.eg:ref="childItem" 2.在子组件的methods中声明一个函数 ...
- php魔术方法get,PHP魔术方法之__get,__set详解(代码实例)
本文目标: 1.了解PHP中魔术方法的定义 2.了解__get()魔术方法的使用场景 3.掌握__get()魔术方法的用法 4.了解__set()魔术方法的使用场景 5.掌握__set()魔术方法的用 ...
- PHP中的常见魔术方法功能作用及用法实例
这篇文章主要介绍了PHP中的常见魔术方法功能作用及用法实例,本文讲解了构造函数和析构函数__construct()和__desctruct()以及属性重载(Property Overloading)_ ...
- php 魔术方法__get,php常用魔术方法
1.构造函数__construct()和析构函数__desctruct()分别在对象创建和销毁时被调用.对象被"销毁"是指不存在任何对该对象的引用,比如引用该对象的变量被删除(un ...
- php 魔术方法__get,PHP魔术方法之__set()和__get()
先来看一段代码: class Article{ //私有成员属性 private $title = '标题'; //受保护的成员属性 protected $author = '作者'; //公有成员属 ...
- php如何在特定情况下触发,php类知识点滴---魔术方法,系统在特定时机触发的方法...
__get()获取私有或受保护属性时调用的方法 class coach { private $chairfit = "徐晓冬"; public function __constru ...
- PHP面向对象的魔术方法
<?php /** * Created by PhpStorm. * User: fu * Date: 2017/7/19 * Time: 9:41 */ class Person{ prote ...
- python 类继承方法_python类的继承、多继承及其常用魔术方法
继承 一个类可以派生出一个子类,这个子类可以使用父类的属性及方法,也可以在父类的基础上添加自己的独特属性或方法.属性和方法的继承的顺序是先从自己开始,找不到再去找父类,父类没有再找父类的父类,其尽头就 ...
- php魔术方法在手册哪看,探秘PHP中的魔术方法
欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 有了构造函数,我们可以像下面的代码一样实例化一个Device类的对象. 1 $device=new Device('iPh ...
最新文章
- 快过年了,为过完年跳槽的人准备一份面试题
- linux打理ftp用户,Linux中如何添加/删除FTP用户并设置权限
- 【以太坊】在测试网络上发布智能合约
- Arthas 征文活动火热进行中,cherry 键盘等你来拿!(内附第三期中奖名单)
- 开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别
- python3打包exe_[求助]入坑学习python 需要装pyinstaller打包成exe
- pb 执行存储过程带参数_数据库存储过程
- P1459 三值的排序 Sorting a Three-Valued
- React 项目开发问题积累
- GNSS说第(三)讲---最新的GNSS观测数据及精密星历等产品的下载方式及地址
- java架构师是做什么的 java架构师的工作内容
- 【KnockoutJS】KnockoutJS 绑定列表数据。实现表头合并,列生成,图片上传等功能
- 用摄动法证明fibs的一个公式(变形)
- 开源建站系统的开源组件风险
- 深度学习热点|超直观无公式图解Contrastive Predictive Coding从脸盲说起
- 转《论兔子怎么打败狼》
- 大学英语综合教程四 Unit 4 课文内容英译中 中英翻译
- Android x86的arm兼容库移植--初步分析及尝试手动移植houdini/ndk_translation
- html中onload的使用
- PPM、PCM和PWM的区别, I2S与pcm的区别