ホームページ >バックエンド開発 >PHPチュートリアル >PHP の組み込み例外処理クラスを拡張する、PHP の組み込み例外処理_PHP チュートリアル

PHP の組み込み例外処理クラスを拡張する、PHP の組み込み例外処理_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:19:55981ブラウズ

PHP の組み込み例外処理クラス、PHP の組み込み例外処理を展開します

try コード ブロックでは、実行のために catch コード ブロックにジャンプする前に、throw ステートメントを使用して例外オブジェクトをスローする必要があります。 catch コード ブロック この例外クラスのオブジェクトをキャプチャして使用します。 PHP で提供される組み込み例外処理クラス Exception はすでに非常に優れた機能を備えていますが、場合によっては、より多くの機能を得るためにこのクラスを拡張する必要がある場合があります。したがって、ユーザーはカスタム例外処理クラスを使用して、PHP の組み込み例外処理クラスを拡張できます。次のコードは、組み込み例外処理クラスのどのプロパティとメソッドがサブクラスでアクセス可能で継承可能であるかを示しています。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

上記のコードは、組み込みの例外処理関数クラス Exception の構造を説明するためのものであり、実用的な意味を持つコードではありません。カスタム クラスを例外処理クラスとして使用する場合、組み込みの例外処理クラスを拡張したサブクラスである必要があります。例外クラス以外のサブクラスは例外処理クラスとして使用できません。組み込み例外処理クラス Excepiton を拡張するときにコンストラクターを再定義する場合は、同時にparent::construct()を呼び出して、すべての変数に値が割り当てられているかどうかを確認することをお勧めします。オブジェクトが文字列を出力したい場合は、__toString() をオーバーロードして出力スタイルをカスタマイズできます。カスタム サブクラスの組み込み例外処理を直接使用して、Exception クラスのすべてのメンバー属性を処理できますが、このクラスのパブリック メソッドのほとんどは Final であるため、親クラスから継承されたメンバー メソッドを書き換えることはできません。
カスタム例外ハンドラーの作成は非常に簡単で、従来のクラスと同じ方法で宣言されますが、クラスは組み込みの例外処理クラス Exception の拡張である必要があります。 PHP で例外が発生すると、カスタム例外クラスのメソッドを呼び出してそれを処理できます。カスタム MyException クラスを作成し、組み込み例外処理クラス Exception からすべてのプロパティを継承し、それにカスタム メソッドを追加します。コードとアプリケーションは次のとおりです:

<?php class Exception{ protected $message = 'Unknown exception'; //异常信息 protected $code = 0; //用户自定义异常代码 protected $file; //发生异常的文件名protected $line; //发生异常的代码行号 function __construct($message =null,$code=0){} final function getMessage(){} //返回异常信息 final function getCode(){} //返回异常代码 final function getFile(){} //返回发生异常的文件名 final function getLine(){} //返回发生异常的代码行号 final function getTrace(){} //backtrace()数组final function getTraceAsString(){} //已格式化成字符串的getTrace()信息 //可重载的方法,可输出字符串 function __toString(){} } ?>
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 <?php //滴定仪一个异常处理类,但必须是扩展内异常处理类的子类 class MyException extends Exception{ //重定义构造器使第一个参数message变为必须被指定属性 public function __construct($message,$code=0){ //在这里定义一些自己的代码 //建议同时调用parent::construct()来检查所有的变量是否已被赋值 parent::__construct($message,$code); } //重写父类方法,自定义字符串输出的样式 public function __toString(){ return __CLASS__.":[".$this->code."]:".$this->message."<br>"; } //为这个异常自定义一个处理方法 public function customFunction(){ echo "按自定义的方法处理出现的这个类型的异常<br>"; } }try{ $error='允许抛出这个错误'; throw new MyException($error); //创建一个自定义异常的处理对象,通过throw语句抛出 echo 'Never executed'; //从这里开始,try代码块内的代码将不会再被执行 }catch(MyException $e){ //捕获自定义的异常对象catch(MyException $e){ //カスタム例外オブジェクトをキャプチャする echo '捕获异常:'.$e; //输出捕获的异常消息 $e->customFunction(); //通过自定义的异常对象中的方法处理异常 }echo '你好呀'; //程序没有崩溃继续向下执行 ?>

カスタマイズされた MyExcepition クラスで、親クラスのコンストラクター メソッドを使用して、すべての変数に値が割り当てられているかどうかを確認します。さらに、親クラスの __toString() メソッドは、カスタマイズされてキャプチャされた例外処理クラスを出力するためにオーバーロードされます。カスタム例外処理クラスでは、例外処理クラスを特別に呼び出すことができることを除いて、使用方法に大きな違いはありません。特定の例外用に書かれたアプローチ。

>> この記事への固定リンク: http://php.ncong.com/php_course/wrong/yichangchulilei.html

>

私も数日前に同僚とこの問題について話し合いました。このように説明してみましょう
たとえば、try catchを呼び出して配列が標準を超えた場合、プログラムはどのようにして配列が標準を超えていることを知るのでしょうか?それは配列クラスによって報告される必要があります。 配列クラスでは、それをキャッチしてメッセージを取得できるように、それをスローする必要がありますが、配列クラスで直接キャッチした場合は、例外は発生しません。このようにすると、呼び出した配列が標準を超えていたとしても、誰も例外をスローしないため、自分のキャッチではそれをキャッチできません

他の人の回答は公式すぎるので、私の回答を受け入れてください

PHP カスタム例外ハンドラーを使用するいくつかの方法





導入した PHP カスタム例外ハンドラーは、PHP の組み込み例外_uncaught_handler() 関数です。この関数を使用すると、trycatch ブロックによってキャッチされなかった例外を処理するユーザー定義の例外処理関数を設定できます。 次の 4 つのコードは、waylife プロジェクト (非実稼働環境) での私の単純なアプリケーションです。堅牢ではなく、美しくもありませんが、SNS プロジェクトはとっくの昔に消滅しています。

1. 例外クラスの階層関係: classNotFoundExceptionextendsException{}

classDBExceptionextendsException{}

2. キャッチされなかった例外のハンドラーを設定します:
functionException_uncaught_handler(Exception$e){
header('Content-type:text) /html ;charset=utf-8');if($einstanceofNotFoundException)exit($e-
getMessage());
elseif($einstanceofDBException)exit($e-

getMessage());elseeexit($e-
getMessage( ));}set_Exception_handler('例外_uncaught_handler');
3. データベース接続コードのソース コード Sky
では、DBException 例外を手動でスローしますが、キャプチャ処理には trycatch を使用しません。例外は PHP カスタム例外ハンドラーの例外_uncaught_handler によって処理されます。 () 関数処理: $this-resConn=mysql_connect
($CONFIGS['db_host'],$CONFIGS['db_user'],$CONFIGS['db_pwd']);if(false==is_resource($this-resConn) )thrownewDBException( 'データベース接続に失敗しました。 '.mysql_error($this-resConn)); 4. ビジネス ロジックの概要:
if(0!=strcmp($curAlbum-
interest_id,$it))
thrownewNotFoundException('Sorry 、あなたが訪問しています アルバムは存在しません');





http://www.bkjia.com/PHPjc/870653.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/870653.html

技術記事

PHP の組み込み例外処理クラスを拡張します。PHP の組み込み例外処理は、c...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。