PHP|异常的使用,异常子类化的最佳实践
构造异常的子类。
class XmlException extends Exception
{
private $error;
function __construct(LibXmlError $error) {
$shortfile = basename($error->file);
$msg = "[{$shortfile}, line {$error->line}, col {$error->column} {$error->message}]";
$this->error = $error;
parent::__construct(%msg, $error->code);
}
function getLibXmlError() {
return $this->error
}
}
class FileException extends Exception{}
class ConfException extends Exception{}
代码的逻辑功能部分
// Conf Class
function __construct($file) {
$this->file = $file;
if (!file_exists($file)) {
throw new FileException();
}
$this->xml = simplexml_load_file($file, null, LIBXML_NOERROR);
if (!is_object($this->xml)) {
throw new XmlException();
}
print gettype($this->xml);
$matches = $this->xml->xpath("/conf");
if (!count($matches)) {
throw new ConfException();
}
}
function write() {
if (!is_writeable($this->file)) {
throw new FileException("");
}
file_put_contents($this->file, $this->xml->asXML());
}
如何使用异常的子类?
class Runner
{
static function init() {
try {
} catch (FileException $e) {
// 文件权限或文件不存在
} catch (XmlException $e) {
// XML文件损坏
} catch (ConfException $e) {
// 错误的XML文件格式
} catch (Exception $e) {
// 后备捕捉器,正常情况下不应该被调用。
}
}
}
这样,可以在细化的catch子句中,针对不同的错误使用不同的恢复或失败机制。可以决定停止执行程序、记录错误、并继续执行程序,或显式地再次抛出错误。
try {
// ...
} catch (FileException $e) {
throw $e;
}
参考
深入PHP,面向对象、模式与实践
ThinkingPool
Y1RReE5qazFOVFl5
推荐阅读
Java|序列化异常StreamCorruptedException的解决方法
参考:[链接] {代码...} 关键处理 byte[] str = baos.toByteArray();
niecprea阅读 3.1k
PHP转Go实践:xjson解析神器「开源工具集」
我和劲仔都是PHP转Go,身边越来越多做PHP的朋友也逐渐在用Go进行重构,重构过程中,会发现php的json解析操作(系列化与反序列化)是真的香,弱类型语言的各种隐式类型转换,很大程度的减低了程序的复杂度。
王中阳Go赞 11阅读 2.8k评论 4
Git操作不规范,战友提刀来相见!
年终奖都没了,还要扣我绩效,门都没有,哈哈。这波骚Git操作我也是第一次用,担心闪了腰,所以不仅做了备份,也做了笔记,分享给大家。问题描述小A和我在同时开发一个功能模块,他在优化之前的代码逻辑,我在开...
王中阳Go赞 6阅读 2.9k评论 4
图片防盗链破解 解决图片防盗链问题 反向代理
当客户端(浏览器)向服务器请求内容的时候,会提交一个header,这个header中包含了如:浏览器信息、cookie等内容,那么有一个叫referer的东东,也包含在这里面。
TANKING赞 7阅读 11.8k评论 5
Hyperf 3.0 发布,PHP 新时代
在过去的一年半时间里,Hyperf 2.2 共发布了 35 个小版本,使 Hyperf 达到了一个前所未有的高度,这里也获得了一些不错的数据反馈。
huangzhhui赞 5阅读 1.5k评论 1
初学后端,如何做好表结构设计?
这篇文章介绍了设计数据库表结构应该考虑的4个方面,还有优雅设计的6个原则,举了一个例子分享了我的设计思路,为了提高性能我们也要从多方面考虑缓存问题。
王中阳Go赞 4阅读 894评论 2
Ajax实现搜索联想 搜索关键词提醒 无刷新搜索
通过javascript监听搜索框的内容,调用后端即可。(1)javascript监听搜索框的内容(2)把搜索框的关键词传给后端进行搜索(3)搜索到结果,遍历到页面
TANKING赞 1阅读 4.7k
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。