<?php
header("Content-type:application/json;charset=utf-8");
error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED ^ E_STRICT ^ E_WARNING);
ini_set("display_errors", "On");
define("ROOT_DIR", dirname(__FILE__));
define("DS", DIRECTORY_SEPARATOR);
define("CORE_DIR", ROOT_DIR . DS . 'framework');
require_once ROOT_DIR . DS . 'stdafx.php';
require_once CORE_DIR . DS . 'Core.php';
try {
$core = Core::getInstance()->boot(ROOT_DIR . '/config/core.php');//->run();
$core->registerPlugin(new LoginPlugin());
$core->run();
} catch (Exception $ex) {
echo json_encode(array('NOT FOUND'));
print $ex;
die;
}
1、Http header设置Content-type
2、ini_set(“display_errors”, “On”)开启报错机制,error_reporting() 设置 PHP 的报错级别
值 | 常量 | 描述 |
---|---|---|
1 | E_ERROR | 致命的运行错误。错误无法恢复,暂停执行脚本。 |
2 | E_WARNING | 运行时警告(非致命性错误)。非致命的运行错误,脚本执行不会停止。 |
4 | E_PARSE | 编译时解析错误。解析错误只由分析器产生。 |
8 | E_NOTICE | 运行时提醒(这些经常是你代码中的bug引起的,也可能是有意的行为造成的。 |
16 | E_CORE_ERROR | PHP启动时初始化过程中的致命错误。 |
32 | E_CORE_WARNING | PHP启动时初始化过程中的警告(非致命性错)。 |
64 | E_COMPILE_ERROR | 编译时致命性错。这就像由Zend脚本引擎生成了一个E_ERROR。 |
128 | E_COMPILE_WARNING | 编译时警告(非致命性错)。这就像由Zend脚本引擎生成了一个E_WARNING警告。 |
256 | E_USER_ERROR | 用户自定义的错误消息。这就像由使用PHP函数trigger_error(程序员设置E_ERROR) |
512 | E_USER_WARNING | 用户自定义的警告消息。这就像由使用PHP函数trigger_error(程序员设定的一个E_WARNING警告) |
1024 | E_USER_NOTICE | 用户自定义的提醒消息。这就像一个由使用PHP函数trigger_error(程序员一个E_NOTICE集) |
2048 | E_STRICT | 编码标准化警告。允许PHP建议如何修改代码以确保最佳的互操作性向前兼容性。 |
4096 | E_RECOVERABLE_ERROR | 开捕致命错误。这就像一个E_ERROR,但可以通过用户定义的处理捕获 |
8191 | E_ALL | 所有的错误和警告(不包括 E_STRICT) (E_STRICT will be part of E_ALL as of PHP 6.0) |
3、获取当前文件绝对路径 dirname(FILE)
4、引入文件stdafx.php和Core.php
stdafx.php主要作用是定义常量和引入相关php文件:
<?php
date_default_timezone_set("Asia/Chongqing");
define('CONFIG_DIR', ROOT_DIR . DS . 'config');
require_once CONFIG_DIR . '/db.php';
require_once CONFIG_DIR . '/mc.php';
...
require_once CONFIG_DIR . '/define.php';
Core.php是整个框架的核心:
- include与require : 最大区别是当文件不是必需的,且应用程序在文件未找到时应该继续运行时可以使用include
- _autoload与 spl_autoload_register:在php5之后可以在index.php中通过编写__autoload函数来让php自动加载类,也可以使用spl_autoload_register来注册我们自己的autoload函数来处理加载尚未定义的类
- isset与empty:
- isset:检测变量是否设置 ,若变量不存在则返回 FALSE 若变量存在且其值为NULL,也返回 FALSE
若变量存在且值不为NULL,则返回 TURE ,同时检查多个变量时,每个单项都符合上一条要求时才返回 TRUE,否则结果为 FALSE. - empty:检查一个变量是否为空,若变量存在且其值为”“、0、”0”、NULL、、FALSE、array()、var $var; 以及没有任何属性的对象,则返回 TURE
- isset:检测变量是否设置 ,若变量不存在则返回 FALSE 若变量存在且其值为NULL,也返回 FALSE
5、Core::getInstance()单例模式实例化Core对象,初始化autoload加载机制(自定义loadClass),boot加载控制器、模型、视图,插件、库,路由规则等配置
6、注册LoginPlugin登录插件通过依赖注入的方式进行访问的身份验证检查
7、run根据路由规则分发机制以及path_info信息,解析出控制器类,实例化并调用IndexAction对请求进行处理