mirror of
https://github.com/php/doc-ru.git
synced 2026-03-26 16:52:12 +01:00
104 lines
5.0 KiB
XML
104 lines
5.0 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!-- EN-Revision: 43d07782b514d0c7a8487f2c74063739f302df8d Maintainer: sergey Status: ready -->
|
||
<!-- Reviewed: no -->
|
||
<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 функция <function>error_reporting</function>,
|
||
вызываемая внутри пользовательского обработчика ошибок,
|
||
всегда возвращала <literal>0</literal>, если ошибка была подавлена оператором <literal>@</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>
|
||
Любое сообщение об ошибке, сгенерированное выражением,
|
||
доступно в элементе массива с ключом <literal>«message»</literal>,
|
||
возвращаемого функцией <function>error_get_last</function>.
|
||
Результат этой функции будет меняться при каждой ошибке,
|
||
поэтому его необходимо проверить заранее.
|
||
</simpara>
|
||
<para>
|
||
<informalexample>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
|
||
/* Преднамеренная ошибка при работе с файлами */
|
||
$my_file = @file ('non_existent_file') or
|
||
die ("Ошибка при открытии файла: сообщение об ошибке было таким: '" . error_get_last()['message'] . "'");
|
||
|
||
// работает для любых выражений, а не только для функций
|
||
$value = @$cache[$key];
|
||
// В случае если ключа $key нет, сообщение об ошибке (notice) не будет отображено
|
||
|
||
]]>
|
||
</programlisting>
|
||
</informalexample>
|
||
</para>
|
||
<note>
|
||
<simpara>
|
||
Оператор <literal>@</literal> работает только с
|
||
<link linkend="language.expressions">выражениями</link>.
|
||
Есть простое правило: если что-то возвращает значение,
|
||
значит, можно указать перед ним оператор <literal>@</literal>.
|
||
Например, можно указать оператор <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>
|
||
<!-- 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
|
||
-->
|