-
Notifications
You must be signed in to change notification settings - Fork 79
/
Copy patherrorcontrol.xml
86 lines (81 loc) · 3.6 KB
/
errorcontrol.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 43d07782b514d0c7a8487f2c74063739f302df8d 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>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
/* 意図的なエラー */
$my_file = @file ('non_existent_file') or
die ("Failed opening file: error was '" . error_get_last()['message'] . "'");
// この演算子は関数だけでなく、全ての式で動作します。
$value = @$cache[$key];
// インデックス $key が存在しない場合でも、警告を発生しません。
?>
]]>
</programlisting>
</informalexample>
</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>