【phpcms-v9】phpcms-v9应用程序创建类phpcms/libs/classes/application.class.php文件分析.
- <?php
- /**
- * application.class.php PHPCMS应用程序创建类
- *
- * @copyright (C) 2005-2010 PHPCMS
- * @license http://www.phpcms.cn/license/
- * @lastmodify 2010-6-7
- */
- class application {
- /**
- * 构造函数
- */
- public function __construct() {
- $param = pc_base::load_sys_class('param');//构造函数中主要用来对传递过来的数据进行过滤处理
- define('ROUTE_M', $param->route_m());//模块名
- define('ROUTE_C', $param->route_c());//控制器
- define('ROUTE_A', $param->route_a());//方法名
- $this->init();
- }
- /**
- * 调用件事
- */
- private function init() {
- $controller = $this->load_controller();//加载控制器
- if (method_exists($controller, ROUTE_A)) {//判断控制器中是否存在某方法
- if (preg_match('/^[_]/i', ROUTE_A)) {//以_开头的方法都是protected类型的方法
- exit('You are visiting the action is to protect the private action');
- } else {
- call_user_func(array($controller, ROUTE_A));//执行控制器中的方法
- }
- } else {
- exit('Action does not exist.');//提示 方法不存在
- }
- }
- /**
- * 加载控制器
- * @param string $filename
- * @param string $m
- * @return obj
- */
- private function load_controller($filename = '', $m = '') {
- if (emptyempty($filename)) $filename = ROUTE_C;//控制器名
- if (emptyempty($m)) $m = ROUTE_M;//模块名
- //控制器文件
- $filepath = PC_PATH.'modules'.DIRECTORY_SEPARATOR.$m.DIRECTORY_SEPARATOR.$filename.'.php';
- //如果控制器文件存在
- if (file_exists($filepath)) {
- $classname = $filename;//控制器类名
- include $filepath;//引入控制器文件
- if ($mypath = pc_base::my_path($filepath)) {//如果存在 MY_*控制器文件
- $classname = 'MY_'.$filename;//主要用于二次开发的控制器文件
- include $mypath;//引入MY_*.php控制器文件
- }
- if(class_exists($classname)){//如果控制器类名存在的话
- return new $classname;//实例化控制器类对象
- }else{
- exit('Controller does not exist.');//提示 控制器不存在
- } //开源代码Vevb.com
- } else {
- exit('Controller does not exist.');//提示 控制器不存在
- }
- }
- }
- ?>
新闻热点
疑难解答