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 该问题多半是由于用到的某个对象只进行了声明,而没 ...
随机推荐
- Spring配置中<bean>的id和name属性
在BeanFactory的配置中,<bean>是我们最常见的配置项,它有两个最常见的属性,即id和name,最近研究了一下,发现这两个属性还挺好玩的,特整理出来和大家一起分享. 1.id属 ...
- 1-7docke的网络模式
1.Bridge模式 bridge 模式是 docker 的默认⽹络模式,不写 –net 参数,就是 bridge 模式.比如使⽤ docker run - p 时 工作模式从网上找了一个,如下 例子 ...
- C# POST方式提交数据,接收方式,使用Request.Form[""]或Request[""]来获取
/// <summary> /// 调用接口 /// </summary> /// <param name="url"></param&g ...
- Sitecore 9 您应该了解的所有新功能和变化
信不信由你,当我谈论Sitecore时,我感到非常兴奋.这是一个充满潜力和机遇的伟大平台 如果你能想象一个刚刚进行过一次双重训练的人,一个特大号的星巴克,并且刚刚在创纪录的时间内完成了中国忍者勇士的障 ...
- 算法:线性查找(重点isFlag标志)
package com.atguigu; public class Main { public static void main(String[] args) { String[] arr=new S ...
- Linux指定运行级别,帮助指令(man,help)
运行级别说明: 0:关机 1:单用户[找回丢失密码] 2:多用户状态[无网络服务] 3:多用户状态[有网络服务] 4:保留级别 5:图形界面 6:系统重启 一.指定运行级别 1.修改默认运行级别 vi ...
- 11. Scala数据结构(下)-集合操作
11.1 集合元素的映射-map映射操作 11.1.1 看一个实际需求 要求:请将List(3,5,8)中所有的元素都*2,将其结果放到一个新的集合中返回,即返回一个新的List(6,10,16),请 ...
- 8. Scala面向对象编程(高级部分)
8.1 静态属性和静态方法 8.1.1 静态属性-提出问题 有一群小孩在玩堆雪人,不时有新的小孩加入,请问如何知道现在共有多少人在玩?请使用面向对象的思想,编写程序解决 8.1.2 基本介绍 -Sca ...
- MQTTv5.0 ---AUTH – 认证交换
AUTH报文被从客户端发送给服务端,或从服务端发送给客户端,作为扩展认证交换的一部分,比如质询/ 响应认证.如果CONNECT报文不包含相同的认证方法,则客户端或服务端发送AUTH报文将造成协议错 误 ...
- -Shell 教程 Bash 脚本 基础语法 MD
目录 目录 Shell 简介 Shell 脚本 Shell 环境 第一个shell脚本 Shell 变量 定义变量 使用变量 只读变量 删除变量 Shell 字符串 单引号 双引号 字符串基本操作 S ...