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传递什么控制器和方法---就实例化该控制器的更多相关文章

  1. 基于TP框架的ThinkCMF,控制器display方法源码分析

    昨天在写代码的时候,看见写了无数次的模版渲染方法:$this->display(),突然很想弄清楚它是如何实现的. 今天不忙,就分析了一下. class TestController exten ...

  2. ThinkPHP 3.2.2跨控制器调用方法

     所谓跨控制器调用,指的是在一个控制器中调用另一个控制器的某个方法.在ThinkPHP中有三种方式实现跨控制器调用: 直接实例化: A()函数实例化; R()函数实例化. (1)直接实例化  直接实例 ...

  3. YII2中使用RBAC对模块,控制器,方法的权限控制以及规则的使用

    在使用YII2中自带的RBAC时,需要先配置config/web.php: return [ // ... 'components' => [ 'authManager' => [ 'cl ...

  4. ThinkPHP跨控制器调用方法

    跨控制器调用方法 1. 先造对象,再调用里面的方法 $sc=new \Home\Controller\IndexController();  用绝对路径找echo $sc->ShuChu(); ...

  5. 创建控制器的方法、控制器加载view过程、控制器view的生命周期、多控制器组合

    在介绍四大对象的那篇博客中,可以基本了解到程序启动的过程: main-->UIApplicationMain-->创建UIApplication的实例和app代理AppDelegate的实 ...

  6. 第一零三天上课 PHP TP框架下控制器的方法分离

    (1)配置信息 修改配置文件->Config.php (配置后,原先的控制方法无效) 'ACTION_BIND_CLASS' => TRUE, // 控制器方法分离 (2)在Control ...

  7. 关于ThinkPHP控制器的方法失效的问题

    今天发现控制器的方法失效了,用了排除法,找了长时间的原因,都没有找出来,后来干脆把home模块中的控制器和视图文件都复制到bbs模块下,竟然也不行. 这说明了控制器和视图没有问题,一定是模块的配置有问 ...

  8. Python中的__new__()方法与实例化

    @Python中的__new__()方法与实例化   __new__()是在新式类中新出现的方法,它作用在构造方法建造实例之前,可以这么理解,在Python 中 存在于类里面的构造方法__init__ ...

  9. spring中获取dao或对象中方法的实例化对象

    spring中获取dao的中方法的实例化对象: //获取应用上下文对象 ApplicationContext ctx = new ClassPathXmlApplicationContext(&quo ...

随机推荐

  1. CSS 选择器之基本选择器 属性选择器 伪类选择器

    CSS 选择器 常见的选择器列表图 CSS选择器笔记 基本选择器 通配符选择器(*) 元素选择器(E) 类选择器(.className)    所有浏览器都支持类选择器,但多类选择器(.classNa ...

  2. hadoop报错 Message missing required fields: callId, status

    今天群里有人问hadoop的问题,说百度上怎么都查不到,还好hadoop之前玩过一阵,也遇上过这个问题 hadoop-2.2.0  hbase 0.95-hadoop2的 ,hdfs正常 ,启动 hb ...

  3. BOS物流管理系统-第八天

    BOS物流管理系统-第八天-权限系统设计-Shiro 回顾: 两大块业务:基础设置模块,业务派单模块. 两天:权限控制. 拦截器大的范围的.纯登录级别(认证级别)大颗粒的权限控制的一种技术. Shir ...

  4. Android之ListView异步加载图片且仅显示可见子项中的图片

    折腾了好多天,遇到 N 多让人崩溃无语的问题,不过今天终于有些收获了,这是实验的第一版,有些混乱,下一步进行改造细分,先把代码记录在这儿吧. 网上查了很多资料,发现都千篇一律,抄来抄去,很多细节和完整 ...

  5. Java IO 节点流 ByteArrayInput/OutputStream

    Java IO 节点流 ByteArrayInput/OutputStream @author ixenos ByteArrayInputStream 包含一个内部缓冲区(字节数组byte[]),该缓 ...

  6. hdu_5354_Bipartite Graph(cdq分治+并查集判二分图)

    题目链接:hdu_5354_Bipartite Graph 题意: 给你一个由无向边连接的图,问对于每一个点来说,如果删除这个点,剩下的点能不能构成一个二分图. 题解: 如果每次排除一个点然后去DFS ...

  7. jquery 固定导航

    网页代码: <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head> & ...

  8. 1、Web应用程序中的安全向量 -- XSS跨站脚本攻击

    XSS攻击(跨站脚本攻击)的概念: 用户通过网站页面的输入框植入自己的脚本代码,来获取额外的信息. XSS的实现方式: (1)通过用户将恶意的脚本命令输入到网站中,而这些网站又能够接收"不干 ...

  9. CodeForces 701C They Are Everywhere 尺取法

    简单的尺取法…… 先找到右边界 然后在已经有了所有字母后减小左边界…… 不断优化最短区间就好了~ #include<stdio.h> #include<string.h> #d ...

  10. Visual Studio 2010/2013 UTF8编码调试时显示中文

    VisualStudio 2010 SP1环境 1.设置string默认编码为utf8,只需要在文件头部加入以下代码 #pragma execution_character_set("utf ...