69     return self::load_sys_classs('application');
         在前面我们已经知道了,这个load_sys_classs 静态方法,它加载了PC_CMS/libs/classes/application.class.php
          默认的这个函数这个方法是实例化的,所以我们找到application.class.php,看看他的构造函数吧

构造函数就简单的几行代码,第15行,加载了param.class.php ,后面定义的常量都和param有关,让我们来看看这个类文件
  12          先声明一个私有变量  $route_config
                 下面的构造函数get_magin_quotes_gpc()是检测是否开启这个配置,new_addslashes()函数在global.func.php函数中定义了。

22            三元运算 ,我们打开route.php文件 ,返回了一个二维数组,
                其中下标为 'default'',我们就直接取出 default这个数组了,
               但是为什么phpcms要做这个判断呢,其中SITE_URL在base.php中定义了
               define('SITE_URL', (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : ''));
               本地测试是 localhost ,是不是为了检测自己定义的路由规则呢?暂时不能知道了。
24-37    目前为止都是未执行的,因为 $this->route_config 其实是一个一维数组。
              你print_r($this->route_config)      Array( [m] => content [c] => index [a] => init)
              所以这个构造函数 ,只存在了个变量   $this->route_config

这3个函数就比较简单 返回Array( [m] => content [c] => index [a] => init)里面的数据
  
OK,我们返回application.class.php
                         $this->init();
               
   26行,直接调用了load_controller ,我们直接看load_controller函数
第44行   load_controller($filename='',$m='') 上面的init并没有传参,

而且在构造函数中 我们已经取出了 ROUTR_C,ROUTE_M的值
那么 此时的$filename=index  $m=content
所以 47-63行的代码意思为
      判断 这个模块下的这个文件是否存在,存在就加载,同样判断了有没有以MY_开头的自己的扩展,有的话也加载,并实例化
      如果没有 就exit('Controller does not exist.');
 
回到init函数,此时已经加载了控制器,并实例化了index.php
init() 这个函数,主要注意的就是俩个函数 method_exists()和call_user_func()
不明白的同学,看手册吧,
这个call_user_func(array($controller,ROUTE_A))
直接就执行了 index.php里面的init方法
 
 好了,application.class.php函数就说到这吧,如果一篇写太多,朋友们看的时候会头大。
下一章,我们进去content模块下的index.php控制器的init方法
                                                                          
                                                    To Be Continued

phpcms v9 源码解析(3)pc_base::creat_app()的更多相关文章

  1. phpcms v9 源码解析-1 index.php

    这个是phpcms V9 的入口文件index.php. V9程序的执行绝大多数是从这个文件开始的,但不绝对,在项目下面的api.php和plugin.php是另外的入口文件,这里我们先不做深究. 在 ...

  2. phpcms v9 源码解析(4)content模块下的index.php文件的init()方法解析

    在了解index.php中的init函数的时候,让我们先看看最开始的几行代码 1-5  第二行, defined('IN_PHPCMS') or exit('Nopermission resource ...

  3. phpcms v9 源码解析- 2 base.php

    base.php在上文已经说过,是在PC中重要的一个文件,基本常量.核心类文件的加载都由它来完成. 9行,定义了一个常量 IN_PHPCMS,在系统的入口定义一个常量,在其他文件就判断是否这个常量被定 ...

  4. 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新

    本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...

  5. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  6. 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新

    上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...

  7. 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例

    前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...

  8. jQuery2.x源码解析(缓存篇)

    jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 缓存是jQuery中的又一核心设计,jQuery ...

  9. Spring IoC源码解析——Bean的创建和初始化

    Spring介绍 Spring(http://spring.io/)是一个轻量级的Java 开发框架,同时也是轻量级的IoC和AOP的容器框架,主要是针对JavaBean的生命周期进行管理的轻量级容器 ...

随机推荐

  1. org.apache.solr.common.util.ContentStream.java及其实现类

    org.apache.solr.common.util.ContentStream.java 主要是获取文件,URL,字节数组,字符串等的数据流.主要方法又InputStream getStream( ...

  2. 使用HttpURLConnection和AsyncTask从网络缓存图片

    1.创建NetCacheUtils中创建downloadBitmap(String url)方法 private Bitmap downloadBitmap(String url){ HttpURLC ...

  3. css+div网页设计(三)--与多种技术的混合应用

    本篇博客将介绍css与多种技术的混合应用,javascript可以为我们的页面更加方便的交互,xml使数据存储跟方便,ajax的异步更新可以加快我们网页的载入速度. 1.css与javascript ...

  4. NIS客户端限制用户登录

    公司所有账号信息由一台 NIS Server 统一管理,但是有几台 NIS Client 只允许某几个用户登录.这里通过PAM机制来实现该需求. 1. 需要配置的文件 (/etc/pam.d/目录下) ...

  5. 初识 Asp.Net内置对象之Cookie对象

    Cookie对象 Cookie对象用于保存客户端浏览器请求的服务器页面,也可用于存放非敏感性的用户信息,信息保存的时间可以根据用户的需要经行设置.并非所有的浏览器都支持Cookie,并非数据信息都是以 ...

  6. freeCodeCamp:Where art thou

    写一个 function,它遍历一个对象数组(第一个参数)并返回一个包含相匹配的属性-值对(第二个参数)的所有对象的数组.如果返回的数组中包含 source 对象的属性-值对,那么此对象的每一个属性- ...

  7. 【.NET基础】--委托、事件、线程(1)

    1,委托 是存放方法的指针的清单,也就是装方法的容器 A, 新建winform项目[01委托],项目中添加dg_SayHi.cs 委托类 用于存储方法 namespace _01委托 { //定义委托 ...

  8. 关于使用AIDL出现空指针的解决办法

    使用AIDL进行远程调用的时候出现的空指针异常,解决过程稍微有点小曲折.具体安下 1.先贴异常信息 ERROR/AndroidRuntime(9435): FATAL EXCEPTION: main ...

  9. 在远程系统上开发 SharePoint 应用程序

    适用范围: apps for SharePoint | Office 365 | SharePoint Foundation 2013 | SharePoint Server 2013 使用远程安装的 ...

  10. jQuery AJAX Call for posting data to ASP.Net page ( not Get but POST)

    the following jQuery AJAX call to an ASP.Net page. $.ajax({ async: true, type: "POST", url ...