php中的Exception
如果定制的EXCEPTION搞定了,默认的,就自然不在话下罗。
直接上最曲折的过程。
InvalidIdException.php
<?php namespace Bookstore\Exceptions; use Exception; class InvalidIdException extends Exception { public function __construct($message = null) { $message = $message ?: 'Invalid id provided.'; parent::__construct($message); } } ?>
ExceedeMaxAllowedException.php
<?php namespace Bookstore\Exceptions; use Exception; //从默认的Exception继承 class ExceedeMaxAllowedException extends Exception { //只有构造函数 public function __construct($message = null) { //PHP新语法,如果$message为空,则取默认值 $message = $message ?: 'Exceeded max allowed.'; //调用父类构造函数,传递消息 parent::__construct($message); } } ?>
Unique.php
<?php namespace Bookstore\Utils; use Bookstore\Exceptions\InvalidIdException; use Bookstore\Exceptions\ExceedeMaxAllowedException; require_once __DIR__ . '/InvalidIdException.php'; require_once __DIR__ . '/ExceedeMaxAllowedException.php'; trait Unique { //static静态属性,类似于其它语言的类变量 private static $lastId = 0; //protected保护属性,仅允许继承类访问 protected $id; public function setId(int $id) { if ($id < 0) { //抛出自定义异常 throw new InvalidIdException('Id cannot be negative.'); } //内置函数判断id是否为空,比$id == null要逼格好点 if (empty($id)) { //注意区分$this-和self::$的语法 $this->id = ++self::$lastId; } else { $this->id = $id; if ($id > self::$lastId) { self::$lastId = $id; } } if ($this->id > 50) { //抛出自定义异常 throw new ExceedeMaxAllowedException('Max number of users is 50.'); } } public function getId():int { return $this->id; } //静态方法 public static function getLastId():int { return self::$lastId; } } ?>
test.php
function createBasicCustomer($id) { //捕获异常 try { echo "\nTrying to create a new customer.<br/>"; return new Basic($id, "name", "suname", "email"); } catch (InvalidIdException $e) { echo 'You cannot provide a negative id:' . $e->getMessage() . "<br/>"; } catch (ExceedeMaxAllowedException $e) { echo 'No more customer are allowed:' . $e->getMessage() . "<br/>"; } catch (Exception $e) { echo 'Unkown exception:' . $e->getMessage() . "<br/>"; } finally { echo "End of function.<br/>"; } } $basic = createBasicCustomer(1); $basic = createBasicCustomer(-1); $basic = createBasicCustomer(55);
输出:
Trying to create a new customer. End of function. Trying to create a new customer. You cannot provide a negative id:Id cannot be negative. End of function. Trying to create a new customer. No more customer are allowed:Max number of users is 50. End of function.
php中的Exception的更多相关文章
- .NET Core学习笔记(3)——async/await中的Exception处理
在写了很多年.NET程序之后,年长的猿类在面对异步编程时,仍不时会犯下致命错误,乃至被拖出去杀了祭天.本篇就async/await中的Exception处理进行讨论,为种族的繁衍生息做出贡献……处理a ...
- Oracle存储过程中异常Exception的捕捉和处理
Oracle存储过程中异常的捕捉和处理 CREATE OR REPLACE Procedure Proc_error_process ( v_IN in Varchar2, v_OUT Out Var ...
- Thinking in java中关于Exception的一道面试题.
今天看到Thinking in Java中一个关于Exception的例子:最后看到有一篇总结的比较好的文章, 这里拿来记录下, 文章地址是:http://blog.csdn.net/salerzha ...
- java 中的Exception RuntimeException 区别
在java的异常类体系中: 1.Error和RuntimeException是非检查型异常,其他的都是检查型异常; 2.所有方法都可以在不声明throws的情况下抛出RuntimeException及 ...
- Python中异常(Exception)的总结
Python中的异常处理 异常处理的语句结构 try: <statements> #运行try语句块,并试图捕获异常 except <name1>: <statement ...
- Oracle中的EXCEPTION
Oracle系统预定义的异常 比如:SELF_IS_NULL.VALUE_ERROR.ZERO_DIVIDE等Oracle中自带的异常类型 使用方法: DECLARE V_Result ); BEGI ...
- java中的exception stack有时候不输出的原因(转)
原文 https://www.cnblogs.com/lemonlotus/p/5650687.html 有时候,我们在看java错误日志时,只看到一个java.lang.NullPointerEx ...
- Abp中自定义Exception的HttpStatusCode
Abp中在新版本中,抛出的异常(比如:UserFriendlyException)通过AjaxResponse封装后返回的时候,HttpStatusCode默认指定成了500. 对于一些默认封装好的处 ...
- java中的exception stack有时候不输出的原因
有时候,我们在看java错误日志时,只看到一个java.lang.NullPointerException,却没有看到错误的栈,原因是启动时候有一项参数可以选择配置:OmitStackTraceInF ...
- GUI学习中错误Exception in thread "main" java.lang.NullPointerException
运行时出现错误:Exception in thread "main" java.lang.NullPointerException 该问题多半是由于用到的某个对象只进行了声明,而没 ...
随机推荐
- java web开发入门三(Hibernate)基于intellig idea
Hibernate 1.开发流程 项目配置好后的结构: 1.下载源码: 版本:hibernate-distribution-3.6.0.Final 2.引入hibernate需要的开发包(3.6版本) ...
- Maven 教程(11)— Maven远程仓库的各种配置
原文地址:https://blog.csdn.net/liupeifeng3514/article/details/79545408 1.远程仓库的配置 在平时的开发中,我们往往不会使用默认的中央仓库 ...
- mknod命令的使用
1.mknod命令 在Linux系统下,mknod命令可用于系统下字符设备文件和块设备文件的创建. (1)命令语法 mknod(选项)(参数) (2)常用选项说明 -Z:设置安全的上下文. -m:设置 ...
- 解决wireshark抓包校验和和分片显示异常
问题描述: 在使用wireshark抓取报文时,发现从10.81.2.92发过来的报文绝大部分标记为异常报文(开启IPv4和TCP checksum) 分析如下报文,发现http报文(即tcp pay ...
- [转帖]美团在Redis上踩过的一些坑-3.redis内存占用飙升
美团在Redis上踩过的一些坑-3.redis内存占用飙升 博客分类: 运维 redis redismonitor内存突增client listinfo 转载请注明出处哈:http://car ...
- Spring JPA事务
目录 1. 概述 促进阅读: 2. 配置不带XML的事务 3. 使用XML配置事务 4. @Transactional 注解 5. 潜在的陷阱 5.1. 事务和代理 5.2. 更改隔离级别 5.3. ...
- C++指针与数组、函数、动态内存分配
C++指针 指针是用来存储地址的变量. 对于二维数组来说: a:代表的是首行地址: *a:代表的是首元素地址: **a:首元素: a+1:第二行地址: *a+2:首先*a是首元素地址,在首元素地址上+ ...
- Python-06-函数
一.函数的定义 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 1. 定义方式 def 函数名(参数1,参数2 ...
- Go语言系列教程(十二)之函数完结篇
Hello,各位小伙伴大家好,我是小栈君.上一期我们讲到了关于函数的有参.无参.匿名函数,本期我们分享一下关于go语言函数类型.匿名函数和闭包的概念和实战.闲话不多说,立马开始分享. 在Go语言中,函 ...
- Tomcat 配置文件解析工具 Digester
Digester 是一个依据 xml 配置文件动态构建 Java 对象树的工具,基于 SAX 解析器进行封装,它为 SAX 事件的处理提供了更高级和友好的接口,让开发更专注于要执行的处理,隐藏了 XM ...