PHP学习笔记7:错误和异常处理
读《PHP和MySQL Web开发》笔记合集:
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 代码块进行关联。
例子:
try { throw new Exception("A terrible error has occurred", 42); } catch (Exception $e) { echo "Exception ". $e->getCode(). ": ". $e->getMessage()." " in ". $e->getFile(). " on line ". $e->getLine(). " } ?> |
2、Exception类
Exception (PHP 5 >= 5.1.0)
简介Exception是所有异常的基类。
类摘要
Exception { /* 属性 */ protectedstring $message ; protectedint $code ; protectedstring $file ; protectedint $line ; /* 方法 */ public __construct ([ string $message = "" [, int $code = 0 [, Exception$previous = NULL ]]] ) final public string getMessage ( void ) final public Exception getPrevious ( void ) final public int getCode ( void ) final public string getFile ( void ) final public int getLine ( void ) final public array getTrace ( void ) final public string getTraceAsString ( void ) public string __toString ( void ) final private void __clone ( void ) }
属性message异常消息内容 code异常代码 file抛出异常的文件名 line抛出异常在该文件中的行号 Table of Contents
|
用户可以扩展Exception类来创建自己的异常类。
注意,Exception类大多数公有方法都是final,不能重载,我们可以创建自己的Exception子类,但是不能改变这些基本方法的行为。但是注意,__toString()函数可以重载。
例子:
class myException extends Exception { function __toString() { return "
"; } } try { throw new myException("A terrible error has occurred", 42); } catch (myException $m) { echo $m; } ?> |
I/O部分容易出异常,通常,良好的编码习惯要求try代码块的代码量较少,并且在代码块的结束处捕获相关异常。
注意:如果一场没有匹配的catch语句块,PHP将报告一个致命错误。
例子:
// open file for appending try { if (!($fp = @fopen("$DOCUMENT_ROOT/../orders/orders.txt", 'ab'))) 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 " Order written. ";} catch (fileOpenException $foe) { echo " Orders file could not be opened. Please contact our webmaster for help. ";} catch (Exception $e) { echo " Your order could not be processed at this time. Please try again later. ";} |
5、异常与PHP其他错误处理机制
PHP还提供了复杂的错误处理机制,注意,比如异常处理和@错误抑制并不会影响。
例子:
if (!($fp = @fopen("$DOCUMENT_ROOT/../orders/orders.txt", 'ab'))) throw new fileOpenException(); |

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

會話劫持可以通過以下步驟實現:1.獲取會話ID,2.使用會話ID,3.保持會話活躍。在PHP中防範會話劫持的方法包括:1.使用session_regenerate_id()函數重新生成會話ID,2.通過數據庫存儲會話數據,3.確保所有會話數據通過HTTPS傳輸。

PHP8.1中的枚舉功能通過定義命名常量增強了代碼的清晰度和類型安全性。 1)枚舉可以是整數、字符串或對象,提高了代碼可讀性和類型安全性。 2)枚舉基於類,支持面向對象特性,如遍歷和反射。 3)枚舉可用於比較和賦值,確保類型安全。 4)枚舉支持添加方法,實現複雜邏輯。 5)嚴格類型檢查和錯誤處理可避免常見錯誤。 6)枚舉減少魔法值,提升可維護性,但需注意性能優化。

SOLID原則在PHP開發中的應用包括:1.單一職責原則(SRP):每個類只負責一個功能。 2.開閉原則(OCP):通過擴展而非修改實現變化。 3.里氏替換原則(LSP):子類可替換基類而不影響程序正確性。 4.接口隔離原則(ISP):使用細粒度接口避免依賴不使用的方法。 5.依賴倒置原則(DIP):高低層次模塊都依賴於抽象,通過依賴注入實現。

在PHPStorm中如何進行CLI模式的調試?在使用PHPStorm進行開發時,有時我們需要在命令行界面(CLI)模式下調試PHP�...

使用PHP的cURL庫發送JSON數據在PHP開發中,經常需要與外部API進行交互,其中一種常見的方式是使用cURL庫發送POST�...

如何在系統重啟後自動設置unixsocket的權限每次系統重啟後,我們都需要執行以下命令來修改unixsocket的權限:sudo...
