/** * 执行 */ public static function run() { // 设定错误和异常处理 set_error_handler('IndexPHP::_error'); set_exception_handler('IndexPHP::_exception'); register_shutdown_function('IndexPHP::_shutdown'); // 定义常量 defined('PATH_APP') or define('PATH_APP', './app/'); defined('PATH_APP_CTRL') or define('PATH_APP_CTRL', PATH_APP . 'ctrl/'); defined('PATH_APP_VIEW') or define('PATH_APP_VIEW', PATH_APP . 'view/'); defined('PATH_APP_LIB') or define('PATH_APP_LIB', PATH_APP . 'lib/'); defined('PATH_APP_LOG') or define('PATH_APP_LOG', PATH_APP . 'log/'); defined('FILE_APP_CONF') or define('FILE_APP_CONF', PATH_APP . '/conf.php'); defined('FILE_APP_COMM') or define('FILE_APP_COMM', PATH_APP . '/common.php'); define('IS_POST', Param::server('REQUEST_METHOD') == 'POST' ? true : false); define('HTTP_HOST', Param::server('HTTP_HOST')); // 初始化框架 self::_init(); // 导入配置 Config::set(self::import(FILE_APP_CONF)); Config::get('ENABLE_SESSION') && session_start(); // 路由处理 $ca = explode('/', trim(Param::server('PATH_INFO', Config::get('DEFAULT_CTRL_ACTION')), '/')); define('CTRL_NAME', strtolower(Param::get(Config::get('PARAM_CTRL', 'c'), !empty($ca[0]) ? $ca[0] : 'index'))); define('ACTION_NAME', strtolower(Param::get(Config::get('PARAM_ACTION', 'a'), !empty($ca[1]) ? $ca[1] : 'index'))); // URL参数按顺序绑定变量 preg_replace_callback('/(\\w+)\\/([^\\/]+)/', function ($match) { $_GET[$match[1]] = strip_tags($match[2]); }, trim(Param::server('PATH_INFO'), '/')); // 导入控制器文件 if (!self::import(PATH_APP_CTRL . CTRL_NAME . Config::get('FILE_EXTENSION_CTRL', '.class.php'))) { throw new Exception('没有控制器:' . CTRL_NAME); } // 控制器、方法名称变换处理 $c = self::camelize(CTRL_NAME) . Config::get('POSTFIX_CTRL', 'Controller'); $a = lcfirst(self::camelize(ACTION_NAME)) . Config::get('POSTFIX_ACTION', ''); // 控制器类判断是否存在 if (class_exists($c)) { // 导入公共函数库 self::import(FILE_APP_COMM); // 自动加载外部库 spl_autoload_register('self::_autoload'); // 调用控制器方法 call_user_func(array(new $c(), $a)); } }
private function __construct() { $this->userAgent = Param::server('HTTP_USER_AGENT', Param::TYPE_STRING); $this->initBroswer(); }