前に述べたように、PEAR は特定のカテゴリに従って PEAR アプリケーション コード ベースを管理し、PEAR コードを適切なディレクトリに整理して、他の人が結果を簡単に取得して共有できます。 PEAR は単なるコード リポジトリではなく、標準でもあります。この標準を使用して PHP コードを作成すると、プログラムの可読性と再利用性が向上し、エラーの可能性が減ります。 PEAR は、デストラクターやエラー キャッチなどの関数を実装する 2 つのクラスを提供することでフレームワークを構築します。これらの関数は継承を通じて使用できます。
PEAR のコーディング ルールには、インデント ルール、制御構造、関数呼び出し、関数定義、コメント、インクルード コード、PHP タグ、ファイル ヘッダー コメント ブロック、CVS タグ、URL サンプル、および定数の名前付けが含まれます。以下に簡単に紹介します。
インデントのルール:
PEAR ではコードをインデントするために 4 つのスペースが必要ですが、TAB は使用されません。 VIM を使用する場合は、~/.vimrc に次の設定を追加します。
シフト幅=4を設定します
タブストップ=4を設定します
Emacs/XEmacs を使用する場合は、indent-tabs-mode を nil に設定する必要があります。
ただし、私のように (X)Emacs を使用して PHP ファイルを編集したい場合は、PHP-MODE をインストールすることを強くお勧めします。そうすれば、PEAR コードを作成するときにインデント スタイルが自動的に調整されます。もちろん、PHP にはさまざまな機能があります。 MODE 非常に優れた機能で、リソースリストから PHP-MODE の最新バージョンをダウンロードできます。
制御構造:
ここで言及する制御構造には、if for while スイッチなどが含まれます。コントロール構造の場合は、関数呼び出しと混同されないように、キーワード (if for .. など) の後にスペースを入れ、その後にコントロールの括弧を置く必要があります。また、中括弧 {} を使用するようにしてください。たとえそれが構文的にオプションであっても、可能な限り完全に。これにより、将来新しいコード行を追加する必要がある場合に論理的な混乱やエラーが発生するのを防ぐことができます。以下に例を示します。 if ((条件 1) && (条件 2)) {
ステートメント 1;
}esleif ((条件 3) || (条件 4)) {
ステートメント 2;
}それ以外 {
ステートメント 3;
}
関数呼び出し:
関数呼び出しの場合、関数名と左括弧 ( () の間にスペースがあってはなりません。関数パラメータの場合、区切りのカンマと次のパラメータの間に同じスペースがあり、最後のパラメーターの間にスペースがあってはなりません。パラメータと閉じ括弧は次のとおりです。 $result = foo($param1, $param2, $param3);
不規則な書き込み:
$result=foo ($param1,$param2,$param3);
$result=foo( $param1,$param2, $param3 );
さらに、関数の戻り結果を代入する場合は、等号と代入変数の間にスペースを入れる必要があります。同時に、関連する代入ステートメントが連続している場合は、適切なスペースを追加して整列させます。 $result1 = $foo($param1, $param2, $param3); のようにします。
$var2 = $foo($param3);
$var3 = $foo($param4, $param5);
関数定義:
関数定義は、「1 つの真中括弧」規則に従います。 function connect(&$dsn, $persistent = false){
if (is_array($dsn)) {
$dsninfo = &&dsn;
} それ以外 {
$dsninfo = DB::parseDSN($dsn);
}
if (!$dsninfo || !$dsninfo['phptype']) {
$this->raiseError() を返します。
}
true を返します。
}
上に示したように、オプションのパラメーターはパラメーター リストの最後に置く必要があり、常に意味のある関数値を返そうとします。
コメントに関して:
クラスのオンライン ドキュメントの場合は、JavaDoc と同様に、PHPDoc によって変換できる必要があります。 PHPDoc も PEAR アプリケーションです。詳細については、 http://www.phpdoc.de/にアクセスしてください。クラスのオンライン ドキュメントに加えて、ドキュメント以外のコメントを使用してコードを説明することをお勧めします。 。次に、コードがどのように動作するかを忘れないよう、このコードに簡単なコメントを付けた方がよいでしょう。コメント形式には、C の /* */ と C++ の // の両方が適しています。ただし、Perl やシェルの # コメント メソッドは使用しないでください。
コードが含まれています:
クラス ファイルを無条件にインクルードする必要がある場合は常に、require_once を使用する必要があります。クラス ファイルを条件付きでインクルードする必要がある場合は、 include_once を使用する必要があります。これにより、インクルードするファイルが 1 回だけインクルードされることが保証されます。同じファイルリストを共有するため、require_once にファイルが含まれると、include_once に同じファイルが再度含まれることはなくなり、その逆も同様になります。
PHP コードのマークアップ:
PHP コードを単に使用するのではなく、常に定義することで、PEAR の互換性が確保され、クロスプラットフォームの移植が容易になります。
ファイルヘッダーのコメント宣言:
PEAR コア リリースに含める必要があるすべての PHP コード ファイルについて、ファイルの先頭に次のコメント ステートメントを追加する必要があります: /* vim: set Expandtab tabstop=4 shftwidth=4: */
// +---------------------------------------------- --- -----------------------+
// | PHP バージョン 4.0 |
// +---------------------------------------------- --- -----------------------+
// | 著作権 (c) 1997、1998、1999、2000、2001 PHP グループ |
// +---------------------------------------------- --- -----------------------+
// | このソース ファイルには PHP ライセンスのバージョン 2.0 が適用されます。
// | これはファイル LICENSE 内のこのパッケージにバンドルされており、 |
// | ワールドワイドウェブから入手可能 |
// | http://www.php.net/license/2_02.txt |
// | PHP ライセンスのコピーを受け取っていない場合 |
// | ワールドワイドウェブ経由で入手してください。 | にメモを送ってください。
// |[email protected]すぐにコピーをお送りします。
// +---------------------------------------------- --- -----------------------+
// | 著者: 元の著者 |
// | あなたの名前 |
// +---------------------------------------------- --- -----------------------+
//
// $ID$
PEAR コア コード ベースにないファイルの場合は、ファイルの先頭に著作権、ライセンス、作成者などを示す同様のコメント ブロックを追加することをお勧めします。同時に、VIM の MODELINE を最初の行に追加して、PEAR のコード スタイルを VIM で維持できるようにします。
CVS マークアップ:
上記のように、各ファイルに CVS ID タグを追加します。編集または変更するファイルにこのタグがない場合は、追加するか、元のファイルの同様の表現 (「最終更新日」など) に置き換えてください。 )
URL サンプル:
RFC 2606 に従い、すべての URL 例として「 www.example.com 」を使用できます。
定数の名前付け:
定数は可能な限り大文字で記述し、理解しやすくするためにアンダースコアを使用して各単語を区切ります。同時に、定数が配置されているパッケージ名またはクラス名にプレフィックスを付ける必要があります。たとえば、Bug クラスの定数は Bug_ で始まる必要があります。上記はPEARのコーディングルールです。詳細なコーディングルールについては、PEARのCODING_STANDDARDファイルの説明を参照してください。これらのコーディング ルールをより深く理解するには、既存の PEAR コア モジュールのコードを参照することもできます。
PEAR を使ってみる
PEAR の使用は非常に簡単で、次のように独自の PEAR プログラムを定義するだけです。
クラス your_class_name は PEAR を拡張します{
クラス定義...
}
もちろん、上記の PEAR コーディング規則に従う必要があります。そうすれば、クラス内でやりたいことを実装できます。次に、これについて説明します。実際、PEAR には 2 つの事前定義クラスが用意されています。 PEAR: これは PEAR の基本クラスであり、すべての PEAR 拡張機能はそれを継承および派生する必要があります。 PEAR_Error: PEAR のエラー処理基本クラス。独自のエラー処理クラスを派生することを選択できます。
一般に、PEAR のインスタンスを直接作成するのではなく、新しいクラスを自分で派生させて、この新しいクラスのインスタンスを作成する必要があります。 PEAR は基本クラスとして、いくつかの便利な関数を提供します。最も重要なものはデストラクターとエラー処理
デストラクターです。
PHP はコンストラクターをサポートしますが、デストラクターはサポートしません。ただし、PHP には、スクリプトが終了する前に登録された関数をコールバックできる register_shutdown_function() 関数が用意されています。そのため、PEAR はこの機能を利用してデストラクターのシミュレーションを提供します。 mypear という PEAR のサブクラスがある場合、mypear クラスで関数名にクラス名を加えたもの、_mypear() を定義できます。この関数はこのクラスのデストラクターです。ただし、このデストラクターは C++ のデストラクターとは異なり、オブジェクトの削除時に実行されるのではなく、結局のところ、これは単なるシミュレーションです。 register_shutdown_function() が使用されるため、出力された情報はデストラクターでブラウザーに返されません。さらに、コンストラクターでは、その親クラスのコンストラクターを呼び出す必要があります。これは、PHP が親クラスのコンストラクターを自動的に呼び出すことがないためです。デストラクターは、PEAR のコンストラクターに登録する必要があります。 PEAR ソースコード: function PEAR() {
if (method_exists($this, "_".get_class($this))) {
グローバル $_PEAR_destructor_object_list;
$_PEAR_destructor_object_list[] = &this;
}
if ($this->_debug) {
printf("PEAR コンストラクターが呼び出されました。クラス = %sn",
get_class($this));
}
……
関数 _PEAR_call_destructors() {
グローバル $_PEAR_destructor_object_list;
if (is_array($_PEAR_destructor_object_list) && sizeof($_PEAR_destructor_object_list)) {
リセット($_PEAR_destructor_object_list);
while (list($k, $objref) = each($_PEAR_destructor_object_list)) {
$destructor = "_".get_class($objref);
if (method_exists($objref, $destructor)) {
$objref->$destructor();
}
}
//登録されているオブジェクトリストをクリアし、
//繰り返し呼び出しを防止する
$_PEAR_destructor_object_list = array();
}}
....
register_shutdown_function("_PEAR_call_destructors");
上記のコードは、PEAR がコンポーネント関数でデストラクターを実装する方法を示しています。現在のクラスにデストラクターがあるかどうかを確認し、存在する場合は、現在のクラスの参照が _In PEAR_call_destructors のグローバル リストに追加されます。 、グローバル リスト内の各要素に対応するデストラクターがあるかどうかを確認し、存在する場合はそれを呼び出し、最後にグローバル リストをクリアします。
PEAR.php のコードの最後の行で、 register_shutdown_function("_PEAR_call_destructors") を呼び出して _PEAR_call_destructors を登録します。これにより、スクリプトの実行時に PHP がこの関数をコールバックします。デストラクターを使用すると、ユーザーのリクエストの処理後に終了する前に、必要な「アフターケア」作業を行うことができます。たとえば、開いているファイルを閉じたり、データベースから切断したり、特定のデータをディスクに保存したりできます。
エラー処理
PEAR では、さまざまな方法でエラーを処理できます。単にエラー コードやエラー情報を返すだけでなく、PEAR_Error オブジェクトや PEAR_Error から派生した新しいエラー オブジェクトを返すこともできます。
PEAR のエラー オブジェクトは、特定の出力形式を制限しません。ユーザーにあまり多くの情報を返さずにエラーをキャプチャすることも、エラー情報を出力する場合でも、同時に特別なエラー処理関数を呼び出すこともできます。 HTML 形式を使用することもできます。XML、CSV 形式、または自分で定義したその他の形式を出力することもできます。必要なのは、PEAR_Error から新しいクラスを作成して、このクラスをスローすることだけです。適切な時間にオブジェクトを置きます。
簡単なエラー処理:
PEAR では、最も単純なエラー処理はエラーを「スロー」することです。単に PEAR_Error オブジェクトを作成して返すだけです。簡単な例を次に示します。 function myconnect($host = "localhost", $port = 1080){
$fp = fsockopen($host, $port, $errno, $errstr);
if (!is_resource($fp)) {
新しい PEAR_Error($errstr, $errno) を返します。
}
$fp を返します。
}
$sock = myconnect();
if (PEAR::isError($sock)) {
print "接続エラー: ".$sock->getMessage()."n"
}
上記のコードに示されているように、エラーが発生する可能性のあるコードを実行した後、PEAR の isError を使用してエラーがあるかどうかを検出する必要があり、PEAR_Error の getMessage を使用して最新のエラー メッセージを取得できます。
と raiseError
を使用してください。
PHP4.0.5 以降、PEAR にはさらに 2 つの機能が追加されました。
setErrorHandling($mode, $options = null)
raiseError($message = null、$code = null、$mode = null、$options = null、$userinfo = null)
前者は PEAR のデフォルトのエラー処理モードを設定でき、後者は PEAR_Error オブジェクトを返すラッパー関数です。これは、$mode や $options などのパラメータが省略された場合に、PEAR_Error オブジェクトを直接作成して返すこととは少し異なります。デフォルト値を使用してこの PEAR_Error オブジェクトを作成します。デフォルト値は、setErrorHandling() を使用してカスタマイズできます。
PEAR_エラー
PEAR_Error は PEAR のエラー オブジェクトの基本クラスです。PEAR とは異なり、一般に、作成方法は $error = new PEAR_Error($message, $code, $mode, $options, $) です。 userinfo );
$message はエラー メッセージ、$code はエラーのエラー番号で、最後の 3 つのパラメータは密接に関連しています。
$mode: はエラー処理モードで、次の定数を指定できます。
PEAR_ERROR_RETURN: エラー オブジェクトのみを返します (デフォルト モード)
PEAR_ERROR_PRINT: ビルド関数でこのエラー メッセージを出力しますが、現在のプログラムは引き続き実行されます。
PEAR_ERROR_TRIGGER: PHP のtrigger_error() を使用してエラーをトリガーする場合、エラー処理関数を設定している場合、または PHP のエラー処理レベルを E_USER_ERROR に設定している場合、現在のプログラムは終了します。
PEAR_ERROR_DIE: エラーを出力して終了すると、プログラムは終了します。
PEAR_ERROR_CALLBACK: コールバック関数またはメソッドを使用して現在のエラーを処理すると、プログラムが終了します。
$options: このパラメータは、$mode が PEAR_ERROR_TRIGGER および PEAR_ERROR_CALLBACK の場合にのみ機能します。PEAR_ERROR_TRIGGER の場合、$options は、PHP のtrigger_error の値と一致する 3 つの定数 E_USER_NOTICE、E_USER_WARNING、または E_USER_ERROR のいずれかである必要があります。 $mode が PEAR_ERROR_CALLBACK の場合、$options はコールバックされる関数の名前を含む文字列、または 2 つの要素の配列 (それぞれオブジェクト変数と文字列 (呼び出されるメソッドを示す)) にすることができます。
$userinfo: 追加のユーザー情報を保存します。関連するデバッグ情報をここに入力できます。
PEAR_Error には、PHP ドキュメントには記載されていない一般的に使用されるメソッドがいくつかあります。それらは次のとおりです。
int getMode: 現在のエラー処理モードを整数で返します。
string getMessage: 現在の完全なエラー メッセージ文字列を返します。
mixed getCallback: 現在のコールバック情報を返します。これは、コールバックされる関数の名前、または (オブジェクト、メソッド) の配列です。
int getCode: 整数のエラー コードを返します。
string getType: 間違った型 (現在のクラス名 string) を返します。
string getUserInfo: 追加のユーザー情報文字列を返します。
string getDebugInfo: 内容は上記と同じです。
string toString: エラー処理モード、レベル、エラー情報、エラー コード、関連するコールバック関数などを含む、現在のオブジェクトの詳細な文字列説明を返します。
要約する
と、PEAR の紹介は終わりです。要約すると、PEAR 拡張アプリケーションを作成したい場合は、これを行う必要があります:
require_once "PEAR.php"
class your_pear_extend extends PEAR{} を使用して新しいクラスを定義します。
クラスのコンストラクターで、親クラス PEAR のコンストラクターを呼び出します。 function your_pear_extend{
$this->PEAR();
...
必要
に応じて、デストラクター _your_pear_extend を定義します
必要に応じて、PEAR_Error から独自のエラー処理クラスを派生して、エラー処理モードを設定し、必要に応じてエラーをトリガーします。
エラーを生成する可能性のあるコードを実行した後、PEAR::isError($obj) を使用して、対応するエラーをキャプチャします。
独自の機能を実装します。
PEAR コア リリースには、PHPDoc、Cache、HTML などの優れたアプリケーション モジュールがすでに多数あります。