pear の紹介: pear を使用して次の php プログラムを作成します
内容:
梨とは何か
なぜ梨を使うのか?
梨は私にどのような恩恵をもたらしてくれるでしょうか?
Pear エンコード ルールが Pear の使用を開始
関連リソースの概要と著者の紹介
パンファン (ナイトセーラー) ( [email protected] )
北京賽迪信息技術有限公司
2001 年 6 月の時点では、あなたはおそらくすでに PHP のベテランであり、素晴らしいコードをたくさん書いていたでしょう。しかし、今それらを現在のプロジェクトに追加したい場合、それは少し難しいでしょうか?友人はあなたのコードをプロジェクトのモジュールとして使用したいと考えていますが、あなたはまったく異なるコーディング スタイルを使用していることに気づきました。友人に適応させるか、書き直すこともできます。
私に従って、Pear 標準を使用して PHP プログラムを作成してください。あなたのプログラムとコードは、他の専門家のコードと簡単に統合できます。Pear は、Perl と同様に、より高い出力を生成します。
ペアとは
Pear は、php 拡張機能およびアプリケーション リポジトリの略称です。これは、PHP 拡張機能とアプリケーションのコード リポジトリです。簡単に言えば、pear は PHP の cpan です。
なぜ梨を使うのか?
PHP は非常に優れたスクリプト言語であり、簡潔で効率的です。4.0 のリリースにより、PHP は動的 Web サイトの開発に最適なインターネット開発言語の 1 つになったと言えます。中小企業のビジネス アプリケーションを迅速かつ効率的に開発できる必要がある開発者にとって、PHP は最適な言語です。しかし、PHP アプリケーションの数が増加するにつれて、これらのアプリケーションに対する統一された標準と効果的な管理が不足しています。そのため、PHP コミュニティが、Perl コミュニティの人々と同じようにお互いのコードやアプリケーションを簡単に共有することが困難になっています。 PHP には、Cpan のようなコードとアプリケーションを共有する機能がありません。アプリケーション コード モジュールを分類および管理するための統合コード ベース (Perl に詳しい人なら、cpan が巨大な Perl 拡張モジュール ウェアハウスであることを知っています。作成されたアプリケーション モジュールは、適切な分類に配置できます)。ディレクトリは cpan の下にあり、他の人も非常に簡単に再利用できます。もちろん、アプリケーション モジュールを作成するときはガイドラインに従う必要もあります)。
このため、pear が登場し、4.04 からは PHP コアとともに配布されるようになりました。
梨は私にどのような恩恵をもたらしてくれるでしょうか?
1. 前述したように、pear は特定のカテゴリに従って pear アプリケーションのコード ベースを管理し、pear コードを適切なディレクトリに整理し、他の人が結果を簡単に取得して共有できます。
2. Pear はコード リポジトリであるだけでなく、標準でもあります。この標準を使用して PHP コードを作成すると、プログラムの可読性と再利用性が向上し、エラーの可能性が減ります。
3. Pear は、デストラクターやエラー キャッチなどの関数を実装するための 2 つのクラスを提供することで、フレームワークを構築します。これらの関数は継承を通じて使用できます。
Pear のコーディング規則
Pear のコーディング ルールには、インデント ルール、制御構造、関数呼び出し、関数定義、コメント、コードを含む、PHP タグ、ファイル ヘッダー内のコメント ブロック、CVS タグ、URL サンプル、および定数の命名が含まれます。以下に簡単に紹介します。
インデントのルール:
コードをインデントするには、pear で 4 つのスペースを使用する必要があり、タブは使用しないでください。 vim を使用する場合は、~/.vimrc に次の設定を追加します。
展開タブを設定する
シフト幅=4を設定します
set tabstop=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 つの真中括弧」規則に従います。
関数 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 コードを定義するには、単に <?> を使用するのではなく、常に <?php ?> を使用します。これにより、Pear の互換性が確保され、クロスプラットフォームの移植が容易になります。
ファイルヘッダーのコメント宣言:
Pear コア リリースに含める必要があるすべての PHP コード ファイルについて、ファイルの先頭に次のコメント ステートメントを追加する必要があります。
/* vim: 拡張タブタブストップ=4 シフト幅=4 を設定: */
// +---------------------------------------------- --- -----------------------+
// | PHP バージョン 4.0 |
// +---------------------------------------------- --- -----------------------+
// | 著作権 (c) 1997, 1998, 1999, 2000, 2001 php グループ |
// +---------------------------------------------- --- -----------------------+
// | このソース ファイルには php ライセンスのバージョン 2.0 が適用されます。
// | これはファイル ライセンスでこのパッケージにバンドルされており、 |
// | ワールドワイドウェブから入手可能 |
// |http://www.php.net/license/2_02.txt |
// | php ライセンスのコピーを受け取っていない場合 |
// | ワールドワイドウェブ経由で入手してください。 | にメモを送ってください。
// |[email protected]ので、すぐにコピーをお送りします。
// +---------------------------------------------- --- -----------------------+
// | 著者: 元の著者 |
// | あなたの名前 |
// +---------------------------------------------- --- -----------------------+
//
// $id$
Pear コア コード ベースにないファイルの場合は、ファイルの先頭に著作権、契約、作成者などを示す同様のコメント ブロックを置くことをお勧めします。同時に、vim のモードラインも最初の行に追加され、pear のコード スタイルを vim で維持できるようになります。
CVS タグ:
上記のように、各ファイルに CVS ID タグを追加します。編集または変更するファイルにこのタグがない場合は、それを追加するか、元のファイルの同様の表現 (「最終更新日」など) に置き換えてください。
URL サンプル:
RFC 2606 を参照し、すべての URL サンプルとして「 http://www.example.com 」を使用できます。
定数の名前付け:
定数は可能な限り大文字で記述し、理解しやすくするためにアンダースコアを使用して各単語を区切ります。同時に、定数が配置されているパッケージ名またはクラス名にプレフィックスを付ける必要があります。たとえば、バグ クラスの定数は bug_ で始まる必要があります。以上がpearのコーディングルールです。詳細なコーディングルールはpearのcoding_standardファイルの説明を参照してください。これらのコーディング ルールをより深く理解するために、既存の Pear コア モジュールのコードを参照することもできます。
梨を使い始める
梨
pear の使用は簡単です。次のように独自の pear プログラムを定義するだけです。
require_once "pear.php";
クラス your_class_name extends 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 Source を参照してください。コード:
<コード>
関数 pear() {
if (method_exists($this, "_".get_class($this))) {
グローバル $_pear_destructor_object_list;
$_pear_destructor_object_list[] = &$this;
}
if ($this->_debug) {
printf("pear コンストラクターが呼び出されました、class=%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 がコンポーネント関数でデストラクターを実装する方法を示しています。現在のクラスにデストラクターがあるかどうかを確認し、存在する場合は、現在のクラスの参照が 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 オブジェクトを作成して返すだけです。簡単な例を次に示します。
<コード>
関数 myconnect($host = "localhost", $port = 1080)
{
$fp = fsockopen($host, $port, $errno, $errstr);
if (!is_resource($fp)) {
return new pear_error($errstr, $errno);
}
$fp を返します。
}
$sock = myconnect();
if (pear::iserror($sock)) {
print "接続エラー: ".$sock->getmessage()."<br>n"
}
</code>
上記のコードに示されているように、エラーが発生する可能性のあるコードを実行した後、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 とは異なり、一般に、次の方法で 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 の紹介は終わりです。要約すると、pear の拡張アプリケーションを作成したい場合は、これを行う必要があります。
require_once "pear.php"
class your_pear_extend extends pear{} を使用して新しいクラスを定義します。
クラスのコンストラクターで、親クラス pear のコンストラクターを呼び出します。
関数 your_pear_extend{
$this->pear();
...
必要
に応じて、デストラクター _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-mode は、emacs/xemacs の PHP 構文サポートを提供し、pear コード スタイルをサポートします。
vim ホームページは非常に優れたエディタであり、php も適切にサポートしています