com doc/ja: Cleanup and update docs related to @ operator: appendices/migration80/incompatible.xml language/operators.xml
reference/errorfunc/functions/set-error-handler.xml
| From: | Yoshinari Takaoka | Date: | Fri, 19 Feb 2021 12:55:00 +0000 |
| Subject: | com doc/ja: Cleanup and update docs related to @ operator: appendices/migration80/incompatible.xml language/operators.xml reference/errorfunc/functions/set-error-handler.xml |
||
| Groups: | php.doc.ja | ||
| Request: | Send a blank email to doc-ja+get-6202@lists.php.net to get a copy of this message | ||
Commit: 4ff851ad4f02b450269e1375daef3928cdce5acc
Author: Yoshinari Takaoka <mumumu@mumumu.org> Fri, 19 Feb 2021 21:55:00 +0900
Parents: e23c182e875059de461e52072b640126b45b0b7d
Branches: master
Link: http://git.php.net/?p=doc/ja.git;a=commitdiff;h=4ff851ad4f02b450269e1375daef3928cdce5acc
Log:
Cleanup and update docs related to @ operator
Also fix part of the set_error_handler() docs
Closes GH-441
Changed paths:
M appendices/migration80/incompatible.xml
M language/operators.xml
M reference/errorfunc/functions/set-error-handler.xml
diff --git a/appendices/migration80/incompatible.xml b/appendices/migration80/incompatible.xml index fc848847a1..dafaa0d79b 100644 --- a/appendices/migration80/incompatible.xml +++ b/appendices/migration80/incompatible.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision: 351500 $ --> -<!-- EN-Revision: c31630ca23d219c758a8b580e1d583103e97e377 Maintainer: mumumu Status: ready --> +<!-- EN-Revision: 12b1d4704ea448b55ec155619be1e50c0e67e9f9 Maintainer: mumumu Status: ready --> <sect1 xml:id="migration80.incompatible" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>下位互換性のない変更点</title> @@ -212,7 +212,7 @@ // こういうエラーハンドラは function my_error_handler($err_no, $err_msg, $filename, $linenum) { if (error_reporting() == 0) { - return; // Silenced + return false; // Silenced } // ... } @@ -220,7 +220,7 @@ function my_error_handler($err_no, $err_msg, $filename, $linenum) { // 以下に置き換えましょう function my_error_handler($err_no, $err_msg, $filename, $linenum) { if (!(error_reporting() & $err_no)) { - return; // Silenced + return false; // Silenced } // ... } diff --git a/language/operators.xml b/language/operators.xml index ece260b6a4..b306417730 100644 --- a/language/operators.xml +++ b/language/operators.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> -<!-- EN-Revision: 783fbc2001b129f5f8956937e15e253969b8765c Maintainer: takagi Status: ready --> +<!-- EN-Revision: 12b1d4704ea448b55ec155619be1e50c0e67e9f9 Maintainer: takagi Status: ready --> <!-- CREDITS: hirokawa,mumumu --> <chapter xml:id="language.operators" xmlns="http://docbook.org/ns/docbook"> <title>演算子</title> @@ -1828,17 +1828,42 @@ echo $foo ?? $bar ?? $baz ?? $qux; // 出力は 1 です <sect1 xml:id="language.operators.errorcontrol"> <title>エラー制御演算子</title> <simpara> - PHP はエラー制御演算子(@)をサポートしています。PHP の式の前に付けた場合、 + PHP はエラー制御演算子(<literal>@</literal>)をサポートしています。 + PHP の式の前に付けた場合、 その式により生成されたエラーメッセージは無視されます。 </simpara> - <simpara> + <para> <function>set_error_handler</function> で自作のエラーハンドラを設定した場合は エラー制御演算子があってもそのエラーハンドラがコールされます。 - しかし、自作のエラーハンドラの中で <function>error_reporting</function> - をコールすれば、@ つきの式で生成されたエラーの場合は返り値が 0 - になるのでこの値で区別することができます。 - 自作のエラーハンドラの中ではこの方法による区別を行うべきです。 - </simpara> + その場合、自作のエラーハンドラの中で <function>error_reporting</function> + をコールし、<literal>@</literal> + 演算子が使われているかを次のようにして確認すべきです。 + + <informalexample> + <programlisting role="php"> +<![CDATA[ +<?php +function my_error_handler($err_no, $err_msg, $filename, $linenum) { + if (!(error_reporting() & $err_no)) { + return false; // Silenced + } + // ... +} +?> +]]> + </programlisting> + </informalexample> + </para> + + <warning> + <para> + PHP 8.0.0 より前のバージョンでは、 + カスタムのエラーハンドラで渡されるエラーレベルは、 + エラーメッセージが無視されている場合常に <literal>0</literal> でした。 + このことは、PHP 8.0.0 以降は当てはまりません。 + </para> + </warning> + <simpara> 式によって生成されたあらゆるエラーメッセージは <function>error_get_last</function> 関数が返す配列要素 @@ -1865,22 +1890,26 @@ $value = @$cache[$key]; </para> <note> <simpara> - @演算子は、<link linkend="language.expressions">式</link> - でのみ動作します。基本的なルールは次のようになります。 - 値を得ることができるものの場合、@ 演算子を前に付けることが可能です。 - 例えば、変数、関数、<function>include</function> コール、定数等の - 前にこの演算子をつけることが可能です。関数またはクラスの定義や + <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> diff --git a/reference/errorfunc/functions/set-error-handler.xml b/reference/errorfunc/functions/set-error-handler.xml index 01918d0f64..983d5e8f62 100644 --- a/reference/errorfunc/functions/set-error-handler.xml +++ b/reference/errorfunc/functions/set-error-handler.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> -<!-- EN-Revision: 71c12b158398eec7f65644d489749230984d43f6 Maintainer: takagi Status: ready --> +<!-- EN-Revision: 12b1d4704ea448b55ec155619be1e50c0e67e9f9 Maintainer: takagi Status: ready --> <!-- CREDITS: hirokawa,mumumu --> <refentry xml:id="function.set-error-handler" xmlns="http://docbook.org/ns/docbook"> <refnamediv> @@ -32,10 +32,18 @@ <function>error_reporting</function> の設定にかかわらず、どのような場合でも ユーザーが設定したエラーハンドラがコールされます。ただし、この場合でも ハンドラで <function>error_reporting</function> のカレントの値を読み、 - それにあわせて適切に動作させることは可能です。エラーを発生した命令の前に - <link linkend="language.operators.errorcontrol">@ エラー制御演算子 - </link> が付加されている場合、この値は 0 となることには注意しましょう。 + それにあわせて適切に動作させることは可能です。 </para> + + <warning> + <para> + PHP 8.0.0 より前のバージョンでは、 + <parameter>errno</parameter> の値は + <link linkend="language.operators.errorcontrol">@ エラー制御演算子</link> が式の前に付いている場合、 + 常に <literal>0</literal> でした。 + </para> + </warning> + <para> ユーザーハンドラ関数は、必要に応じて <function>die</function> を コールする責任があることにも注意しましょう。エラーハンドラ関数が @@ -191,6 +199,15 @@ <row> <entry>8.0.0</entry> <entry> + <link linkend="language.operators.errorcontrol">@ エラー制御演算子</link> + によって式のエラーメッセージが抑止されている場合でも、 + <parameter>errno</parameter> の値は + <literal>0</literal> ではなくなりました。 + </entry> + </row> + <row> + <entry>8.0.0</entry> + <entry> <parameter>errcontext</parameter> 引数は削除されました。 よって、ユーザー定義のコールバックに渡されることはありません。 </entry>
diff --git a/appendices/migration80/incompatible.xml b/appendices/migration80/incompatible.xml index fc848847a1..dafaa0d79b 100644 --- a/appendices/migration80/incompatible.xml +++ b/appendices/migration80/incompatible.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision: 351500 $ --> -<!-- EN-Revision: c31630ca23d219c758a8b580e1d583103e97e377 Maintainer: mumumu Status: ready --> +<!-- EN-Revision: 12b1d4704ea448b55ec155619be1e50c0e67e9f9 Maintainer: mumumu Status: ready --> <sect1 xml:id="migration80.incompatible" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>下位互換性のない変更点</title> @@ -212,7 +212,7 @@ // こういうエラーハンドラは function my_error_handler($err_no, $err_msg, $filename, $linenum) { if (error_reporting() == 0) { - return; // Silenced + return false; // Silenced } // ... } @@ -220,7 +220,7 @@ function my_error_handler($err_no, $err_msg, $filename, $linenum) { // 以下に置き換えましょう function my_error_handler($err_no, $err_msg, $filename, $linenum) { if (!(error_reporting() & $err_no)) { - return; // Silenced + return false; // Silenced } // ... } diff --git a/language/operators.xml b/language/operators.xml index ece260b6a4..b306417730 100644 --- a/language/operators.xml +++ b/language/operators.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> -<!-- EN-Revision: 783fbc2001b129f5f8956937e15e253969b8765c Maintainer: takagi Status: ready --> +<!-- EN-Revision: 12b1d4704ea448b55ec155619be1e50c0e67e9f9 Maintainer: takagi Status: ready --> <!-- CREDITS: hirokawa,mumumu --> <chapter xml:id="language.operators" xmlns="http://docbook.org/ns/docbook"> <title>演算子</title> @@ -1828,17 +1828,42 @@ echo $foo ?? $bar ?? $baz ?? $qux; // 出力は 1 です <sect1 xml:id="language.operators.errorcontrol"> <title>エラー制御演算子</title> <simpara> - PHP はエラー制御演算子(@)をサポートしています。PHP の式の前に付けた場合、 + PHP はエラー制御演算子(<literal>@</literal>)をサポートしています。 + PHP の式の前に付けた場合、 その式により生成されたエラーメッセージは無視されます。 </simpara> - <simpara> + <para> <function>set_error_handler</function> で自作のエラーハンドラを設定した場合は エラー制御演算子があってもそのエラーハンドラがコールされます。 - しかし、自作のエラーハンドラの中で <function>error_reporting</function> - をコールすれば、@ つきの式で生成されたエラーの場合は返り値が 0 - になるのでこの値で区別することができます。 - 自作のエラーハンドラの中ではこの方法による区別を行うべきです。 - </simpara> + その場合、自作のエラーハンドラの中で <function>error_reporting</function> + をコールし、<literal>@</literal> + 演算子が使われているかを次のようにして確認すべきです。 + + <informalexample> + <programlisting role="php"> +<![CDATA[ +<?php +function my_error_handler($err_no, $err_msg, $filename, $linenum) { + if (!(error_reporting() & $err_no)) { + return false; // Silenced + } + // ... +} +?> +]]> + </programlisting> + </informalexample> + </para> + + <warning> + <para> + PHP 8.0.0 より前のバージョンでは、 + カスタムのエラーハンドラで渡されるエラーレベルは、 + エラーメッセージが無視されている場合常に <literal>0</literal> でした。 + このことは、PHP 8.0.0 以降は当てはまりません。 + </para> + </warning> + <simpara> 式によって生成されたあらゆるエラーメッセージは <function>error_get_last</function> 関数が返す配列要素 @@ -1865,22 +1890,26 @@ $value = @$cache[$key]; </para> <note> <simpara> - @演算子は、<link linkend="language.expressions">式</link> - でのみ動作します。基本的なルールは次のようになります。 - 値を得ることができるものの場合、@ 演算子を前に付けることが可能です。 - 例えば、変数、関数、<function>include</function> コール、定数等の - 前にこの演算子をつけることが可能です。関数またはクラスの定義や + <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> diff --git a/reference/errorfunc/functions/set-error-handler.xml b/reference/errorfunc/functions/set-error-handler.xml index 01918d0f64..983d5e8f62 100644 --- a/reference/errorfunc/functions/set-error-handler.xml +++ b/reference/errorfunc/functions/set-error-handler.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> -<!-- EN-Revision: 71c12b158398eec7f65644d489749230984d43f6 Maintainer: takagi Status: ready --> +<!-- EN-Revision: 12b1d4704ea448b55ec155619be1e50c0e67e9f9 Maintainer: takagi Status: ready --> <!-- CREDITS: hirokawa,mumumu --> <refentry xml:id="function.set-error-handler" xmlns="http://docbook.org/ns/docbook"> <refnamediv> @@ -32,10 +32,18 @@ <function>error_reporting</function> の設定にかかわらず、どのような場合でも ユーザーが設定したエラーハンドラがコールされます。ただし、この場合でも ハンドラで <function>error_reporting</function> のカレントの値を読み、 - それにあわせて適切に動作させることは可能です。エラーを発生した命令の前に - <link linkend="language.operators.errorcontrol">@ エラー制御演算子 - </link> が付加されている場合、この値は 0 となることには注意しましょう。 + それにあわせて適切に動作させることは可能です。 </para> + + <warning> + <para> + PHP 8.0.0 より前のバージョンでは、 + <parameter>errno</parameter> の値は + <link linkend="language.operators.errorcontrol">@ エラー制御演算子</link> が式の前に付いている場合、 + 常に <literal>0</literal> でした。 + </para> + </warning> + <para> ユーザーハンドラ関数は、必要に応じて <function>die</function> を コールする責任があることにも注意しましょう。エラーハンドラ関数が @@ -191,6 +199,15 @@ <row> <entry>8.0.0</entry> <entry> + <link linkend="language.operators.errorcontrol">@ エラー制御演算子</link> + によって式のエラーメッセージが抑止されている場合でも、 + <parameter>errno</parameter> の値は + <literal>0</literal> ではなくなりました。 + </entry> + </row> + <row> + <entry>8.0.0</entry> + <entry> <parameter>errcontext</parameter> 引数は削除されました。 よって、ユーザー定義のコールバックに渡されることはありません。 </entry>