Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
126 changes: 126 additions & 0 deletions reference/errorfunc/functions/get-error-handler.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 4a6671fe697ead5b27603b56face01a2c4e7ebe5 Maintainer: malferov Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.get-error-handler" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>get_error_handler</refname>
<refpurpose>Получает пользовательскую функцию обработчика ошибок</refpurpose>
</refnamediv>

<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type class="union"><type>callable</type><type>null</type></type><methodname>get_error_handler</methodname>
<void/>
</methodsynopsis>
<simpara>
Функция возвращает текущую функцию обработчика ошибок, если такую функцию определили.
</simpara>
</refsect1>

<refsect1 role="parameters">
&reftitle.parameters;
&no.function.parameters;
</refsect1>

<refsect1 role="returnvalues">
&reftitle.returnvalues;
<simpara>
Функция возвращает текущий обработчик ошибок, если такой определили в коде,
или значение &null;, если за текущую обработку ошибок отвечает встроенная функция.
</simpara>
<simpara>
Функция возвращает непосредственно ту callback-функцию, которую передали в функцию
<function>set_error_handler</function>, когда устанавливали пользовательский обработчик.
</simpara>
</refsect1>

<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Пример получения пользовательского обработчика ошибок функцией <function>get_error_handler</function></title>
<programlisting role="php">
<![CDATA[
<?php

$handler = function (int $errno, string $errstr, ?string $errfile, ?int $errline) {
echo "Ошибка: " . $errstr . "\n";
};

var_dump(get_error_handler()); // NULL

set_error_handler($handler);

var_dump(get_error_handler() === $handler); // bool(true)

?>
]]>
</programlisting>
</example>
</para>
</refsect1>

<refsect1 role="notes">
&reftitle.notes;
<tip>
<simpara>
До PHP 8.5.0 действие функции заменяет следующий
полифил:
</simpara>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php

if (!function_exists('get_error_handler')) {
function noop_error_handler() {}

function get_error_handler(): ?callable
{
$handler = set_error_handler('noop_error_handler');
restore_error_handler();
return $handler;
}
}

?>
]]>
</programlisting>
</informalexample>
</tip>
</refsect1>

<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>error_reporting</function></member>
<member><function>set_error_handler</function></member>
<member><function>restore_error_handler</function></member>
<member><function>trigger_error</function></member>
<member><link linkend="errorfunc.constants">Константы уровней ошибок</link></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- 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
-->
126 changes: 126 additions & 0 deletions reference/errorfunc/functions/get-exception-handler.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 4a6671fe697ead5b27603b56face01a2c4e7ebe5 Maintainer: malferov Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.get-exception-handler" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>get_exception_handler</refname>
<refpurpose>Получает пользовательскую функцию обработчика исключений</refpurpose>
</refnamediv>

<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type class="union"><type>callable</type><type>null</type></type><methodname>get_exception_handler</methodname>
<void/>
</methodsynopsis>
<simpara>
Функция возвращает текущую функцию обработчика исключений, если такую функцию определили.
</simpara>
</refsect1>

<refsect1 role="parameters">
&reftitle.parameters;
&no.function.parameters;
</refsect1>

<refsect1 role="returnvalues">
&reftitle.returnvalues;
<simpara>
Функция возвращает текущий обработчик исключений, если такой определили в коде,
или значение &null;, если за текущую обработку исключений отвечает встроенная функция.
</simpara>
<simpara>
Функция возвращает непосредственно ту callback-функцию, которую передали в функцию
<function>set_exception_handler</function>, когда устанавливали пользовательский обработчик.
</simpara>
</refsect1>

<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Пример получения пользовательского обработчика исключений функцией <function>get_exception_handler</function></title>
<programlisting role="php">
<![CDATA[
<?php

$handler = function (Throwable $ex) {
echo "Исключение: " . $ex::class . ": " . $ex->getMessage() . "\n";
};

var_dump(get_exception_handler()); // NULL

set_exception_handler($handler);

var_dump(get_exception_handler() === $handler); // bool(true)

?>
]]>
</programlisting>
</example>
</para>
</refsect1>

<refsect1 role="notes">
&reftitle.notes;
<tip>
<simpara>
До PHP 8.5.0 действие функции заменяет следующий
полифил:
</simpara>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php

if (!function_exists('get_exception_handler')) {
function noop_exception_handler() {}

function get_exception_handler(): ?callable
{
$handler = set_exception_handler('noop_exception_handler');
restore_exception_handler();
return $handler;
}
}

?>
]]>
</programlisting>
</informalexample>
</tip>
</refsect1>

<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>set_exception_handler</function></member>
<member><function>restore_exception_handler</function></member>
<member><function>restore_error_handler</function></member>
<member><function>error_reporting</function></member>
<member><link linkend="language.exceptions">Исключения</link></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- 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
-->
27 changes: 15 additions & 12 deletions reference/errorfunc/functions/restore-error-handler.xml
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: f781803449007bb0e3a96c693e0eee067f7eb466 Maintainer: tmn Status: ready -->
<!-- EN-Revision: 4a6671fe697ead5b27603b56face01a2c4e7ebe5 Maintainer: tmn Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.restore-error-handler" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>restore_error_handler</refname>
<refpurpose>
Восстанавливает предыдущий обработчик ошибок
Восстанавливает предыдущую функцию обработчика ошибок
</refpurpose>
</refnamediv>

Expand All @@ -16,10 +16,10 @@
<void/>
</methodsynopsis>
<para>
Используется после смены обработчика ошибок функцией
<function>set_error_handler</function>, чтобы вернуть предыдущий обработчик
(который может быть как встроенной функцией, так и определённой
пользователем).
Функцию вызывают после изменения обработчика ошибок функцией
<function>set_error_handler</function>, чтобы вернуться к предыдущему обработчику,
которым станет или пользовательская функция обработки ошибок, если такую определили,
или встроенный обработчик.
</para>
</refsect1>

Expand All @@ -39,31 +39,33 @@
&reftitle.examples;
<para>
<example>
<title>Пример использования <function>restore_error_handler</function></title>
<title>Пример восстановления предыдущего обработчика ошибок функцией <function>restore_error_handler</function></title>
<para>
Определение, произошла ли ошибка в функции
<function>unserialize</function>, а затем восстановление исходного
обработчика ошибок.
Пример определяет, вызвала ли ошибку функция
<function>unserialize</function>, а затем восстанавливает исходный
обработчик ошибок.
</para>
<programlisting role="php">
<![CDATA[
<?php

function unserialize_handler($errno, $errstr)
{
echo "Сериализуемое значение недопустимо.\n";
echo "Недопустимое сериализованное значение.\n";
}

$serialized = 'foo';
set_error_handler('unserialize_handler');
$original = unserialize($serialized);
restore_error_handler();

?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Сериализуемое значение недопустимо.
Недопустимое сериализованное значение.
]]>
</screen>
</example>
Expand All @@ -76,6 +78,7 @@ restore_error_handler();
<simplelist>
<member><function>error_reporting</function></member>
<member><function>set_error_handler</function></member>
<member><function>get_error_handler</function></member>
<member><function>restore_exception_handler</function></member>
<member><function>trigger_error</function></member>
</simplelist>
Expand Down
Loading
Loading