PEAR 基底クラスは、ほとんどの PEAR クラスで使用される 標準的な機能を提供します。 通常、PEAR クラスのインスタンスを直接生成することはなく、 サブクラス化して使用します。
その主な機能を以下に示します。
シャットダウンリクエストによるオブジェクト "デストラクタ"
エラー処理
ClassName というクラス名で PEAR を継承した場合、 _ClassName (クラス名の前にアンダースコアを付けたもの)というメソッドを定義できます。 このメソッドは、リクエストが完了した時点でコールされます。 これは、オブジェクトを "削除" できるという意味ではデストラクタでは ありませんが、PHP が実行を完了した時点で、 PHP によりオブジェクトのコールバック関数としてコールされるという意味で デストラクタと呼ぶことができます。以下の 例を参照してください。
PEAR 基底クラスは、true/false 値や数値コードといったものに比べ、 より複雑にエラーを渡す手段を提供します。 PEAR エラーはオブジェクトであり、 PEAR_Error クラス、または PEAR_Error を継承したクラスのインスタンスです。
PEAR エラーの設計指針に、ユーザには特定の形式の出力を強制するべきではなく、 場合によっては出力をまったく行わずにエラー処理を可能とするべき、 というものがあります。 これにより、出力形式が HTML 以外(たとえば WML や他の XML 形式)の場合にも、 高度なエラー処理が可能となります。
エラーオブジェクトは、生成時に様々な動作をさせるよう設定することができます。。 たとえば、エラーメッセージを出力する、メッセージを出力して終了する、 PHP の trigger_error() 関数でエラーを発生する、 コールバックを起動する、または、これら何もしない、などです。 これは、通常、PEAR_Error の コンストラクタで指定されます。ただし、すべてのパラメータは任意です。 また、PEAR クラス を基底とする各オブジェクトから生成されるエラーの デフォルト動作を設定することもできます。 エラーオブジェクトの使用法についてはPEAR エラーの例を、詳細については、 PEAR_Error リファレンスを参照してください。
以下の例は、PEAR の "貧乏人のデストラクタもどき" の使用法を示します。 ファイルの中身を保持する簡単なクラスで、オブジェクトにデータを追加すると、 リクエスト終了時にファイルにデータを書き戻すというコードです。
注意 PEAR "デストタクタ" は、PHP のシャットダウン時のコールバック (register_shutdown_function()) を使用します。 そのため、PHP < 4.1 では、PHP が Webサーバで実行されている場合は デストタクタから何も出力できません。 PHP がコマンドラインモードで使用される場合を除き、 デストラクタからの出力は全て失われます。 PHP 4.1 以降では、デストラクタにおいても出力を行うことが可能です。
また、デストラクタを使用する場合は、オブジェクトのインスタンス生成に関する 警告 も参照してください。
次の例は、PEAR のエラー処理機構の別の使用方法を説明するものです。
例 26-2PEAR エラーの例 (1)
|
この例は、fsockopen() 関数のラッパです。 fsockopen が返すエラーコードおよびメッセージを PEAR エラーオブジェクトで返します。 返された値が PEAR エラーかどうか調べるには PEAR::isError() を使用するということに注目してください。
この例での PEAR_Error の実行モードは、エラーオブジェクトを返し、 ユーザ(プログラマ)にその後の処理を託す、というものです。 これは、デフォルトのエラーモードです。
次の例では、エラーモードのデフォルトを設定する方法を示します。
例 26-3PEAR エラーの例 (2)
|
この例では、エラーモードのデフォルトを PEAR_ERROR_DIE に設定しています。 raiseError のコールにあたって、 (3番目のパラメータに)エラーモードを設定していないため、 raiseError はデフォルトのエラーモードを使用し、 fsockopen が失敗するとスクリプトの実行を終了します。
PEAR クラスは、グローバルなデフォルトと "デストラクタ" で使用されるオブジェクトのリストを登録するために いくつかのグローバル変数を使用します。 PEAR クラスに関連するすべてのグローバル変数は、 接頭辞 _PEAR_ を有します。
オブジェクトの中でデフォルトのエラーモードが設定されない場合、 このモードが使用されます。 PEAR_ERROR_RETURN, PEAR_ERROR_PRINT, PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE, PEAR_ERROR_CALLBACK のいずれかに設定できます。
この変数は、直接設定せずに、以下のようにスタティックメソッド PEAR::setErrorHandling() をコールして下さい。
エラーモードが、PEAR_ERROR_TRIGGER の場合、 エラーレベル( E_USER_NOTICE, E_USER_WARNING, E_USER_ERRORのどれか)となります。
この変数は、直接設定せずに、以下のようにスタティックメソッド PEAR::setErrorHandling() をコールして下さい。
エラーが発生した際に options パラメータが指定されておらず また、エラーモードが PEAR_ERROR_CALLBACK の場合、 この変数の値がコールバックとして使用されます。 これにより、エラーモードを一時的に変更しても、 コールバック関数を再度設定せずにコールバックモードに戻ることができます。 関数を示す文字列、もしくは、添字0 にオブジェクト、 添字1にメソッドを有する要素数2 の配列になります。
この場合も、この変数を直接設定せずに、以下のようにスタティックメソッド PEAR::setErrorHandling() をコールして下さい。
コールバック関数を再度指定せずに切替える方法の例を示します。