php錯誤控制運算子@ or die()實例用法詳解

伊谢尔伦
發布: 2023-03-10 22:38:01
原創
7248 人瀏覽過

PHP 支援一個錯誤控制運算子:@。當將其放置在一個 PHP 表達式之前,該表達式可能產生的任何錯誤訊息都會被忽略。

如果用 set_error_handler() 設定了自訂的錯誤處理函數,仍然會被調用,但是此錯誤處理函數可以(並且也應該)調用 error_reporting() ,而該函數在出錯語句前有@ 時將返回0。

如果啟動了 track_errors 特性,則表達式產生的任何錯誤訊息都存放在變數 $php_errormsg 中。此變數在每次出錯時都會被覆蓋,所以如果想用它的話就要儘早檢查。

php忽略錯誤符號@

@是php語言裡的一個忽略錯誤的字符,當將其放置在一個PHP 表達式之前,該表達式可能產生的任何錯誤訊息都被忽略掉。例如:

@include("file.php");
登入後複製

需要注意的是,@ 運算子只對表達式有效。可以這樣理解,如果能從某處得到值,就能在它前面加上 @ 運算子。

例如,可以把它放在變數、函數和 include 呼叫、常數等等之前。

不能把它放在函數或類別的定義之前,也不能用於條件結構例如 if 和 foreach 等。

另外,@通常與or die()一同使用,例如:

(@include("file.php"))
 OR die("Could not find file.php!");
登入後複製

上述語句的意思是,如果包含file.php不成功的話,例如file.php檔案不存在時,則在網頁上列印“Could not find file.php!”,並且立即停止程式的執行。

如果沒有加@這個字符,那麼當include("file.php")返回錯誤時,網頁上打印的是:

Warning: include(file.php) [function.include]: failed to open stream: No such file or directory
Warning: include() [function.include]: Failed opening 'file.php' for inclusion (include_path='.;C:\php5\pear')
登入後複製

有關or die()一些用法

die()函數大家都用得很熟了,不過or die()這樣的寫法,所產生的一些效果你也許還不知道。

先理解下die()。

die定義和用法

die() 函數輸出一則訊息,並退出目前腳本。

語法

die(status)
登入後複製

status 必要。規定在退出腳本之前寫入的訊息或狀態號。狀態號不會寫入輸出。

如果 status 是字串,則函數會在退出前輸出字串。

如果 status 是整數,這個值會被用來當作退出狀態。退出狀態的值在 0 至 254 之間。退出狀態 255 由 PHP 保留,不會被使用。狀態 0 用於成功地終止程式。

附註:如果 PHP 的版本號碼大於等於 4.2.0,那麼在 status 是整數的情況下,不會輸出該參數。

php or die() 語句

經常看到這樣的語句:

$file = fopen($filename, 'r') or die("抱歉,无法打开: $filename");
登入後複製

or在這裡是這樣理解的,因為在PHP中不區分資料型,所以$file可以是int也可以bool,所以這樣的語句不會報錯。但其處理過程可能有些朋友不明白。

其實在大多數的語言中, bool or bool這樣的語句中,如果前一個值為真後一個值就不會再判斷了。這裡也是的,所以如果fopen函數執行正確的話,會回傳一個大於0的int值(這其實就是"真"),後面的語句就不會執行了。

如果fopen函數執行失敗,就會回傳false,那麼就會判斷後面的表達式是否為真了。

結果執行了die()之後,不管回傳什麼,程式都已經停止執行了,並且顯示指定的出錯訊息,也就達到了調試的目的。 就這樣。

通常與錯誤管理一起使用的兩個函數是die()和exit()(嚴格說來,它們是語言構造而不是函數,但是誰在乎這些呢)。

當腳本中呼叫die()和exit()時,將會終止整個腳本。

它們都可用來阻止腳本繼續執行,而使得某些重要的操作(如建立一條資料庫連線)不會發生。你也可以給die()和exit()傳遞一個會在瀏覽器中列印出來的字串。

通常可以看到在OR條件語句中使用die()和exit()。

例如

include('config.inc.php') OR die ('Could not open the file. ');
登入後複製

在包含這樣一行程式碼之後,如果PHP不能包含設定文件,將會執行die()語句,並且會列印could not open the file訊息。

!defined('CURSCRIPT') && define('CURSCRIPT', ");//意思是如果没定义CURSCRIPT常量,则定义CURSCRIPT为空.
登入後複製

在全書和PHP手冊中,你將會看到它的各種變體,因為它是一種處理錯誤的快捷方式(但可能處理過度),而無需使用自定義的錯誤處理程序。

其實die和exit是等價的,用來終止目前腳本,常用在偵錯程式的時候。

以上是php錯誤控制運算子@ or die()實例用法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!