1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-24 07:42:22 +01:00
Files
archived-doc-ru/language/operators/errorcontrol.xml
Mikhail Alferov 190f25bb3e Update operators 1693404 to en (#1066)
* Update operators.xml to en

* Update array.xml to en

* Update assignment.xml to en

* Update bitwise.xml to en

* Update comparison.xml to en

* Update errorcontrol.xml to en

* Update execution.xml to en

* Update increment.xml to en

* Update precedence.xml to en

* Update string.xml to en

* Update array.xml Исправил синтакс. ошибку

* Update bitwise.xml Добавил недостающий тег
2025-04-28 15:00:28 +03:00

117 lines
5.2 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 16934048f79c6e117cd16a23c09c1b2ea502e284 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>@</literal>, значение <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>
Сообщение об ошибке, которое сгенерировало выражение,
доступно в элементе с ключом <literal>"message"</literal> в массиве,
который возвращает функция <function>error_get_last</function>.
Результат функции изменяется при каждой ошибке,
поэтому результат лучше проверить заранее.
</simpara>
<para>
<example>
<title>Преднамеренная ошибка считывания файла</title>
<programlisting role="php">
<![CDATA[
<?php
$my_file = @file('non_existent_file') or
die("При открытии файла возникла ошибка: '" . 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> добавляют перед инструкциями,
которые вычисляются как значение.
Оператор <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
-->