首页 > 代码库 > ThinkPHP框架 _ 学习8

ThinkPHP框架 _ 学习8

  

【跨控制器调用】

一个控制器在执行的时候,可以实例化另外一个控制,并通过对象访问其指定方法。

跨控制器调用可以节省我们代码的工作量,不然的话,同一个函数就要不同的控制器里面重新写一遍 ,这是件多么麻烦的事情

例如:10个页面,都要现实指定的数据信息显示。比如我们网站的“会员数目有200万”,这个信息需要在10个页面都显示

这个数据是通过UserController.class.php 里边额方法number()给查询出来的

现在商品列表页面也需要显示200万会员数目信息,那么原则上就是GoodsController.class.php里边也有一个方法number()专门获得会员数目的

如果许多页面都需要显示200万的会员数据,则许多控制器都需要有number()方法。

如果大家都能实例化User控制器,并调用它的number()方法,则会节省许多重复劳动。

 技术分享

*  先在控制器里面创建一个需要调用的控制器的对象,然后用该对象来调用函数的方法

也可以利用tp框架封装的一些函数的,来跨控制器的调用,这样比较方便快捷

详情请看下面的   封装函数的介绍   A(),  R()。

 

 

系统函数库:ThinkPHP/Common/functions.php

 技术分享

A(“[模块/]控制器标志”) 实例化控制器对象

R([模块/]控制器标志/操作方法)  实例化对象同时调用指定方法

 

 

 

【框架执行流程分析】

 

tp框架内部代码集成:面向过程和OOP面向对象

 

 

 

1. index.php  入口文件

2. ThinkPHP/ThinkPHP.php

 

    php5.3版本以后

 

    设置常量有两种方式:

 

    const name = value;  作用域根据当前命名空间决定

 

    define()  作用域全局

 

    ① 定义了许多常量

 

    ② 引入核心文件Think.class.php

 

    Think::start();

 

 

 

3. ThinkPHP/Library/Think/Think.class.php

 

    static function start()

 

    ① 引入系统核心文件

 

    ② 引入配置文件

 

    ③ 如果是生成模式,还会生成common~runtime.php文件

 

    ④ 如果是第一次使用系统,还会自动创建对应的应用目录(Home  ,Common,  Runtime)

 

    App::run();

 

 

 

4. ThinkPHP/library/Think/App.class.php

 

    static function run()

 

      App::init();

 

        路由解析

 

        //路由解析,把模块、控制器、方法赋予常量

 

        //MODULE_NAME = 模块名称

 

        //CONTROLLER_NAME  控制器

 

        //ACTION_NAME  方法

 

      App::exec()

 

        实例化控制器对象

 

        利用“反射”实现对象调用方法

 

 

利用反射实现对象调用方法:

技术分享

 

ThinkPHP框架 _ 学习8