读《PHP和MySQL Web开发》笔记合集:
http://my.oschina.net/bluefly/blog/478580
1、异常处理概念
1)异常处理在 try 代码块被调用执行
try
{
//code goes here
}
2)PHP中,异常必须手动抛出
throw new Exception(‘message‘,code);
这是一个语言结构,而不是一个函数。
可以在throw子句中传递任何其他对象。
3)在try代码块之后,必须至少给出一个catch代码块。
catch ( typehint exception)
{
// handle exception
}
可以将多个catch 代码块与一个try 代码块进行关联。
例子:
<?php try { throw new Exception("A terrible error has occurred", 42); } catch (Exception $e) { echo "Exception ". $e->getCode(). ": ". $e->getMessage()."<br />". " in ". $e->getFile(). " on line ". $e->getLine(). "<br />"; } ?> |
2、Exception类
Exception(PHP 5 >= 5.1.0) 简介Exception是所有异常的基类。 类摘要Exception { /* 属性 */ protectedstring protectedint protectedstring protectedint /* 方法 */ public final public string final public Exception final public int final public string final public int final public array final public string public string final private void } 属性message 异常消息内容 code 异常代码 file 抛出异常的文件名 line 抛出异常在该文件中的行号 Table of Contents
|
3、用户自定义异常
用户可以扩展Exception类来创建自己的异常类。
注意,Exception类大多数公有方法都是final,不能重载,我们可以创建自己的Exception子类,但是不能改变这些基本方法的行为。但是注意,__toString()函数可以重载。
例子:
<?php class myException extends Exception { function __toString() { return "<table border=\"1\"> <tr> <td><strong>Exception ".$this->getCode()." </strong>: ".$this->getMessage()."<br />"." in ".$this->getFile()." on line ".$this->getLine()." </td> </tr> </table><br />"; } } try { throw new myException("A terrible error has occurred", 42); } catch (myException $m) { echo $m; } ?> |
4、I/O部分与建议
I/O部分容易出异常,通常,良好的编码习惯要求try代码块的代码量较少,并且在代码块的结束处捕获相关异常。
注意:如果一场没有匹配的catch语句块,PHP将报告一个致命错误。
例子:
// open file for appending try { if (!($fp = throw new fileOpenException(); if (!flock($fp, LOCK_EX)) throw new fileLockException(); if (!fwrite($fp, $outputstring, strlen($outputstring))) throw new fileWriteException(); flock($fp, LOCK_UN); fclose($fp); echo "<p>Order written.</p>"; } catch (fileOpenException $foe) { echo "<p><strong>Orders file could not be opened. Please contact our webmaster for help.</strong></p>"; } catch (Exception $e) { echo "<p><strong>Your order could not be processed at this time. Please try again later.</strong></p>"; } |
5、异常与PHP其他错误处理机制
PHP还提供了复杂的错误处理机制,注意,比如异常处理和@错误抑制并不会影响。
例子:
if (!($fp = throw new fileOpenException(); |
如果该函数调用失败,PHP将发出一个浸膏,根据php.ini的设置进行错误报告或记录。