pear の紹介: pear を使用して次の php プログラムを作成します
内容:
psparとは何ですか
なぜpsparを使用する必要があるのですか?
pps私にどのようなメリットをもたらしますか?
ppear
のコーディングルール
ppearrの使用を開始する
概要
関連リソース
Pan Fan (night Sailer) (nightsailer@hotmail.com)
Beijing Saidi Information Technology Co., Ltd.
2001年6月
私はすでに PHP のベテランであり、素晴らしいコードをたくさん書いてきました。しかし、今それらを現在のプロジェクトに追加したい場合、それは少し難しいでしょうか?友人はあなたのコードをプロジェクトのモジュールとして使用したいと考えていますが、あなたはまったく異なるコーディング スタイルを使用していることに気づきました。友人に適応させるか、書き直すこともできます。
私に従って、pear 標準を使用して PHP プログラムを作成してください。あなたのプログラムとコードは、他の専門家のコードと簡単に統合されます。Pear は、Perl と同じです。より高いエネルギーを生成します。
psprとは
psprとは、php extension and application repository(php エクステンション アンド アプリケーション リポジトリ)の略称です。これは、PHP 拡張機能とアプリケーションのコード リポジトリです。簡単に言えば、pear は PHP の cpan です。
なぜ梨を使うのですか?
php は非常に優れたスクリプト言語で、簡潔で効率的です。4.0 のリリースにより、php は特にインターネット開発に最適な言語の 1 つになったと言えます。中小規模の商用アプリケーションを迅速かつ効率的に開発できる必要がある Web サイト開発者にとって、PHP は推奨言語です。しかし、PHP アプリケーションの数が増加するにつれて、これらのアプリケーションに対する統一された標準と効果的な管理が不足しています。そのため、PHP コミュニティが Perl コミュニティの人々と同じようにお互いのコードやアプリケーションを簡単に共有することが困難になっています。 PHP には、Cpan のようなコードとアプリケーションを共有する機能がありません。アプリケーション コード モジュールを分類および管理するための統合コード ベース (Perl に詳しい人なら、cpan が巨大な Perl 拡張モジュール ウェアハウスであることを知っています。作成されたアプリケーション モジュールは、適切な分類に配置できます)。もちろん、アプリケーションモジュールを作成するときもガイドラインに従う必要があります。)
このため、pear が登場し、4.04 からは で配布されました。 PHP コア。
ppsそれは私にどのようなメリットをもたらしますか?
1. 前述したように、pear は特定のカテゴリに従って pear アプリケーション コード ライブラリを管理し、他の人が結果を簡単に取得して共有できます。
2.pear はコード リポジトリであるだけでなく、標準でもあります。この標準を使用して PHP コードを記述すると、プログラムの可読性と再利用性が向上し、エラーの可能性が減ります。
3.pear は、デストラクターやエラー キャッチなどの関数を実装するための 2 つのクラスを提供することで、フレームワークを構築します。これらの関数は継承を通じて使用できます。
Pea のコーディング ルール
pear のコーディング ルールには、インデント ルール、制御構造、関数呼び出し、関数定義、コードを含むコメント、php タグ、ファイル ヘッダー内のコメント ブロック、CVS タグ、URL サンプル、これら 11 の側面の定数命名が含まれます。以下に簡単に紹介します:
インデントのルール:
Pear はコードをインデントするために 4 つのスペースを使用する必要があり、タブは使用されません。 vim を使用する場合は、~/.vimrc に次の設定を追加します:
set Expandtab
set shftwidth=4
emacs/xemacs を使用する場合は、indent-tabs-mode を nil に設定する必要があります。
ただし、私のように (x)emacs を使用して php ファイルを編集したい場合は、php-mode をインストールすることを強くお勧めします。これにより、Pear コードを作成するときに、インデント スタイルが自動的に調整されます。また、多くの優れた機能があり、リソース リストから php-mode の最新バージョンをダウンロードできます。
制御構造:
ここで言及する制御構造には、if for while スイッチなどが含まれます。コントロール構造の場合は、関数呼び出しと混同されないように、キーワード (if for .. など) の後にスペースを入れ、その後にコントロールの括弧を置く必要があります。また、中括弧 {} を使用するようにしてください。たとえそれが構文的にオプションであっても、可能な限り完全に。これにより、将来新しいコード行を追加する必要がある場合に論理的な混乱やエラーが発生するのを防ぐことができます。以下に例を示します。
if ((条件 1) && (条件 2)) {
ステートメント 1;
}esleif ((条件 3) || (条件 4)) {
ステートメント 2;else {
ステートメント 3; ;
}
関数呼び出し:
関数呼び出しの場合、関数名と左括弧の間にスペースがあってはなりません ( (、関数パラメータの場合、区切りのカンマと次のパラメータの間には同じスペースが必要です)最後 パラメータと右括弧の間にスペースを入れることはできません。 以下は、標準の関数呼び出しです。
$result = foo($param1, $param2, $param3);
不規則な書き方です。 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;
} 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 shftwidth =4: */
// +----------------------------------------------------- -------- ------------------------+
// php バージョン 4.0 |
// +---- ---------------------------------------------------- --------- -------+
// | 著作権 (c) 1997, 1998, 1999, 2000, 2001 the php グループ |
// +-------- ---------------------------------------------------- --------- ---+
// | このソース ファイルは、ファイル ライセンスでこのパッケージにバンドルされている php ライセンスのバージョン 2.0 の対象です |
| // | PHP ライセンスのコピーを受け取っていない場合は、ワールドワイドウェブから |
// |http://www.php.net/license/2_02.txt で入手できます。 |
// | ワールドワイドウェブから入手できない場合は、|
// |license@php.net までご連絡ください。すぐにコピーを郵送いたします |
// +--- ---------------------------------------------------- --------- --------+
// | 著者: 原作者 |
// | お名前 |
// +---------- ---------------------------------------------------- --------+
//
// $id$
Pear コアのコード ベースにないファイルの場合は、このような同様のコメント ブロックをファイルの先頭に置くことをお勧めします。著作権、契約、作成者などを示すファイル。同時に、vim のモードラインも最初の行に追加され、pear のコード スタイルを vim で維持できるようになります。
上記のように、各ファイルに cvs id タグを追加します。編集または変更するファイルにこのタグがない場合は、追加するか、元のファイルの同様の表現 (「 など)」に置き換えてください。最終更新日」など)
URL サンプル:
rfc 2606 を参照し、すべての URL サンプルとして「http://www.example.com」を使用できます。
定数の名前付け:
理解を容易にするために、定数はできるだけ大文字にする必要があります。各単語はアンダースコアを使用して区切ります。同時に、定数が配置されているパッケージ名またはクラス名にプレフィックスを付ける必要があります。たとえば、バグ クラスの定数は bug_ で始まる必要があります。以上がpearのコーディングルールです。詳細なコーディングルールはpearのcoding_standardファイルの説明を参照してください。これらのコーディング ルールをより深く理解するために、既存の Pear コア モジュールのコードを参照することもできます。
p・ar
pearの使用を開始する
pearの使用は非常に簡単で、次のように独自のpearプログラムを定義するだけです:
require_once "pear.php";
class your_class_name extends 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 Source を参照してください。コード: <br>function pear() {<br>if (method_exists($this, "_".get_class($this))) {<br>global $_pear_destructor_object_list;<br>$_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>$destructor = "_" .get_class($objref);<br>if (method_exists($objref, $destructor)) {<br>$objref->$destructor();<br>}<br>}<br>//登録されたオブジェクトのリストをクリアします、<br>/ /繰り返しの呼び出しを防止します<br>$_pear_destructor_object_list = array();<br>}<br>}<br>....<br>register_shutdown_function("_pear_call_destructors");<br>
上記のコードは、pear がコンポーネント関数で Functional の構造化を実装する方法を示しています。現在のクラスにデストラクターがあるかどうかを確認します。存在する場合は、現在のクラスの参照がグローバル リストに追加され、このグローバル リスト内の各項目が対応するデストラクターがあるかどうかがチェックされます。要素の場合、その要素が呼び出され、最後にグローバル リストがクリアされます。
pear.php のコードの最後の行で、 register_shutdown_function("_pear_call_destructors") を呼び出して _pear_call_destructors を登録します。これにより、スクリプトの実行時に php がこの関数をコールバックします。デストラクターを使用すると、ユーザーのリクエストの処理後に終了する前に、必要な「アフターケア」作業を行うことができます。たとえば、開いているファイルを閉じたり、データベースから切断したり、特定のデータをディスクに保存したりできます。
エラー処理
Pear では、さまざまな方法でエラーを処理できます。単にエラー コードやエラー情報を返すだけでなく、pear_error オブジェクト、または pear_error オブジェクトから派生した新しいオブジェクトを返すこともできます。
pear のエラー オブジェクトは、特定の出力形式を制限しません。ユーザーにあまり多くの情報を返さずにエラーをキャプチャすることも、エラー メッセージが返されたとしても、同時に特別なエラー処理関数をコールバックすることもできます。また、xml 形式、csv 形式、または自分で定義した他の形式を出力することもできます。pear_error から新しいクラスを作成して「スロー」するだけです。適切な時間で十分です。
簡単なエラー処理:
pear では、最も簡単なエラー処理はエラーを「スロー」することです。単純に pear_error オブジェクトを作成して返すだけです。以下に簡単な例を示します: <br>function myconnect($host = "localhost", $port = 1080)<br>{<br>$fp = fsockopen($host, $port, $errno, $errstr);<br> if (!is_resource($fp)) {<br>return new pear_error($errstr, $errno);<br>}<br>return $fp;<br>}<br>$sock = myconnect();<br>if (pear::iserror($sock) ) {<br>print "接続エラー: ".$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 ドキュメントには記載されていない一般的に使用されるメソッドがいくつかあります。それらは次のとおりです。
int getmode: 現在のエラー処理モードを整数で返します。
string getmessage: 現在の完全なエラー メッセージ文字列を返します。
mixed getcallback: 現在のコールバック情報を返します。これは、コールバックされる関数の名前、または (オブジェクト、メソッド) の配列である可能性があります。
int getcode: 整数のエラー コードを返します。
string gettype: 間違った型 (現在のクラス名 string) を返します。
string getuserinfo: 追加のユーザー情報文字列を返します。
string getdebuginfo: 内容は上記と同じです。
string tostring: エラー処理モード、レベル、エラー情報、エラー コード、関連するコールバック関数などを含む、現在のオブジェクトの詳細な文字列説明を返します。
まとめ
これで、梨の紹介は終わりです。要約すると、pear の拡張アプリケーションを作成したい場合は、これを行う必要があります:
require_once "pear.php"
use class your_pear_extend extends pear{} を使用して新しいクラスを定義します。
クラスのコンストラクターで、親クラス pear のコンストラクターを呼び出します:
function your_pear_extend{
$this->pear();
...
}
必要に応じて、destructor_ your_pear_extend を定義します
独自のものを派生します必要に応じて pear_error のエラー処理クラスを使用します。
エラー処理モードを設定し、必要に応じてエラーをトリガーします。
エラーを生成する可能性のあるコードを実行した後、pear::iserror($obj) を使用して、対応するエラーをキャプチャします。
独自の関数を実装します。
最新の pear コア リリース php4.05 には、phpdoc、キャッシュ、html などの優れたアプリケーション モジュールがすでに多数あります...もちろん、cpan と比較すると、pear は始まったばかりであり、php コミュニティの助けが必要です. 人々が協力して改善し、強化することで、php はますます強力になります。
関連リソース
pear ホームページ
php ホームページ
phpdoc ホームページ、pear アプリケーションのソース コードから javadoc に似た API ドキュメントを生成できます
xemacs/emacs の php モード、emacs/xemacs の php 構文サポートを提供し、pear を適切にサポートできますCode style
vim ホームページは非常に優れたエディターであり、php も適切にサポートしています