mirror of
https://github.com/php/doc-zh.git
synced 2026-03-23 22:52:08 +01:00
79 lines
2.9 KiB
XML
79 lines
2.9 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- EN-Revision: 16934048f79c6e117cd16a23c09c1b2ea502e284 Maintainer: mowangjuanzi Status: ready -->
|
|
<sect1 xml:id="language.operators.errorcontrol">
|
|
<title>错误控制运算符</title>
|
|
<titleabbrev>错误控制</titleabbrev>
|
|
<simpara>
|
|
PHP 支持一个错误控制运算符:<literal>@</literal>。当将其放置在一个 PHP
|
|
表达式之前,该表达式可能产生的任何错误诊断都被抑制。
|
|
</simpara>
|
|
<para>
|
|
如果用 <function>set_error_handler</function>
|
|
设定了自定义的错误处理函数,即使诊断信息被抑制,也仍然会被调用。
|
|
</para>
|
|
|
|
<warning>
|
|
<para>
|
|
PHP 8.0.0 之前,如果错误被 <literal>@</literal> 运算符抑制,则在自定义错误处理程序中调用 <function>error_reporting</function> 将始终返回
|
|
<literal>0</literal>。PHP 8.0.0 起,返回(按位)表达式的值:<literal>E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR | E_RECOVERABLE_ERROR | E_PARSE</literal>。
|
|
</para>
|
|
</warning>
|
|
|
|
<simpara>
|
|
<function>error_get_last</function> 返回数组中的 <literal>"message"</literal> 元素储存了表达式产生的任意错误信息。
|
|
此函数的返回结果会随着每次错误的发生而相应变化,所以需要尽早检查。
|
|
</simpara>
|
|
<para>
|
|
<example>
|
|
<title>故意文件错误</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$my_file = @file ('non_existent_file') or
|
|
die ("Failed opening file: error was '" . error_get_last()['message'] . "'");
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>表达式抑制</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
// 这适用于所有表达式,而不仅仅是函数:
|
|
$value = @$cache[$key];
|
|
// 如果索引 $key 不存在,则不会发出通知。
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<note>
|
|
<simpara>
|
|
<literal>@</literal> 运算符只对 <link linkend="language.expressions">表达式</link> 有效。
|
|
对新手来说一个简单的规则就是:如果能从某处获得值,就能在它前面加上
|
|
<literal>@</literal> 运算符。例如,可以把它放在变量,函数调用,某些语言构造调用(例如 <function>include</function> )等等之前。
|
|
不能把它放在函数或类的定义之前,也不能用于条件结构例如 <literal>if</literal> 和 &foreach; 等。
|
|
</simpara>
|
|
</note>
|
|
<warning>
|
|
<para>
|
|
PHP 8.0.0 之前,<literal>@</literal> 运算符会禁用导致脚本停止运行的严重错误。
|
|
例如在调用一个不存在的函数前添加 <literal>@</literal>,由于函数不可用或者输入错误,
|
|
将会导致脚本终止,而不会说明原因。
|
|
</para>
|
|
</warning>
|
|
|
|
<sect2 role="seealso">
|
|
&reftitle.seealso;
|
|
<para>
|
|
<simplelist>
|
|
<member><function>error_reporting</function></member>
|
|
<member><link linkend="ref.errorfunc">错误处理与日志记录函数</link></member>
|
|
</simplelist>
|
|
</para>
|
|
</sect2>
|
|
</sect1>
|