mirror of
https://github.com/php/doc-zh.git
synced 2026-03-24 15:12:20 +01:00
116 lines
3.7 KiB
XML
116 lines
3.7 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!-- $Revision$ -->
|
||
<!-- EN-Revision: 4bf789e981af0836c41daa16e57ef86c21497faa Maintainer: FishDrowned Status: ready -->
|
||
<!-- CREDITS: mowangjuanzi -->
|
||
<sect1 xml:id="language.errors.php7" xmlns="http://docbook.org/ns/docbook">
|
||
<title>PHP 7 错误处理</title>
|
||
|
||
<para>
|
||
PHP 7 改变了大多数错误的报告方式。不同于传统(PHP 5)的错误报告机制,现在大多数错误被作为
|
||
<classname>Error</classname> 异常抛出。
|
||
</para>
|
||
|
||
<para>
|
||
这种 <classname>Error</classname> 异常可以像 <classname>Exception</classname>
|
||
异常一样被第一个匹配的 <literal>try</literal> / <literal>catch</literal>
|
||
块所捕获。如果没有匹配的
|
||
<link linkend="language.exceptions.catch"><literal>catch</literal></link>
|
||
块,则调用异常处理函数(事先通过 <function>set_exception_handler</function> 注册)进行处理。
|
||
如果尚未注册异常处理函数,则按照传统方式处理:被报告为一个致命错误(Fatal Error)。
|
||
</para>
|
||
|
||
<para>
|
||
<classname>Error</classname> 类并非继承自 <classname>Exception</classname>
|
||
类,所以不能用 <code>catch (Exception $e) { ... }</code> 来捕获
|
||
<classname>Error</classname>。你可以用
|
||
<code>catch (Error $e) { ... }</code>,或者通过注册异常处理函数(
|
||
<function>set_exception_handler</function>)来捕获 <classname>Error</classname>。
|
||
</para>
|
||
|
||
<sect2 xml:id="language.errors.php7.hierarchy">
|
||
<title><classname>Error</classname> 层次结构</title>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<simpara><classname>Throwable</classname></simpara>
|
||
<itemizedlist>
|
||
<listitem>
|
||
<simpara><classname>Error</classname></simpara>
|
||
<itemizedlist>
|
||
<listitem>
|
||
<simpara><classname>ArithmeticError</classname></simpara>
|
||
<itemizedlist>
|
||
<listitem>
|
||
<simpara><classname>DivisionByZeroError</classname></simpara>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara><classname>AssertionError</classname></simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara><classname>CompileError</classname></simpara>
|
||
<itemizedlist>
|
||
<listitem>
|
||
<simpara><classname>ParseError</classname></simpara>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara><classname>TypeError</classname></simpara>
|
||
<itemizedlist>
|
||
<listitem>
|
||
<simpara><classname>ArgumentCountError</classname></simpara>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara><classname>ValueError</classname></simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara><classname>UnhandledMatchError</classname></simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara><classname>FiberError</classname></simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara><classname>RequestParseBodyException</classname></simpara>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara><classname>Exception</classname></simpara>
|
||
<itemizedlist>
|
||
<listitem>
|
||
<simpara>...</simpara>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</sect2>
|
||
</sect1>
|
||
|
||
<!-- Keep this comment at the end of the file
|
||
Local variables:
|
||
mode: sgml
|
||
sgml-omittag:t
|
||
sgml-shorttag:t
|
||
sgml-minimize-attributes:nil
|
||
sgml-always-quote-attributes:t
|
||
sgml-indent-step:1
|
||
sgml-indent-data:t
|
||
indent-tabs-mode:nil
|
||
sgml-parent-document:nil
|
||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||
sgml-exposed-tags:nil
|
||
sgml-local-catalogs:nil
|
||
sgml-local-ecat-files:nil
|
||
End:
|
||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||
vim: et tw=78 syn=sgml
|
||
vi: ts=1 sw=1
|
||
-->
|
||
|