ホームページ >バックエンド開発 >PHPチュートリアル >PHP の組み込み例外処理クラスを拡張する、PHP の組み込み例外処理_PHP チュートリアル
try コード ブロックでは、実行のために catch コード ブロックにジャンプする前に、throw ステートメントを使用して例外オブジェクトをスローする必要があります。 catch コード ブロック この例外クラスのオブジェクトをキャプチャして使用します。 PHP で提供される組み込み例外処理クラス Exception はすでに非常に優れた機能を備えていますが、場合によっては、より多くの機能を得るためにこのクラスを拡張する必要がある場合があります。したがって、ユーザーはカスタム例外処理クラスを使用して、PHP の組み込み例外処理クラスを拡張できます。次のコードは、組み込み例外処理クラスのどのプロパティとメソッドがサブクラスでアクセス可能で継承可能であるかを示しています。
<?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
>
私も数日前に同僚とこの問題について話し合いました。このように説明してみましょうPHP カスタム例外ハンドラーを使用するいくつかの方法
導入した PHP カスタム例外ハンドラーは、PHP の組み込み例外_uncaught_handler() 関数です。この関数を使用すると、trycatch ブロックによってキャッチされなかった例外を処理するユーザー定義の例外処理関数を設定できます。 次の 4 つのコードは、waylife プロジェクト (非実稼働環境) での私の単純なアプリケーションです。堅牢ではなく、美しくもありませんが、SNS プロジェクトはとっくの昔に消滅しています。
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
true
http://www.bkjia.com/PHPjc/870653.html