游乐游手机版
首页/网络安全/文章详情

PHP框架开发入门教程第九篇:一步步编写简单Framework

时间:2026-08-20 16:24
前面已经讲过 PHP 框架中的异常处理机制,比较推荐的做法是自定义异常类:当 debug 开启时,直接显示详细的调试信息;当 debug 关闭时,则将异常内容写入日志,并跳转或显示统一错误页。这节课就重点介绍一下这个异常处理机制的实现思路。 现在先定义一个异常基类,在 Toper 中它叫做 Tp_E

前面已经讲过 PHP 框架中的异常处理机制,比较推荐的做法是自定义异常类:当 debug 开启时,直接显示详细的调试信息;当 debug 关闭时,则将异常内容写入日志,并跳转或显示统一错误页。这节课就重点介绍一下这个异常处理机制的实现思路。

怎么一步步编写简单的PHP的Framework(九)

现在先定义一个异常基类,在 Toper 中它叫做 Tp_Exception,这里我直接命名为 BaseException。首先,BaseException.php 至少要有一个基本的类结构:

class BaseException extends Exception {
public function printStack() {

}
public function __toString() {

}
}

首先,这个类必须继承自 Exception。接下来,需要实现 __toString 方法,以及一个自定义的 printStack 方法。之所以要实现 __toString,是因为我们经常会通过 throw new Exception() 这样的方式抛出异常,在这种情况下,系统会直接调用 __toString() 方法。而 printStack 方法的作用,则是用来输出异常堆栈信息,方便调试和排查问题。

这里说一下整体思路:无论是 __toString 还是 printStack,都需要先判断当前是否处于 debug 模式。如果开启了 debug,那么处理就很简单,直接输出异常信息即可;如果关闭了 debug,那么就不能把详细错误直接展示给用户,而是应该先把异常信息记录到日志文件中,再显示错误页面。

大家可能已经注意到了,不管是 __toString 还是 printStack,在 debug 关闭的情况下,都需要把调试信息写入日志,因此我们可以先封装一个辅助函数:

protected function _toLogFile($str) {
file_put_contents(APP_PATH . '/log',$str,FILE_APPEND);
}
这里为了简化演示,我直接使用了 file_put_contents 来写日志。这个 PHP 函数非常实用,写文件、追加内容都很方便,用来做简单的异常日志记录非常合适。

由于到目前为止还没有讲到 URL 重定向、请求转发等内容,所以这里暂时直接输出错误页,因此还需要再写一个辅助函数:

protected function _outputErrorPage() {
header("content-type:text/html");
echo file_get_contents(APP_PATH . '/error.html');
}
因为这里强调的是代码实现尽量简单,所以错误页和日志文件的路径都直接写死在项目根目录中。如果你有兴趣,也完全可以把这些路径配置到配置文件里,这样会更灵活,实际开发中也更常见。

既然辅助函数已经准备好了,那么另外两个核心函数的实现就比较直接了:

public function printStack() {
if(true === C('debug')) {
echo parent::getTraceAsString();
} else {
$this->_toLogFile(parent::getTraceAsString());
$this->_outputErrorPage();
}
}
public function __toString() {
if(true !== C('debug')) {
$this->_toLogFile(parent::getTraceAsString());
$this->_outputErrorPage();
exit();
}
return parent::__toString();
}

当然,由于 __toString 必须返回字符串,所以一旦通过 throw 抛出异常,异常内容通常会被直接输出到页面上。为了避免在 debug 关闭时仍然显示异常信息,这里就只能在当前位置直接 exit。就我目前来说,还没有想到更理想的处理方式,因此实际使用时,更建议通过 printStack 来统一处理异常输出。

我写这个异常类主要是起到抛砖引玉的作用,帮助大家理解 PHP 异常处理、错误日志记录以及错误页展示的基本思路。如果你有更好的实现方式,也欢迎一起交流讨论,互相学习、共同提升。

当然,现在这里只是定义了一个异常处理的基类,后续还会继续编写更多具体的异常子类。在真正的项目开发或 PHP Framework 使用过程中,通常也是通过这些子类来完成实际的异常处理。

代码点此下载

来源:https://apiv1.oschina.net/oschinapi/blog/detail?id=92104
上一篇如何使用telnet命令关闭Tomcat服务 下一篇服务器故障排查:内核参数配置不当导致故障的排查方法
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
DDoS攻击的三大主要形式:原理、特征与防御重点
网络安全 · 2026-08-31

DDoS攻击的三大主要形式:原理、特征与防御重点

DDoS攻击主要分为基于流量(Volume)、基于应用层(Application)和基于协议(Protocol)三种形式。流量型攻击通过海量数据淹没带宽;应用层攻击利用Web漏洞耗尽服务器资源;协议层攻击则利用TCP握手缺陷导致系统挂起。了解这些原理是制定针对性防御策略的基础。

如何有效预防和缓解DDoS攻击:5大核心策略详解
网络安全 · 2026-08-31

如何有效预防和缓解DDoS攻击:5大核心策略详解

面对DDoS攻击,单纯增加带宽已非长久之计。本文详解5大核心防护策略:优化网络硬件配置、建立DNS冗余机制、部署透明缓解技术、引入负载平衡器及专用Anti-DDoS模块。通过合理组合这些技术手段,可有效抵御SYN泛洪、Slowloris等常见攻击,保障业务连续性与网站可用性。

DDoS防护四大误区:CDN、防火墙与黑名单的局限性解析
网络安全 · 2026-08-31

DDoS防护四大误区:CDN、防火墙与黑名单的局限性解析

许多企业误以为CDN、防火墙或黑名单能完全抵御DDoS攻击。本文深入解析四大常见误区:CDN仅提供部分缓解、静态黑名单易失效、防火墙算力有限且可能成为目标、阈值警报仅具滞后性。了解这些局限性,有助于构建更立体的防御体系,避免在攻击发生时措手不及。

常见DDoS攻击类型详解:原理、特征与防御策略
网络安全 · 2026-08-31

常见DDoS攻击类型详解:原理、特征与防御策略

本文详细解析四种常见DDoS攻击类型:SYN Flood利用TCP三次握手缺陷耗尽资源;UDP Flood通过海量数据包造成带宽拥塞;ICMP Flood利用Ping请求消耗系统算力;应用层Flood针对Web脚本进行高频请求。了解其原理是制定有效防御策略的基础。

如何有效抵御DDOS攻击:4种核心防护方案解析
网络安全 · 2026-08-31

如何有效抵御DDOS攻击:4种核心防护方案解析

面对DDOS攻击,企业需构建多层防护体系。本文详解四大核心策略:利用反向路由器查询进行流量清洗,通过GCDN智能分配节点隐藏源站IP,部署负载均衡硬件分担压力,以及接入高防机房抵御数百G恶意流量。掌握这些技术,可最大程度保障业务连续性。