よろしくお願いいたします。
先日PHPリファレンスにてtry-catch
を勉強していたのですが、疑問点がありましてご質問させていただければと思います。
下記のコードを例とさせていただきます。
PHP
1<?php 2namespace MyProject { 3 4set_exception_handler('error_handler'); 5 6function error_handler($exception){ 7 echo "想定外のエラーが発生しました。"; 8 } 9 10function test(int $a){ 11 12 try{ 13 if($a == 0){ 14 throw new Exception('エラーが発生しました。'); 15 } 16 } 17 catch (LengthException $e) { 18 echo $e->getMessage(); 19 } 20 echo "表示されたのは $a です"; 21 22} 23 24test(0); 25} 26?>
*意図的にerror_handler
へthrow
するためにcatch
のエラー受け取り引数をLengthException
とし受け取りエラーを発生させています。
質問としては
Question
11.set_exception_handlerをはじめに記述しましたが、適切な位置なのでしょうか。 2 32.throwはfunction test()内部からエラーを投げていますが、throwは関数内のローカルなエリアで本来catchに渡しているにもかかわらず、catchできない場合にグローバルエリアにあるerror_handlerにエラーを投げているように思われますが、throwはローカルにもグローバルにも値を投げれる性質を持つのでしょうか... 4 53.try-catchでエラーを発生させる際はある限定条件下でのエラーが発生する印象のためif文とセットに考えてしまいがちなのですが、if文のないケースなどあるのでしょうか。具体的にはどのような状況になりますでしょうか。 6 74.今回はerror_handlerおよびset_exception_handlerを関数の外に記述しましたがerror_handler関数はtest関数内に入れても動くのでしょうか。 8 95.根拠はないのですが、set_exception_handlerについて調べていた際に、名前空間(namespace)と併用して使う必要がありそうな旨の記事が海外の記事に載っておりました。そのような事はありましたでしょうか。
質問が多く恐縮です。必要な情報あればおっしゃってくださいませ。
助言のほどいただけますと幸いです。
あなたの回答
tips
プレビュー