ホームページ  >  記事  >  バックエンド開発  >  PHP 開発スクール: Pear のエラー処理を詳しく見る_PHP チュートリアル

PHP 開発スクール: Pear のエラー処理を詳しく見る_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:33:47708ブラウズ


多くのプログラムはすでに PEAR パッケージを使用しています。多くの PHP (現在の主流の開発言語として) プログラマーは、多かれ少なかれ PEAR でのエラー処理に精通しています。ただし、このメカニズムは PEAR パッケージに限定されません。誰でもクラスやプログラムでこれらのメソッドを使用できます。 この記事は 2 つの部分に分かれており、最初にエラー処理用のクラス内の関数を見ていき、次に PEAR エラー処理メカニズムに基づいてエラーを処理する方法を見ていきます。

サンプルクラスは cvs2db と呼ばれるもので、CSV ファイルからデータベーステーブルにデータを挿入します。データは手書きである可能性があるため、挿入前にデータを検証する必要があります。郵便番号を実装します。関数 import() は、読み取り、チェック、挿入の作業を完了し、破損したレコードの数を返します。戻り値が 0 より大きい場合は、exportUnvalid() を使用して、問題のあるレコードセットを新しい CSV ファイルに書き込むことができます。典型的な使用法は次のとおりです:

(現在の主流の開発言語として)
$cd = new csv2db(); $dsn = MySQL
(PHPとの最良の組み合わせ)
:/ /root@localhost/ csv2db; if( 0 < $cd->import("./dat.csv", $dsn, address)) { $cd->exportUnvalid("./dat2.csv" );
}
?>

考えられるエラーは次のとおりです:

インポートする CSV ファイルが存在しない、
データベースへの接続に失敗しました、
レコードセットが破損しており、CSV エクスポート ファイルを作成できません。

エラーメッセージを提供する古典的な解決策では、次のようなコードを書くかもしれません:

(現在の主流の開発言語として)
$cd = new csv2db(); $dsn = MySQL
( 最高PHP との組み合わせ)
://root@localhost/csv2db; $result = $cd->import("./dat.csv", $dsn, address) switch($result) {
case FILE_NOT_OPENED:
...
break;
case DATABASE_ERROR:
...
break;
default:
if(0 < $result) {
$cd->exportUnvalid("./dat2.csv") ;
} else {
echo each thing ok!
}
}
?>
これは短いスクリプトでは受け入れられ、一般的ですが、エラー処理が常に懸念される大規模なプログラムではそうではありません。従来の可能性では、クラス作成者が最終決定を下す必要があります。ほとんどの場合、決定は長期的な使用や再利用可能なコードではなく、その時点でのクラスの呼び出しに基づいて行われます。柔軟なエラー処理メカニズムは再利用可能なコードの重要な部分であり、PEAR Error API はそのような十分にテストされたメカニズムの 1 つです。


ユーザーから見たクラス
これらの 2 つの関数に加えて、このクラスは、一連のエラー処理関数と、ローカライズされたエラー メッセージという特別な機能を備えた DB2CVS_Error と呼ばれる独自のエラー オブジェクトを提供します。
それでは、エラーが発生したときにクラスの動作を制御する方法を説明します。


ローカルエラー処理とグローバルエラー処理
エラー処理は setErrorHandling() で管理します; この関数は 2 つの引数を取ります: 1 つ目はエラー モード、2 つ目 (オプション) の引数はエラー モード固有のオプションです。たとえば、setErrorHandling(PEAR_ERROR_PRINT, このエラーは %s で発生しました) や setErrorHandling(PEAR_ERROR_TRIGGER, E_USER_WARNING) などです。
この関数の呼び出し方法は、一般的な動作で最も重要です: static か Entity です。クラス cvs2db では、これらの呼び出しはすべて同じ構造を持ち、クラスのエラー モードを設定します。

// インスタンスごと
$cd = new csv2db();>setErrorHandling (PEAR_ERROR_DIE):
// static
CVS2DB::setErrorHandling(PEAR_ERROR_DIE);
PEAR::setErrorHandling(PEAR_ERROR_DIE);

どちらも同じ結果になる場合、違いは何でしょうか?エンティティ呼び出しはそのクラスに対してのみ設定されますが、静的呼び出しは PEAR_Error を使用するすべてのクラス、またはそのクラスから派生したすべてのクラスに対して機能します。これは最初の静的コマンド CVS2DB::setErrorHandling(PEAR_ERROR_DIE) にも影響しますが、影響を受けるのは cvs2db クラスのみであるように見えます。

概要: コマンドをエンティティ関数として使用すると、このエンティティに対してのみエラー モード (ローカル) が設定され、静的関数として呼び出すと、スクリプト全体のエラー モード (グローバル) が設定されます。

setErrorHandling() と raiseError()

どちらの関数も静的に呼び出すことも、エンティティの関数として呼び出すこともできます。組み合わせが互いにどのような影響を与えるかを覚えておくことが重要です。

基本的に: setErrorHandling() の静的呼び出しは、raiseError() の静的呼び出しにのみ影響します - エンティティ関数としての setErrorHandling() は、静的関数呼び出しとしての raiseError() にのみ影響します。csv2db クラスでは、$this->raiseError(...) を使用するため、 csv2db::setErrorHandling() を使用してエラー モードを設定することは不可能です。 Wen Tian はこの問題を解決するためのちょっとしたトリックを持っています - raiseError() を書き換えます:

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/508600.html技術記事多くのプログラムはすでに PEAR パッケージを使用しています。多くの PHP (現在の主流の開発言語として) プログラマーは、多かれ少なかれ PEAR でのエラー処理に精通しています。しかし、この仕組みはPEAに限ったものではありません...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。