cmstop传递什么控制器和方法---就实例化该控制器
object顶级类
class object
第一级抽象类controller
abstract class controller extends object
第二级抽象类controller_abstract 继承controller 祖父类
abstract class controller_abstract extends controller
cmstop.php主程序
设置属性public $app, $controller, $action
用来接收并保存当前请求的模块,控制器,和方法
实例化该对象,
$obj = new $this->class($this);
在cmstop.php中实例化$this.
这次接收到的$this->controller= content
所以.实例化的是content类,调用的方法execute()没有的时候.就到父类中找
$response = $obj->execute();
该execute方法在父类controller_abstract 中
当前所有控制器.都是继承这个父类抽象类controller_abstract 中
在父类中的$this就是类名controller_admin_content
(实例化时的属性$this->controller= content)
父类的$this->app就是实例化时.包含的所有有值的属性
父类的$this->app->action就是所有属性中的action属性
抽象父类的作用:
if ($this->action_exists($this->app->action))//判断该当前类是否存在一个方法 存在就让他运行..call他
用户--方法的--数组
{
$response = call_user_func_array(array($this, $this->app->action), $this->app->args);
}
这样确保.$_GET传递过来什么控制器.cmstop就实例化哪个控制器.
并且调用该对象父类抽象类中方法,$response = $obj->execute();
实例化时.是什么控制器.什么方法.就call他调用该控制器和方法
call_user_func_array(array($this, $this->app->action)
主程序中 定义公用属性
class cmstop extends object
public $app, $controller, $action
接收用户请求的参数
$this->app = 'system';
$this->controller = 'content';
$this->action = 'index';
实例化$this.就是把这些属性作为参数传递给controller_admin_content类.并且触发构造方法.
$obj = new $this->class($this);
再传递给父类的构造方法,
父类检查是否存在请求的方法
if($this->action_exists($this->app->action))
存在就call他
$response = call_user_func_array(array($this, $this->app->action), $this->app->args);
$obj = new $this->class($this);
实例化时.做了2件事.
1实例化该属性中的controller类.
2把属性值作为参数,传递给该类的构造函数,再传递给父类的构造函数
class controller_admin_content extends controller_abstract
function __construct(& $app)
{
parent::__construct($app);
}
cmstop传递什么控制器和方法---就实例化该控制器的更多相关文章
- 基于TP框架的ThinkCMF,控制器display方法源码分析
昨天在写代码的时候,看见写了无数次的模版渲染方法:$this->display(),突然很想弄清楚它是如何实现的. 今天不忙,就分析了一下. class TestController exten ...
- ThinkPHP 3.2.2跨控制器调用方法
所谓跨控制器调用,指的是在一个控制器中调用另一个控制器的某个方法.在ThinkPHP中有三种方式实现跨控制器调用: 直接实例化: A()函数实例化; R()函数实例化. (1)直接实例化 直接实例 ...
- YII2中使用RBAC对模块,控制器,方法的权限控制以及规则的使用
在使用YII2中自带的RBAC时,需要先配置config/web.php: return [ // ... 'components' => [ 'authManager' => [ 'cl ...
- ThinkPHP跨控制器调用方法
跨控制器调用方法 1. 先造对象,再调用里面的方法 $sc=new \Home\Controller\IndexController(); 用绝对路径找echo $sc->ShuChu(); ...
- 创建控制器的方法、控制器加载view过程、控制器view的生命周期、多控制器组合
在介绍四大对象的那篇博客中,可以基本了解到程序启动的过程: main-->UIApplicationMain-->创建UIApplication的实例和app代理AppDelegate的实 ...
- 第一零三天上课 PHP TP框架下控制器的方法分离
(1)配置信息 修改配置文件->Config.php (配置后,原先的控制方法无效) 'ACTION_BIND_CLASS' => TRUE, // 控制器方法分离 (2)在Control ...
- 关于ThinkPHP控制器的方法失效的问题
今天发现控制器的方法失效了,用了排除法,找了长时间的原因,都没有找出来,后来干脆把home模块中的控制器和视图文件都复制到bbs模块下,竟然也不行. 这说明了控制器和视图没有问题,一定是模块的配置有问 ...
- Python中的__new__()方法与实例化
@Python中的__new__()方法与实例化 __new__()是在新式类中新出现的方法,它作用在构造方法建造实例之前,可以这么理解,在Python 中 存在于类里面的构造方法__init__ ...
- spring中获取dao或对象中方法的实例化对象
spring中获取dao的中方法的实例化对象: //获取应用上下文对象 ApplicationContext ctx = new ClassPathXmlApplicationContext(&quo ...
随机推荐
- cocos2d-js引擎学习笔记
cocos2d-js3.0实用语法 /*初始化继承类*/ var Enemy = cc.Sprite.extend({ hp: 0, fileName: "enemy.png", ...
- servlet的url-pattern匹配规则
首先需要明确几容易混淆的规则: servlet容器中的匹配规则既不是简单的通配,也不是正则表达式,而是特定的规则.所以不要用通配符或者正则表达式的匹配规则来看待servlet的url-pattern. ...
- 【.NET】字符串处理
类名:DealString /// 1.截取字符串,最后加3个小数点 /// 2.获得指定Url的参数的string类型值 /// 3.判断数据类型 /// 4.过滤JS标记 /// 5.获取Chec ...
- iOS蓝牙开发
蓝牙常见名称和缩写 MFI ======= make for ipad ,iphone, itouch 专们为苹果设备制作的设备 BLE ==== buletouch low energy,蓝牙4.0 ...
- java复习-多线程
和线程之间的关系: 进程:进程是程序的一次动态执行过程,他经理了代码加载,执行到执行完毕的一个完整过程,这个过程也是进程本身从产生,发展到最终消亡的过程. 线程:线程是实现并发机制的一种有效手段,进程 ...
- python并行任务之生产消费模式
一. 生产者/消费者模式 概念:生产者产生一块数据,放到buffer中,与此同时,消费者在从buffer中取出并消耗这些数据 理解:像生活中厂家生产出产品,顾客购买消耗这些产品,buffer就是存放商 ...
- js--性能优化(转)
前言 一直在学习javascript,也有看过<犀利开发Jquery内核详解与实践>,对这本书的评价只有两个字犀利,可能是对javascript理解的还不够透彻异或是自己太笨,更多的是自己 ...
- 关于Webapp的注意事项
meta标签 <meta name="viewport" content="width=device-width, initial-scale=1.0, user- ...
- 《JS权威指南学习总结--8.8.3 不完全函数》
内容要点: 本节讨论的是一种函数变换技巧,即把一次完整的函数调用拆成多次函数调用,每次传入的实参都是完整实参的一部分,每个拆分开的函数叫做不完全函数(partial function),每次函数调用叫 ...
- 这两天dede 仿站的收货
首先学会了织梦的安装,其次学会了找织梦默认的模板目录在生成更新主页html和系统设置下的默认末班风格下,然后学会了写一些简单的循环输出代码,发现head2.htm没有找到,更新文件和缓存发现能用了