mirror of
https://github.com/php/doc-ru.git
synced 2026-03-24 07:42:22 +01:00
* 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 Добавил недостающий тег
117 lines
5.2 KiB
XML
117 lines
5.2 KiB
XML
<?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
|
||
-->
|