php关键字有哪些 php搜索功能代码

在上一篇文章中,我们谈到了编译和语法运行时会出现的错误。它们与逻辑无关,程序员编码的时候不应该出现。也就是说,这些错误要尽可能避免到线上环境,不能通过try & # 8230接住接住了。例外情况正好相反。什么是例外?异常是指程序运行中的意外情况,通常是允许发生的,交给...

在上一篇文章中,我们谈到了编译和语法运行时会出现的错误。它们与逻辑无关,程序员编码的时候不应该出现。也就是说,这些错误要尽可能避免到线上环境,不能通过try & # 8230接住接住了。例外情况正好相反。

什么是例外?

异常是指程序运行中的意外情况,通常是允许发生的,交给相应的异常处理程序。当然,你也可以选择忽略异常处理,但就像一个严重的错误,代码会立即停止运行。例外是商业逻辑上的错误,基本都是我们造成的。

或者先通过一个简单的代码来看看异常的抛出和捕获:

function test(){ throw new Exception('This is test Error...');}try { test();} catch (Exception $e) { print_r($e);}

我们通过throw抛出一个异常,然后用try包装这个方法…调用方法时。Catch块捕获引发的异常。这是变态最基本的结构。

从这里我们可以看到,异常基本上都是我们手动抛出的,让外部来处理。在PHP内,大多数异常都是在类中抛出的,这是面向对象错误处理的思想。例如,PDO班:

try { // $pdo = new PDO(); // Fatal error: Uncaught ArgumentCountError: PDO::__construct() expects at least 1 parameter, 0 given $pdo = new PDO('');} catch (PDOException $e) { print_r($e); // invalid data source name}

注意上面一行注释中的代码。没有传递参数是一个错误,它不能被捕获。而且传递的参数是错误的,也就是异常的。在PDO类的源代码中发现参数错误并抛出。交给上层代码,也就是我们这些调用者去捕捉。

接下来,让我们看看自定义异常类和finally语句块的使用。

用户自定义的异常类会继承异常类,可以看作是所有异常的基类。其结构如下:

class Exception{ protected $message = 'Unknown exception'; // 异常信息 private $string; // __toString cache protected $code = 0; // 用户自定义异常代码 protected $file; // 发生异常的文件名 protected $line; // 发生异常的代码行号 private $trace; // backtrace private $previous; // previous exception if nested exception public function __construct($message = null, $code = 0, Exception $previous = null); final private function __clone(); // 不能被***,如果clone异常类将直接产生致命错误 final public function getMessage(); // 返回异常信息 final public function getCode(); // 返回异常代码 final public function getFile(); // 返回发生异常的文件名 final public function getLine(); // 返回发生异常的代码行号 final public function getTrace(); // backtrace() 数组 final public function getPrevious(); // 之前的 exception final public function getTraceAsString(); // 已格成化成字符串的 getTrace() 信息 // Overrideable public function __toString(); // 可输出的字符串}

通过上面的类定义,我们可以看到,我们可以重写构造函数和__toString()方法,也可以使用一些受保护的属性。然后让我们定义一个定制的异常类。

class TestException extends Exception{ protected $code = 200; public function __construct($message = null, $code = 0, Exception $previous = null){ $this->message = 'TestException:' . $message; } public function __toString(){ return 'code: ' . $this->code . '; ' . $this->message; }}function test2(){ throw new TestException('This is test2 Error...');}try { test2();} catch (TestException $e) { echo $e, PHP_EOL; // code: 200; TestException:This is test2 Error...}

还是很好理解的。大多数PHP框架都有组件或功能来定制异常供我们使用。因为现代框架仍然是面向对象的,所以将详细定义异常。不同的组件将为异常提示封装提供不同的异常类。

然后是finally关键字。其实这个没什么好说的。finally的特点是不管有没有异常,都会执行finally关键字定义的代码块里面的内容。

try { test2();} catch (TestException $e) { echo $e, PHP_EOL; } finally { echo 'continue this code ...', PHP_EOL;}// code: 200; TestException:This is test2 Error...// continue this code ...

说了这么多,最后还是结合上面的内容来处理除以0错误的异常抛出吧。文章开头已经说过要避免错误,而异常属于逻辑业务。所以当我们收到一个需要被除的参数时,我们可以先确定这个数是否为0。如果它是0,我们将抛出一个异常供上层调用者处理。如果不是0,我们就让它正常分裂。

function test3($d){ if ($d == 0) { throw new Exception('除数不能为0'); } return 1 / $d;}try { echo test3(2), PHP_EOL;} catch (Exception $e) { echo 'Excepition:' . $e->getMessage(), PHP_EOL;} finally { echo 'finally:继续执行!', PHP_EOL;}// 0.5// finally:继续执行!try { echo test3(0), PHP_EOL;} catch (Exception $e) { echo 'Excepition:' . $e->getMessage(), PHP_EOL;} finally { echo 'finally:继续执行!', PHP_EOL;}// Excepition:除数不能为0// finally:继续执行!

摘要

这就是关于异常使用的全部内容。通过这两篇文章,相信你对PHP的错误和异常有了一些直观的认识。在下面的文章中,我们将一起比较错误和异常,并解释PHP7对错误做了哪些改进。内容依旧精彩,值得期待!!

本文来自挽梦忆笙歌投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/613513.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
() 0
上一篇 06-30
下一篇 06-30

相关推荐

  • 泰国哪些海岛可以潜水

    3值得逛的大皇宫泰国大城王朝遗址黎明寺奈哈恩拉威隆恩岛4芭东沿海三公里新月型的海滩上遍布旅馆超级市场购物中心和各种娱乐设施,吃喝玩乐,样样齐全旅游景点的东西都比较贵,不划算,不推荐买。周边岛屿更有无穷乐趣等你体验,被誉为“全球潜水启蒙课堂”的涛岛,举行疯狂满

    2023-07-29 10:39:01
    316 0
  • 个体户营业执照有哪些行业选择 个体户行业详细介绍

    随着大量新个体经济的出现,除了国家的大力倡导,很多企业设计的商业模式早已针对新个体,但很多人并不知道什么是新个体。实际上,新个体是相对于旧个体而言的。老个体户指的是80年代初的样子。由于长期的规范化发展,现在大部分都注册了自己的营业执照。老个人包括开店、搬运

    2023-07-29 10:09:01
    995 0
  • 高尔夫球杆品牌有哪些(高尔夫球杆的十大品牌介绍)

    最近,许多朋友私下写信给边肖,请边肖为他们推荐一家合适的高尔夫俱乐部。为了给朋友们提供正宗、可靠、性价比高的高尔夫球杆,边肖收集测量了很长时间,最终整理出边肖比较熟悉的五个高尔夫品牌,排名不分先后。快来看,一探究竟。1.卡拉威始于1982年的美国,全球最大的高尔

    2023-07-29 08:34:01
    363 0
  • 小加工项目有哪些(农产品加工项目有哪些)

    年轻人如何创业,是当代人讨论的话题。很多人都希望有一个好的项目。比如想做小规模生产加工的朋友也在问到底哪些项目赚钱?现在到处都有很多项目,但真正能赚钱的很少。7个好的商业机会建议第一,编织工艺制品,利用身边的一些自然资源,组织当地人进行一些工艺品加工项目,

    2023-07-29 08:03:01
    972 0

评论列表

联系我们

在线咨询: QQ交谈

邮件:admin@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信