php教程-php面向?qū)ο髤R總課件_第1頁(yè)
php教程-php面向?qū)ο髤R總課件_第2頁(yè)
php教程-php面向?qū)ο髤R總課件_第3頁(yè)
php教程-php面向?qū)ο髤R總課件_第4頁(yè)
php教程-php面向?qū)ο髤R總課件_第5頁(yè)
已閱讀5頁(yè),還剩44頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、PHP中的錯(cuò)誤信息 php.ini中配置錯(cuò)誤消息 php中錯(cuò)誤消息處理 php代碼中調(diào)整錯(cuò)誤級(jí)別 自定義錯(cuò)誤處理 PHP5中的SPL模塊 什么是SPL spl.php中的異常處理類 spl.php中的其它異常類 PHP5異常捕獲 異常實(shí)例 拋出異常 在代碼中捕獲異常 在代碼中捕獲異常(2)一個(gè)catch塊處理多種異常 多個(gè)catch塊處理異常 異常處理塊嵌套 異常向外拋出 PHP中的錯(cuò)誤信息 PHP5自定義異常 自定義異常 異常處理實(shí)例 驗(yàn)證實(shí)例 驗(yàn)證實(shí)例代碼PHP5自定義異常 PHP中的錯(cuò)誤信息 php.ini中配置錯(cuò)誤消息 在PHP4中,沒有異常 Exception這個(gè)概念,只有 錯(cuò)誤Er

2、ror。我們可以通過修改php.ini 文件來配置用戶端輸出的錯(cuò)誤信息。 在php.ini 中,一個(gè)分號(hào) ; 表示注釋。 Php.ini 將能夠顯示的錯(cuò)誤類型分為如下種類PHP中的錯(cuò)誤信息 php.ini中配置錯(cuò)誤消息 php教程_php面向?qū)ο髤R總課件在php.ini 中error_reporting 控制輸出到用戶端的消息種類。 以下幾種是php.ini 中推薦的幾種配置。 error_reporting = E_ALL 表示輸出所有的信息。 error_reporting = E_ALL & E_NOTICE 表示輸出所有的錯(cuò)誤,除了提示。 error_reporting = E_COM

3、PILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR 表示輸出所有的 ERROR 信息。 在php.ini 中error_reporting 控制輸出在php.ini 中,display_errors可以設(shè)置是否將以上設(shè)置的錯(cuò)誤信息輸出到用戶端。 display_errors = On 輸出到用戶端(調(diào)試代碼時(shí)候,打開這項(xiàng)更方便) display_errors = OFF 消息將不會(huì)輸出到用戶端(最終發(fā)布給用戶時(shí)記得改成off) 在php.ini 中,display_errors可以設(shè)置是php中錯(cuò)誤消息處理 在php中,對(duì)于錯(cuò)誤處理非常的寬松

4、。php系統(tǒng)會(huì)盡量讓程序運(yùn)行下去,除非遇到致命錯(cuò)誤。 php中錯(cuò)誤消息處理 在php中,對(duì)于錯(cuò)誤處理非常的寬松。p再次提示:如果不想顯示錯(cuò)誤信息給用戶看到,設(shè)置php.ini中 display_errors = OFF 再次提示:如果不想顯示錯(cuò)誤信息給用戶看到,設(shè)置php.iniphp代碼中調(diào)整錯(cuò)誤級(jí)別 除了在php.ini文件中可以調(diào)整錯(cuò)誤消息的顯示級(jí)別外,在php代碼中也可以自定義消息顯示的級(jí)別。 PHP提供了一個(gè)方便的調(diào)整函數(shù)。 int error_reporting ( int level ) 使用這個(gè)函數(shù)可以定義當(dāng)前php頁(yè)面中錯(cuò)誤消息的顯示級(jí)別。 參數(shù)level使用了二進(jìn)制掩碼組合

5、的方式。 php代碼中調(diào)整錯(cuò)誤級(jí)別 除了在php.ini文件中可以調(diào)整php教程_php面向?qū)ο髤R總課件自定義錯(cuò)誤處理 在php中,可以自定義對(duì)錯(cuò)誤處理的方式。 首先要自定義一個(gè)錯(cuò)誤處理函數(shù),然后使用 set_error_handler()函數(shù)向系統(tǒng)聲明錯(cuò)誤處理函數(shù)。代碼中產(chǎn)生的錯(cuò)誤就會(huì)使用這個(gè)錯(cuò)誤處理函數(shù)了。 使用trigger_error()函數(shù),可以觸發(fā)一個(gè)error。 例如trigger_error(age you input must = 0, E_USER_ERROR),觸發(fā)自己的錯(cuò)誤信息。 自定義錯(cuò)誤處理 在php中,可以自定義對(duì)錯(cuò)誤處理的方式。 ?phpfunction myE

6、rrorHandler($errno, $errstr, $errfile, $errline) switch ($errno) case E_USER_ERROR: echo My ERROR $errno $errstrn; echo Fatal error in line $errline of file $errfile; echo , PHP . PHP_VERSION . ( . PHP_OS . )n; echo Aborting.n; exit(1); break; case E_USER_WARNING: echo My WARNING $errno $errstrn; br

7、eak; case E_USER_NOTICE: echo My NOTICE $errno $errstrn; break; default: echo Unknown error type: $errno $errstrn; break; set_error_handler(myErrorHandler); /定義錯(cuò)誤處理函數(shù).$age = -100; /假設(shè)出現(xiàn)了負(fù)數(shù)的年齡,這明顯是錯(cuò)誤的。if ($age = 0”, E_USER_ERROR); /觸發(fā)錯(cuò)誤;?message = $message; $this-code = $code; /錯(cuò)誤代碼默認(rèn)是0; $this-file =

8、 _FILE_; / 文件名 $this-line = _LINE_; / 行號(hào) $this-trace = debug_backtrace(); /返回一個(gè)包含多個(gè)元素 $this-string = StringFormat($this); /格式化字符串 構(gòu)造函數(shù)如下: 其中還包含了_clone() 方法和對(duì)應(yīng)這些屬性的geter方法。 其中還包含了_clone() 方法和對(duì)應(yīng)這些屬性的getespl.php中的其它異常類 在SPL中還定義了其它的異常類,以對(duì)應(yīng)不同的異常類型。這些異常類都是Exception類的子類。 在Exception類有兩個(gè)直接子類 LogicException 和

9、 RuntimeException,分別表示邏輯異常和執(zhí)行異常。 spl.php中的其它異常類 在SPL中還定義了其它的異常類php教程_php面向?qū)ο髤R總課件LogicException又衍生出其它的邏輯異常子類。 LogicException又衍生出其它的邏輯異常子類。 class LogicException extends Exception 程序中的邏輯錯(cuò)誤的異常類,它是Exception類的直接子類。 class BadFunctionCallException extends LogicException 當(dāng)不合法的函數(shù)被調(diào)用產(chǎn)生的異常類。 class BadMethodCall

10、Exception extends BadFunctionCallException 當(dāng)不合法的方法被調(diào)用產(chǎn)生的異常類。 class DomainException extends LogicException 表示一個(gè)值不在有效范圍內(nèi)的異常。 class InvalidArgumentException extends LogicException 表示傳遞了無(wú)效的參數(shù)產(chǎn)生的異常。 class LengthException extends LogicException 表示一個(gè)參數(shù)超過了許可的長(zhǎng)度的異常。 class OutOfRangeException extends LogicExc

11、eption 表示請(qǐng)求檢索超越了數(shù)組等容器最大長(zhǎng)度的異常。 class LogicException extends ERuntimeException衍生出其它運(yùn)行異常子類RuntimeException衍生出其它運(yùn)行異常子類class RuntimeException extends Exception 只有在執(zhí)行時(shí)才能發(fā)現(xiàn)的異常,是Exception的直接子類。 class OutOfBoundsException extends RuntimeException 表示請(qǐng)求檢索超越了數(shù)組等容器最大長(zhǎng)度的異常。 class OverflowException extends Runtime

12、Exception 表示算法/緩存溢出異常 class RangeException extends RuntimeException 運(yùn)行期間的范圍異常 class UnderflowException extends RuntimeException 運(yùn)行期間的算法/緩存的向下溢出異常。 class RuntimeException extends在spl.php 中所有Exception子類的代碼都僅僅是類的定義和簡(jiǎn)單的父類繼承。 而方法內(nèi)部沒有任何擴(kuò)展、重寫。 如:LogicException的定義。 在spl.php 中所有Exception子類的代碼都僅僅是php教程_php面向?qū)?/p>

13、象匯總課件又如:LengthException的定義部分 又如:LengthException的定義部分 PHP5異常捕獲 異常實(shí)例 可以通過實(shí)例化 Exception類或者它的子類來創(chuàng)建一個(gè)異常實(shí)例。 有了這個(gè)異常實(shí)例,就可以通過Exception中定義好的getter方法,獲得相應(yīng)的屬性值。 PHP5異常捕獲 異常實(shí)例 ? $exception = new Exception(Here some Exception); echo .; echo $exception; echo .; echo getCode()= .$exception-getCode()./; echo getFile

14、()= .$exception-getFile()./; echo getLine()= .$exception-getLine()./; echo getMessage()= .$exception-getMessage()./; echo getTrace()= .$exception-getTrace()./; echo getTraceAsString()= .$exception-getTraceAsString()./; ? ? $exception = new RuntimeException(Here some RuntimeException); echo .; echo $

15、exception; echo .; echo getCode()= .$exception-getCode()./; echo getFile()= .$exception-getFile()./; echo getLine()= .$exception-getLine()./; echo getMessage()= .$exception-getMessage()./; echo getTrace()= .$exception-getTrace()./; echo getTraceAsString()= .$exception-getTraceAsString()./; ? 拋出異常 在P

16、HP5中使用 throw 關(guān)鍵字,向外拋出一個(gè)異常實(shí)例。 如果這個(gè)異常如果未經(jīng)處理,將會(huì)導(dǎo)致系統(tǒng)產(chǎn)生致命錯(cuò)誤,而使代碼終止。 拋出異常 根據(jù)需求,我們可以向系統(tǒng)拋出不同的異常。 在php中數(shù)組越界是不會(huì)產(chǎn)生知名錯(cuò)誤的,而下面的代碼拋出一個(gè)數(shù)組越界的異常,導(dǎo)致代碼運(yùn)行終止。 count($arr) $exception = new OutOfBoundsException(array $arr OutOfBounds Exception); throw $exception;?根據(jù)需求,我們可以向系統(tǒng)拋出不同的異常。 在代碼中捕獲異??梢酝ㄟ^PHP5支持的try catch 語(yǔ)句捕獲并處理異常。

17、 語(yǔ)法如下: try /可能引發(fā)異常的語(yǔ)句 catch(異常類型 異常實(shí)例) /異常處理語(yǔ)句 在 try塊中,放置可能產(chǎn)生異常的代碼片段。在catch塊中放置對(duì)這個(gè)異常處理的代碼。 如: try throw new Exception(“new Exception”); / 引發(fā)拋出異常 catch(Exception $ex) echo $ex; /打印這個(gè)異常對(duì)象 在代碼中捕獲異??梢酝ㄟ^PHP5支持的try catch 語(yǔ)如果try塊未產(chǎn)生任何異常,try塊將運(yùn)行完畢,catch塊內(nèi)容不會(huì)被執(zhí)行。 try塊如果拋出了異常,會(huì)立刻在catch中尋找可以捕獲改異常的catch塊,并運(yùn)行相應(yīng)的

18、catch塊代碼,然后跳出try catch塊繼續(xù)運(yùn)行。 而try塊中拋出異常后面的代碼將被跳過。 如果try塊中的異常不能被catch塊捕獲,將拋向系統(tǒng)引發(fā)系統(tǒng)致命錯(cuò)誤,代碼終止運(yùn)行。 在catch中,異常類型后面跟的是一個(gè)變量,這個(gè)變量將指向內(nèi)存中被捕獲的異常實(shí)例。 如果try塊未產(chǎn)生任何異常,try塊將運(yùn)行完畢,catch塊未使用異常處理時(shí),我們從一個(gè)數(shù)組中取值,如果數(shù)組越界,PHP只會(huì)報(bào)出一個(gè)錯(cuò)誤Notice,我們無(wú)法對(duì)這些錯(cuò)誤做任何的處理。 在下面例子中,取值超過了數(shù)組邊界,于是引發(fā)了自定義異常。在catch塊做了處理。 未使用異常處理時(shí),我們從一個(gè)數(shù)組中取值,如果數(shù)組越界,PHP

19、sizeof($arr) throw new OutOfBoundsException(數(shù)組 $arr 取值越界異常.); $a = $arr$b; /如果沒有異常就取出值 catch (OutOfBoundsException $ex) if($debug) echo 在第.$ex-getLine().行,產(chǎn)生異常,; echo $ex-getMessage().; echo 數(shù)組長(zhǎng)度是 .sizeof($arr).不能取到位置$b. ; $a = 0; /如果產(chǎn)生異常將0賦值給$a echo $a = $a ; ? 大家注意到catch(Exception $ex) 中 Exception

20、 這個(gè)類名,下面解釋它的具體意義。 在catch塊中能捕獲在catch()塊中聲明的捕獲的異常和其子類類型實(shí)例。 下面的例子,拋出一個(gè)OutOfBoundsException的異常,而catch語(yǔ)句捕獲DomainException 異常。這個(gè)異常不會(huì)被catch語(yǔ)句捕獲,而直接拋向了系統(tǒng),引發(fā)了一個(gè)致命錯(cuò)誤,程序被終止了。 大家注意到catch(Exception $ex) 中 Ex sizeof($arr) throw new OutOfBoundsException(數(shù)組 $arr 取值越界異常.); $a = $arr$b; /如果沒有異常就取出值 catch (DomainExcep

21、tion $ex) if($debug) echo 在第.$ex-getLine().行,產(chǎn)生異常,; echo $ex-getMessage().; echo 數(shù)組長(zhǎng)度是 .sizeof($arr).不能取到位置$b. ; $a = 0; /如果產(chǎn)生異常將0賦值給$a echo $a = $a ; ? 在catch塊中能捕獲catch()塊里聲明的異常的子類異常。 一個(gè)catch塊處理多種異常 在catch塊中能捕獲在catch()塊中聲明的捕獲的異常和其子類類型實(shí)例。 在catch塊中能捕獲catch()塊里聲明的異常的子類異常 sizeof($arr) throw new OutOfBo

22、undsException(數(shù)組 $arr 取值越界異常.); $a = $arr$b; /如果沒有異常就取出值 if(true) throw new RuntimeException(這里產(chǎn)生一個(gè)Runtime異常); /如果9行無(wú)異常,這里拋出異常. catch (RuntimeException $ex) if($debug) echo 在第.$ex-getLine().行,產(chǎn)生異常,; echo $ex-getMessage().; $a = 0; /如果產(chǎn)生異常將0賦值給$a echo $a = $a ; ? 多個(gè)catch塊處理異常 一個(gè)try塊可以跟隨多個(gè)catch塊,每個(gè)cat

23、ch塊捕獲不同的異常。 下面例子的第7行,使用rand函數(shù)產(chǎn)生了一個(gè)0或1的隨機(jī)數(shù),反復(fù)運(yùn)行這個(gè)代碼會(huì)隨機(jī)拋出邏輯異常或執(zhí)行異常。 在try塊后,有兩個(gè)catch塊,分別捕獲并處理對(duì)應(yīng)的異常,注意查看不同。 多個(gè)catch塊處理異常 getLine().行,產(chǎn)生邏輯異常,; echo $ex-getMessage().; catch(RuntimeException $ex) if($debug) echo 在第.$ex-getLine().行,產(chǎn)生運(yùn)行異常,; echo $ex-getMessage().; ? 異常處理塊嵌套異常處理塊只能處理自己catch塊中的異常,已經(jīng)處理過的異常將不會(huì)向外拋出。 異常處理塊嵌套異常處理塊只能處理自己catch塊中的異常,已異常向外拋出 異常向外拋出 代碼中一旦throw一個(gè)異常實(shí)例,系統(tǒng)會(huì)尋找能夠處理這個(gè)異常的tr

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論