## 错误控制运算符
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
- 函数
- 用户自定义函数
- 函数的参数
- 返回值
- 可变函数
- 内部 (内置)函数
- 匿名函数
- 类与对象
- 简介
- 基本概念
- 属性
- 类的自动加载
- 构造函数
- 访问控制(可见性)