## 錯誤控制運算符
PHP支持一個錯誤控制運算符:@。當將其放置在一個PHP表達式之前,該表達式可能產生的任何錯誤信息都被忽略掉。
如果用 [set\_error\_handler()](http://php.net/manual/zh/function.set-error-handler.php) 設定了自定義的錯誤處理函數,仍然會被調用,但是此錯誤處理函數可以(并且也應該)調用 [error\_reporting()](http://php.net/manual/zh/function.error-reporting.php),而該函數在出錯語句前有 @ 時將返回 0。
如果激活了 [**track\_errors**](http://php.net/manual/zh/errorfunc.configuration.php#ini.track-errors) 特性,表達式所產生的任何錯誤信息都被存放在變量 [$php\_errormsg](http://php.net/manual/zh/reserved.variables.phperrormsg.php) 中。此變量在每次出錯時都會被覆蓋,所以如果想用它的話就要盡早檢查。
```
<?php
/*?Intentional?file?error?*/
$my_file?=?@file?('non_existent_file')?or
????die?("Failed?opening?file:?error?was?'$php_errormsg'");
//?this?works?for?any?expression,?not?just?functions:
$value?=?@$cache[$key];
//?will?not?issue?a?notice?if?the?index?$key?doesn't?exist.
?>
```
> **Note**: @ 運算符只對[表達式](http://php.net/manual/zh/language.expressions.php)有效。對新手來說一個簡單的規則就是:如果能從某處得到值,就能在它前面加上 @ 運算符。例如,可以把它放在變量,函數和 [include](http://php.net/manual/zh/function.include.php) 調用,常量,等等之前。不能把它放在函數或類的定義之前,也不能用于條件結構例如 *if* 和 [foreach](http://php.net/manual/zh/control-structures.foreach.php) 等。
參見 [error\_reporting()](http://php.net/manual/zh/function.error-reporting.php) 及手冊中[錯誤處理及日志函數](http://php.net/manual/zh/ref.errorfunc.php)的有關章節。
**Warning**
目前的“@”錯誤控制運算符前綴甚至使導致腳本終止的嚴重錯誤的錯誤報告也失效。這意味著如果在某個不存在或者敲錯了字母的函數調用前用了“@”來抑制錯誤信息,那腳本會沒有任何跡象顯示原因而死在那里。
- 序言
- 簡介
- PHP是什么?
- PHP能做什么?
- 基本語法
- 類型
- boolean(布爾型)
- integer(整型)
- float(浮點型)
- string(字符串)
- array(數組)
- object(對象)
- callable(可調用)
- resource(資源)
- NULL(無類型)
- 偽類型
- 類型轉換的判別
- 變量
- 基礎
- 預定義變量
- 變量范圍
- 可變變量
- 來自PHP之外的變量
- 常量
- 語法
- 魔術常量
- 表達式
- 運算符
- 運算符優先級
- 算術運算符
- 賦值運算符
- 位運算符
- 比較運算符
- 錯誤控制運算符
- 執行運算符
- 遞增/遞減運算符
- 邏輯運算符
- 字符串運算符
- 數組運算符
- 類型運算符
- 流程控制
- if
- else
- elseif/else if
- 流程控制的替代語法
- while
- do-whille
- for
- foreach
- break
- continue
- switch
- declare
- return
- require
- include
- require_once
- include_once
- goto
- 函數
- 用戶自定義函數
- 函數的參數
- 返回值
- 可變函數
- 內部 (內置)函數
- 匿名函數
- 類與對象
- 簡介
- 基本概念
- 屬性
- 類的自動加載
- 構造函數
- 訪問控制(可見性)