あなたはすでに PHP のベテランで、優れたコードをたくさん書いているかもしれません。しかし、今それらを現在のプロジェクトに追加したい場合、それは少し難しいでしょうか?友人はあなたのコードをプロジェクトのモジュールとして使用したいと考えていますが、あなたはまったく異なるコーディング スタイルを使用していることに気づきました。友人に適応させるか、書き直すこともできます。
私に従って、PEAR 標準を使用して PHP プログラムを作成してください。あなたのプログラムとコードは、PHP と同様に、他の専門家のコードと簡単に統合されます。より高いエネルギーを生み出すために。
PEAR とは何ですか?
PEAR は、PHP Extension and Application Repository の略称です。これは、PHP 拡張機能とアプリケーションのコード リポジトリです。簡単に言えば、PEAR は PHP の CPAN です。
PEAR を使用する理由?
PHP は非常に優れたスクリプト言語であり、簡潔で効率的です。4.0 のリリースにより、PHP は特にインターネット開発言語として最適な言語の 1 つになったと言えます。中小規模の商用アプリケーションを迅速かつ効率的に開発できる必要がある Web サイト開発者にとって、PHP は推奨言語です。しかし、PHP アプリケーションの数が増加するにつれて、統一された標準やこれらのアプリケーションの効果的な管理が不足しています。そのため、PHP コミュニティが PERL コミュニティの人々と同じようにお互いのコードやアプリケーションを簡単に共有することが困難になっています。 PHP には、CPAN と同じ標準がありません。アプリケーション コード モジュールを分類および管理するための統一コード ベースがありません (PERL に詳しい人なら、CPAN が巨大な PERL 拡張モジュール ウェアハウスであることを知っています。作成されたアプリケーション モジュールは、CPAN の下の適切な分類ディレクトリに配置できます)。もちろん、アプリケーション モジュールを作成するときもガイドラインに従う必要があります。)
このため、PEAR が誕生し、4.04 から PHP コアとともに配布されています。
PEAR は私にどのようなメリットをもたらしますか?
1. 前に述べたように、PEAR は特定のカテゴリに従って PEAR アプリケーション コード ライブラリを管理し、他の人が結果を簡単に取得して共有できます。
2.PEAR は単なるコード リポジトリではなく、標準でもあります。この標準を使用して PHP コードを記述すると、プログラムの可読性と再利用性が向上し、エラーの可能性が減ります。
3.PEAR は、デストラクターやエラー キャッチなどの関数を実装するための 2 つのクラスを提供することでフレームワークを構築します。これらの関数は継承を通じて使用できます。
PERR PEARのコーディングルール
PEARのコーディングルールには、インデントルール、制御構造、関数呼び出し、関数定義、コメント、コードを含む、PHPタグ、ファイルヘッダーのコメントブロック、CVSタグ、URLサンプル、定数の命名が含まれます。 。以下に簡単に紹介します:
インデントのルール:
PEAR はコードをインデントするために 4 つのスペースを使用する必要があり、TAB は使用されません。 VIM を使用する場合は、次の設定を ~/.vimrc に追加します:
set Expandtab
set shftwidth=4
set tabstop=4
Emacs/XEmacs を使用する場合は、indent-tabs-mode を nil に設定する必要があります。
しかし、私のように (X)Emacs を使用して PHP ファイルを編集したい場合は、PHP-MODE をインストールすることを強くお勧めします。そうすれば、PEAR コードを作成するときに、もちろん PHP-MODE によってインデント スタイルが自動的に調整されます。また、多くの優れた機能があり、リソースリストから最新バージョンの PHP-MODE をダウンロードできます。
制御構造:
ここで言及する制御構造には、while スイッチなどの場合が含まれます。コントロール構造の場合は、関数呼び出しと混同されないように、キーワード (if for .. など) の後にスペースを入れ、その後にコントロールの括弧を置く必要があります。また、中括弧 {} を使用するようにしてください。たとえそれが構文的にオプションであっても、可能な限り完全に。これにより、将来新しいコード行を追加する必要がある場合に論理的な混乱やエラーが発生するのを防ぐことができます。以下は例です:
if ((条件1) && (条件2)) {
}esleif ((条件3)
(条件4)) {
}else {
ステートメント3 ;関数呼び出し:
関数呼び出しの場合、関数名と左括弧 ( (、関数パラメーターの場合、区切りカンマと次のパラメーターの間に同じスペースが必要です。最後にスペースは使用できません)パラメータと右括弧の間。以下は標準的な関数呼び出しです。
$result = foo($param1, $param2, $param3);
$result=foo ($param1,$param2,$param3); $param1,$param2, $param3 );
さらに、関数の戻り結果を代入する場合は、等号と代入された変数の間にスペースが必要です。これは一連の関連する For 代入ステートメントであり、次のように適切なスペースを追加して整列させます。
$var2 = $foo($param3); $var3 = $foo($param4, $param5);
関数定義:
関数定義は「1 つの真中括弧」規則に従います:
function connect(&$dsn, $persistent = false)
{
if (is_array($ dsn)) {
$dsninfo = &&dsn;
} else {
$dsninfo = DB::parseDSN($dsn)
}
if (!$dsninfo
!$dsninfo['phptype']) {
return $ this->raiseError();
}
return true;
上記のように、オプションのパラメータはパラメータ リストの最後にある必要があり、常に意味のある関数値を返そうとします。
コメントについて:
クラスのオンラインドキュメントの場合、JavaDoc と同様に、PHPDoc によって変換できる必要があります。 PHPDoc も PEAR アプリケーションです。詳細については、http://www.phpdoc.de/ にアクセスしてください。クラスのオンライン ドキュメントに加えて、ドキュメント以外のコメントを使用してコードを説明することをお勧めします。 。次に、コードがどのように動作するかを忘れないよう、このコードに簡単なコメントを付けた方がよいでしょう。コメント形式の場合、C の /* */ と C++ の // はどちらも適切ですが、Perl やシェルの # コメント メソッドは使用しないでください。
インクルードコード:
クラスファイルを無条件にインクルードする必要がある場合は、require_once を使用する必要があります。これにより、インクルードするファイルが 1 回だけインクルードされるようになります。これら 2 つのステートメントは同じファイル リストを共有するため、require_once がファイルをインクルードすると、include_once が同じファイルを再度インクルードすることはなくなり、その逆も同様です。
PHP コードのマークアップ:
単に > を使用するのではなく、常に を使用してください。これにより、PEAR の互換性が確保され、クロスプラットフォームの開発にも役立ちます。
ファイルヘッダーのコメントステートメント:
PEAR コアリリースに含める必要があるすべての PHP コードファイルについて、ファイルの先頭に次のコメントステートメントを追加する必要があります:
/* vim: set Expandtab tabstop=4シフト幅=4: * /
// +-------------------------------------- ----------- ------------------------+
// PHP バージョン 4.0 | / +---------------------- -------------------------------------- ----------- -----------+
// | 著作権 (c) 1997, 1998, 1999, 2000, 2001 PHP グループ | ----------- -------------------------------------- ----------- --------+
// | このソース ファイルには、これにバンドルされている PHP ライセンスのバージョン 2.0 が適用されます。パッケージはファイル LICENSE にあり、 |
// からアクセスできます。 / | PHP ライセンスのコピーを受け取っておらず、ワールドワイドウェブから取得できない場合は、
// |すぐにコピーをお送りいたします
// +------------------------------------- -------------- -----------------------+
// 著者: オリジナル著者 | // | あなたの名前 |
// +--- ----------------------------------- -------------- ------------------+
//
// $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 には 2 つの事前定義クラスが用意されています。
PEAR: これは PEAR の基本クラスであり、すべての PEAR 拡張機能はそこから継承および派生する必要があります。
PEAR_Error: PEAR のエラー処理基本クラス。独自のエラー処理クラスを派生することを選択できます。
一般に、PEAR のインスタンスを直接作成するのではなく、自分で新しいクラスを派生させ、この新しいクラスのインスタンスを作成する必要があります。 PEAR は基本クラスとして、いくつかの便利な関数を提供します。最も重要なものはデストラクターとエラー処理です
Destructor
PHP はコンストラクターをサポートしますが、デストラクターはサポートしません。ただし、PHP は register_shutdown_function() を提供します。この関数は登録された関数をコールバックできます。スクリプトが終了する前に関数が実行されるため、PEAR はこの機能を利用してデストラクターのシミュレーションを提供します。 mypear という PEAR のサブクラスがある場合、mypear クラスで関数名にクラス名を加えたもの、_mypear() を定義できます。この関数はこのクラスのデストラクターです。ただし、このデストラクターは C++ のデストラクターとは異なり、オブジェクトの削除時に実行されるのではなく、結局のところ、これは単なるシミュレーションです。 register_shutdown_function() が使用されるため、出力された情報はデストラクターでブラウザーに返されません。さらに、コンストラクターでは、その親クラスのコンストラクターを呼び出す必要があります。これは、PHP が親クラスのコンストラクターを自動的に呼び出すことがないためです。デストラクターは、PEAR のコンストラクターに登録する必要があります。 PEAR ソースコード: <br>function PEAR() { <br>if (method_exists($this, "_".get_class($this))) { <br>global $_PEAR_destructor_object_list[] = &&this; <br>if ($this->_debug) { <br>printf("PEAR コンストラクターが呼び出されました、class=%sn", <br>get_class($this)); <br>} <br>.... <br>function _PEAR_call_destructors() { <br>global $ _PEAR_destructor_object_list; <br>if (is_array($_PEAR_destructor_object_list) && sizeof($_PEAR_destructor_object_list)) { <br>reset($_PEAR_destructor_object_list) <br>while (list($k, $objref) = each($_PEAR_destructor_object_list); <br>$destruct または = " _ ".get_class($objref); <br>if (method_exists($objref, $destructor)) { <br>$objref->$destructor(); <br>} <br>} <br>//登録されたオブジェクトリストをクリアします、<br><br>//繰り返しの呼び出しを防止する <br><br>$_PEAR_destructor_object_list = array(); <br><br>} <br><br>.... <br>
上記の段落は、PEAR の使用方法を示すコードですデストラクターを実装するには? コンポーネント関数で、現在のクラスにデストラクターがあるかどうかを確認します。存在する場合は、現在のクラスの参照が _PEAR_call_destructors のグローバル リストに追加されます。リスト内の各要素に対応するデストラクターがあるかどうかを判断し、存在する場合はそれが呼び出され、最後にグローバル リストがクリアされます。
PEAR.php のコードの最後の行で、 register_shutdown_function("_PEAR_call_destructors") を呼び出して _PEAR_call_destructors を登録します。これにより、スクリプトの実行時に PHP がこの関数をコールバックします。デストラクターを使用すると、ユーザーのリクエストの処理後に終了する前に、必要な「アフターケア」作業を行うことができます。たとえば、開いているファイルを閉じたり、データベースから切断したり、特定のデータをディスクに保存したりできます。
エラー処理
PEAR を使用すると、さまざまな方法でエラーを処理できます。単にエラー コードやエラー情報を返すだけでなく、PEAR_Error オブジェクト、または PEAR_Error オブジェクトから派生した新しいオブジェクトを返すこともできます。
PEAR のエラー オブジェクトは、特定の出力形式を制限しません。ユーザーにあまり多くの情報を返さずにエラーをキャプチャすることも、エラーが発生した場合でも同時に特別なエラー処理関数をコールバックすることもできます。また、PEAR_Error から新しいクラスを派生し、この新しいクラスを作成して「スロー」するだけで、HTML 形式で出力することもできます。クラスのオブジェクトで十分です。
簡単なエラー処理:
PEAR では、最も簡単なエラー処理はエラーを「スロー」することです。単に PEAR_Error オブジェクトを作成して返すだけです。簡単な例を次に示します。 <br>function myconnect($host = "localhost", $port = 1080) <br>{ <br>$fp = fsockopen($host, $port, $errno, $errstr); (!is_resource($fp)) { <br>return new PEAR_Error($errstr, $errno) <br>} <br>$sock = myconnect(); ) { <br>print "connect error: ".$sock->getMessage()."<BR>n" <br>} <br>
上記のコードに示すように、実行中に発生する可能性があります。エラー コードを確認するには、PEAR の isError を使用してエラーがあるかどうかを検出する必要があります。また、PEAR_Error の getMessage を使用して最新のエラー メッセージを取得できます。注: 重要な場所では必ず PEAR::isError を使用してください
raiseError を使用してください
PHP4.0.5 以降、PEAR にはさらに 2 つの関数があります:
setErrorHandling($mode, $options = null)
raiseError($message = null , $ code = null, $mode = null,$options = null, $userinfo = null)
前者はPEARのデフォルトのエラー処理モードを設定でき、後者はPEAR_Errorオブジェクトを返すラッパー関数であり、直接PEAR_Error オブジェクトを作成して返す場合、$mode や $options などのパラメータを省略すると、デフォルト値が使用されて PEAR_Error オブジェクトが作成されます。これらのデフォルト値をカスタマイズするには、setErrorHandling() を使用します。
PEAR_Error
PEAR_Error は PEAR のエラー オブジェクトの基本クラスです。一般に、PEAR_Error のインスタンスを直接作成できます。作成方法は次のとおりです。
$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 ドキュメントには記載されていない一般的に使用されるメソッドがいくつかあります。それらをここで 1 つずつリストします。
int getMode: 現在のエラー処理モードを整数で返します。
string getMessage: 現在の完全なエラー メッセージ文字列を返します。
mixed getCallback: 現在のコールバック情報を返します。これは、コールバックされる関数の名前、または (オブジェクト、メソッド) の配列である可能性があります。
int getCode: 整数のエラー コードを返します。
string getType: 間違った型 (現在のクラス名 string) を返します。
string getUserInfo: 追加のユーザー情報文字列を返します。
string getDebugInfo: 内容は上記と同じです。
string toString: エラー処理モード、レベル、エラー情報、エラー コード、関連するコールバック関数などを含む、現在のオブジェクトの詳細な文字列説明を返します。
まとめ
これでPEARの紹介は終わりです。要約すると、PEAR の拡張アプリケーションを作成したい場合は、次のことを行う必要があります:
require_once "PEAR.php"
クラス your_pear_extend extends PEAR{} を使用して新しいクラスを定義します。
クラスのコンストラクターで、親クラス PEAR のコンストラクターを呼び出します。
function your_pear_extend{
$this->PEAR();
...
}
必要に応じて、デストラクター _your_pear_extend を定義します。
必要に応じて、PEAR_Error から独自のエラー処理クラスを派生します。
エラー処理モードを設定し、必要に応じてエラーをトリガーします。
エラーを生成する可能性のあるコードを実行した後、PEAR::isError($obj) を使用して、対応するエラーをキャプチャします。
独自の関数を実装します。
PHP4.05 の最新の PEAR コア リリースには、PHPDoc、Cache、HTML などの優れたアプリケーション モジュールがすでに多数あります。もちろん、CPAN と比較すると、PEAR はまだ始まったばかりであり、PHP のサポートが必要です。コミュニティの改善と強化に向けた共同の努力により、PHP はますます強力になります。