mirror of
https://github.com/php/doc-ja.git
synced 2026-03-24 07:02:08 +01:00
96 lines
3.7 KiB
XML
96 lines
3.7 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: 16934048f79c6e117cd16a23c09c1b2ea502e284 Maintainer: mumumu Status: ready -->
|
|
<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 より前のバージョンでは、
|
|
エラー制御演算子(<literal>@</literal>)でエラーが無視されている場合、
|
|
カスタムのエラーハンドラでコールされた
|
|
<function>error_reporting</function> が常に <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>
|
|
式によって生成されたあらゆるエラーメッセージは
|
|
<function>error_get_last</function> 関数が返す配列要素
|
|
<literal>"message"</literal> から取得できます。
|
|
この関数の結果はエラーごとに変わります。よって速やかに確認する必要があります。
|
|
</simpara>
|
|
<para>
|
|
<example>
|
|
<title>意図的なエラー</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$my_file = @file ('non_existent_file') or
|
|
die ("Failed opening file: error was '" . error_get_last()['message'] . "'");
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>式でのエラー抑制</title>
|
|
<programlisting>
|
|
<![CDATA[
|
|
<?php
|
|
// この演算子は関数だけでなく、全ての式で動作します。
|
|
$value = @$cache[$key];
|
|
// インデックス $key が存在しない場合でも、警告を発生しません。
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<note>
|
|
<simpara>
|
|
<literal>@</literal> 演算子は、
|
|
<link linkend="language.expressions">式</link>
|
|
に対してのみ動作します。基本的なルールは次のようになります。
|
|
値を得ることができるものの場合、
|
|
<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>
|