PHP異常、錯誤處理機制筆記
本文介紹PHP的異常,錯誤以及如何遮蔽錯誤。
參考:
php異常、錯誤處理機制、PHP錯誤提示的關閉方法詳解
首先要明白異常跟錯誤是不一樣的,異常是出現正常邏輯之外的情況,而錯誤是指執行時出錯了,比如,使用了一個未定義的變數等,異常需要丟擲(throw)才能被捕捉到,而錯誤會導致程式執行終止
異常
使用try{}catch{}捕獲異常
<?php
try {
throw new Exception("A terrible",13);
}
catch(Exception $e){
echo $e->getCode()."<br>";
echo $e->getMessage()."<br>";
echo '錯誤在'.$e->getFile().'行'.$e->getLine()."列<br>";
var_dump( $e->getTrace() );
echo "<br>".$e->getTraceAsString();
echo "<br>".$e->__toString()."<br>";//echo "<br>".$e;
}
?>
可以直接使用set_exception_handler
函式捕獲throw
丟擲的異常
<?php
//設定一個使用者的函式(error)來處理指令碼中出現的錯誤。
//set_exception_handler()會自動捕捉錯誤
set_exception_handler('exception1');
throw new Exception("kkkkkkkkkkkkkkkk");
function exception1(Exception $exception){
echo $exception->getMessage();
}
?>
錯誤
使用者自定義的錯誤處理
<?php
set_error_handler('errorHandler');
trigger_error("這裡描述錯誤",E_USER_ERROR);
//E_USER_ERROR:該error 所特定的錯誤型別,預設是E_USER_NOTICE
function errorHandler($errno,$errstr){
//使用者的函式需要接受兩個引數:錯誤碼和描述錯誤的 string
if($errno==E_USER_ERROR){
echo "錯誤為:",$errstr.'<br>';
}
}
?>
使用函式捕獲系統不提示的錯誤
前幾個都不知如何使用,如果使用這個可以在變數未定義就呼叫時提示錯誤
<?php
set_error_handler('errorHandler2');
echo $ccc;
function errorHandler2($errno,$errstr){
//使用者的函式需要接受兩個引數:錯誤碼和描述錯誤的 string
if($errno==E_NOTICE){//這裡應該是如果出現(預設)非使用者錯誤
echo "錯誤為:",$errstr;
}
}
echo "<br>這裡正常執行";
?>
遮蔽php錯誤
錯誤的種類
- 注意(Notices)這些都是比較小而且不嚴重的錯誤,比如去訪問一個未被定義的變數。通常,這類的錯誤是不提示給使用者的,但有時這些錯誤會影響到執行的結果。
- ** 警告(Warnings)**這就是稍微嚴重一些的錯誤了,比如想要包含include()一個本身不存在的檔案。這樣的錯誤資訊會提示給使用者,但不會導致程式終止執行。
- 致命錯誤(Fatal errors)這些就是嚴重的錯誤,比如你想要初始化一個根本不存在的類的物件,或呼叫一個不存在的函式,這些錯誤會導致程式停止執行,PHP也會把這些錯誤展現給使用者。
遮蔽錯誤的方法
方法一:在有可能出錯的函式前加@
,然後or die("")
如: @mysql_connect(...) or die("Database Connect Error")
再例如:
<?php
$file=fopen("filename.php", 'r');
//返回Warning: fopen(filename.php): failed to open stream: No such file or directory in E:\xampp\htdocs\php\error-1.php on line 7
@$file=fopen("filename.php", 'r') or die('沒有找到該檔案');
//返回"沒有找到該檔案"
?>
方法二:編輯php.ini ,查詢"display_errors =" ,將“=”後面的值改為"off。
可以百度有詳解,在測試過程中最好不要修改
方法三:在php指令碼前加error_reporting(0),遮蔽所有錯誤提示。其中,error_reporting 配置錯誤資訊回報的等級。
總結,異常和錯誤處理現在還不會應用。
遮蔽錯誤十分有用且第一種方法最常用。
持續學習中,不定期更新
相關文章
- goang 錯誤&異常處理機制Go
- .NET----錯誤和異常處理機制
- php錯誤與異常處理方法PHP
- Oracle異常錯誤處理Oracle
- ORACLE 異常錯誤處理Oracle
- 異常處理機制
- Python異常處理機制、除錯、測試Python除錯
- 異常錯誤資訊處理
- PHP 核心知識點(一)異常和錯誤處理PHP
- Python錯誤處理和異常處理(二)Python
- Java異常處理機制Java
- SpringBoot錯誤處理機制以及自定義異常響應原理解析Spring Boot
- 異常處理機制(二)之異常處理與捕獲
- rust學習十、異常處理(錯誤處理)Rust
- C++錯誤和異常處理C++
- java異常處理筆記Java筆記
- Java 的異常處理機制Java
- 8.異常處理機制
- 08.異常處理機制
- SpringMVC異常的處理機制SpringMVC
- java異常的處理機制Java
- C++異常處理機制C++
- PHP錯誤和異常PHP
- Java 中的異常處理機制Java
- PHP 錯誤處理PHP
- php錯誤處理PHP
- C++ 異常處理機制詳解:輕鬆掌握異常處理技巧C++
- PHP 核心 - 異常處理PHP
- 前端錯誤收集以及統一異常處理前端
- Python之錯誤異常和檔案處理Python
- 在vue使用異常處理做錯誤提示Vue
- Go語言錯誤處理機制Go
- Golang 學習筆記八 錯誤異常Golang筆記
- 說說你對異常處理和錯誤處理的理解
- C#中的異常處理機制C#
- Go 的錯誤處理策略 筆記Go筆記
- swoft 學習筆記之異常處理筆記
- 筆記:異常處理之report與render筆記
- thinkphp原始碼分析(四)—錯誤及異常處理篇PHP原始碼