【www.bbyears.com--php入门】
前三篇文章已经把MVC的结构原理都简单的进行了说明和演示。。。当然,不是说一个框架就只有那点东西,一个良好的框架所要求的功能还是要很全面的,例如友好的错误输出,安全处理,防止跨域攻击等
好了,我们一步一步来。这节要说的是错误捕捉,其实这个不难,只要理解2个方法就可以做好错误捕捉的程序。
代码如下
register_shutdown_function(‘functionname’);
set_error_handler(‘functionname’);
第一个方法,是注册一个shutdown的回调函数,当php脚本关闭时调用,当然这个关闭可以是正常的代码执行完毕,也可以是程序抛出致命错误关闭的脚本,那我怎么区分呢?别急,php还有一个方法叫error_get_last() 就像函数名说的那样,获取php最后一个错误信息,这样就可以判断是代码正常执行完毕还是遇到fatal error。。。
第二个方法,是注册一个error的回调函数,当脚本执行遇到错误时调用。
这2个方法最大的区别是,第一个是脚本关闭调用,也就是1次访问,只会调用一次(因为发生致命错误脚本就退出执行了),二第二个方法的触发调用是发生错误的时候,例如访问数组中不存在的index,使用未定义的变量,就是这些warning,notice错误的捕捉。。。如果你想更了解二者的区别,建议访问php官网查看文档说明。。。
这里我就不贴代码了,有兴趣的同学,可以去github那里下回来慢慢看。。。
代码如下
# 定义application路径
define("APPPATH", trim(__DIR__,"/"));
# 获得请求地址
$root = $_SERVER["SCRIPT_NAME"];
$request = $_SERVER["REQUEST_URI"];
$URI = array();
# 获得index.php 后面的地址
$url = trim(str_replace($root, "", $request), "/");
# 如果为空,则是访问根地址
if (empty($url))
{
# 默认控制器和默认方法
$class = "Index";
$func = "welcome";
}
else
{
$URI = explode("/", $url);
# 如果function为空 则默认访问index
if (count($URI) < 2)
{
$class = ucfirst($URI[0]);
$func = "index";
}
else
{
$class = ucfirst($URI[0]);
$func = $URI[1];
}
}
# 把class加载进来
include(APPPATH . "/" . "application/controllers/" . $class . ".php");
#实例化
$obj = new $class;
call_user_func_array(
# 调用内部function
array($obj,$func),
# 传递参数
array_slice($URI, 2)
);
我们来看看最终的效果。。。我们来试试访问不存在的controller里的方法试试
先看看没有错误捕捉的时候:
再来对比下做了错误捕捉的时候