PHP的异常原理与实例说明 Fatal error: Uncaught exception
PHP的异常原理
PHP5+ 开始提供了一种新的面向对象的错误处理方法,用于在指定的错误(异常)情况发生时改变脚本的正常流程。这种情况称为异常。
一般使用方法:
<?php
function zhoz_com_test() {
throw new Exception("异常啦");
}
try {
zhoz_com_test();
} catch (Exception $e) {
echo $e->getMessage();
}
throw new Exception('XXX') : 抛出一个异常
try : 使用异常的函数应该位于 "try" 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。
Catch:代码块会捕获异常,并创建一个包含异常信息的对象
自定义异常类:
class myException extends Exception {
public function errorMessage() {
$errorMsg = 'zhoz.com Error on line '.$this->getLine().' in '.$this->getFile()
.': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';
return $errorMsg;
}
}
try {
throw new myException($email);
}catch (myException $e){
echo $e->errorMessage();
}
myException类是一个自定义的异常类,必须继承Exception
Exception是一个PHP自带的内置的异常类,默认情况下会使用PHP默认的内置异常类,但是我们可以通过自定义的方式,自定义成满足自己需求的异常类。
使用自定义异常类的时候,throw new myException 抛出异常也需要抛出自定义的异常类类名
catch的时候也需要捕获自定义的异常类
如果抛出了异常而不捕获处理的话,就会发生PHP代码报错,如下:
[sql]
Fatal error: Uncaught exception 'myException' in D:AppServwwwcctv runkindex.php:12 Stack trace: #0 {main}
thrown in D:AppServwwwcctv runkindex.php on line 12
PHP默认异常类详细:
class exception
{
protected $message = 'Unknow exception'; //自定义的异常信息
protected $code = 0; //定义的异常代码
protected $file; //发生异常的PHP程序名
protected $line; //发生异常的PHP行号
//用于传递用户自定义异常信息和用户自定义异常代码的构造函数
function __construct($message=null,$code=0);
final function getMessage();
final function getCode();
final function getFile();
final function getLine();
final function getTrace(); //以数组形式返回异常传递的路线
final function getTraceAsString(); //返回格式化成字符串的getTrace函数信息
function __toString(); //可重载,用于返回可输出的字符串
}
可以看到PHP默认异常类中有很多自定义变量和方法
$e->getMessage 一般是获取错误信息
$e->getCode() 一般是获取错误码
$e->getFile() 获取错误的文件信息
$e->getLine() 获取错误行数
$e->getTrace() 异常经过的文件路径
__toString() 一般可以重载,用于返回可输出的字符串
PHP异常类的作用:
捕获异常,一般可以在MYSQL链接不上,或者业务逻辑错误的时候,抛出异常,在代码最顶端接收。
异常分析处理。可以在出异常的时候,捕获到异常的错误信息,写入日志。
可以返回友好化的提示信息,例如WEB端可以返回页面形式,也可以在AJAX端返回JSON数据格式。
原则:如果异常抛出了,就必须捕获它,否则会PHP报错。
建议继续学习:
- 是返回错误码,还是抛出异常?说说我的选择 (阅读:5878)
- Perl 异常处理之 autodie 和 Try::Tiny (阅读:2619)
- PHP程序员也要学会使用“异常” (阅读:2569)
- 异常的代价 (阅读:2445)
- 僵尸对象或 RAII (阅读:2417)
- 深入理解PHP之异常机制 (阅读:2387)
- PHP错误处理及异常处理 (阅读:2461)
- 我们什么时候应该使用异常? (阅读:2349)
- Java处理InterruptedException异常小结 (阅读:1737)
- Swift错误和异常处理 (阅读:813)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:zhoz <zhozweb@yahoo.com.cn> 来源: Everyday NetLog
- 标签: 异常
- 发布时间:2013-02-27 23:15:37
- [66] Go Reflect 性能
- [66] Oracle MTS模式下 进程地址与会话信
- [65] 如何拿下简短的域名
- [59] android 开发入门
- [59] IOS安全–浅谈关于IOS加固的几种方法
- [59] 图书馆的世界纪录
- [58] 【社会化设计】自我(self)部分――欢迎区
- [53] 视觉调整-设计师 vs. 逻辑
- [47] 界面设计速成
- [47] 读书笔记-壹百度:百度十年千倍的29条法则