资讯专栏INFORMATION COLUMN

PHP|异常的使用,异常子类化的最佳实践

李涛 / 2022人阅读

摘要:构造异常的子类。代码的逻辑功能部分如何使用异常的子类文件权限或文件不存在文件损坏错误的文件格式后备捕捉器,正常情况下不应该被调用。这样,可以在细化的子句中,针对不同的错误使用不同的恢复或失败机制。参考深入,面向对象模式与实践

构造异常的子类。
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,面向对象、模式与实践

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21655.html

相关文章

  • PHP核心技术与最佳实践(第一章 面向对象思想核心概念)

    摘要:现代的面向对象的思想不强调为真实世界建模变得更加理性化一些,把目标放在解耦上。各种语言中的多态多态确切的含义是同一类的对象收到相同消息时,会得到不同的结果。小结本章主要介绍面向对象思想的程序的组成元素类和对象。 第一章 面向对象思想的核心概念 showImg(https://segmentfault.com/img/bVNfjM?w=673&h=334); showImg(https:...

    dreamGong 评论0 收藏0
  • 浅析Java异常处理机制

    摘要:关于异常处理的文章已有相当的篇幅,本文简单总结了的异常处理机制,并结合代码分析了一些异常处理的最佳实践,对异常的性能开销进行了简单分析。是程序正常运行中,可以预料的意外情况,应该被捕获并进行相应处理。 关于异常处理的文章已有相当的篇幅,本文简单总结了Java的异常处理机制,并结合代码分析了一些异常处理的最佳实践,对异常的性能开销进行了简单分析。博客另一篇文章《[译]Java异常处理的最...

    NSFish 评论0 收藏0
  • 猫头鹰深夜翻译:JAVA中异常处理最佳实践

    摘要:无需检查的异常也是的子类。从低层抛出的需检查异常强制要求调用方捕获或是抛出该异常。当前执行的线程将会停止并报告该异常。单元测试允许我在使用中查看异常,并且作为一个可以被执行的文档来使用。不要捕获最高层异常继承的异常同样是的子类。 前言 异常处理的问题之一是知道何时以及如何去使用它。我会讨论一些异常处理的最佳实践,也会总结最近在异常处理上的一些争论。 作为程序员,我们想要写高质量的能够解...

    W_BinaryTree 评论0 收藏0
  • Java 异常处理 9 个最佳实践

    摘要:异常处理的个最佳实践原文地址翻译出处在中,异常处理是个很麻烦的事情。使用描述性消息抛出异常这个最佳实践背后的想法与前两个类似。当你以错误的格式提供时,它将被类的构造函数抛出。类提供了特殊的构造函数方法,它接受一个作为参数。 Java 异常处理的 9 个最佳实践 原文地址:https://dzone.com/articles/9-...翻译出处:https://www.oschina.n...

    sihai 评论0 收藏0
  • Java异常处理最佳实践

    摘要:然而,我更倾向于使用来单元测试来文档化异常。单元测试允许我在使用中查看异常,并且作为一个可以被执行的文档来使用。通过为异常编写单元测试,你不仅可以记录异常如何触发,还可以使你的代码在经过这些测试后更加健壮。 本文是关于 Exception 处理的一篇不错的文章,从 Java Exception 的概念介绍起,依次讲解了 Exception 的类型(Checked/Unchecked),...

    mayaohua 评论0 收藏0

发表评论

0条评论

李涛

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<