ホームページ >バックエンド開発 >PHPチュートリアル >PHPの宝庫ディレクトリ PEAR
この記事では、PHP、PEAR の宝物ディレクトリを紹介します。必要な友達はここで参照してください。
あなたはすでに PHP のベテランで、優れたコードをたくさん書いているかもしれません。しかし、今それらを現在のプロジェクトに追加したい場合、それは少し難しいでしょうか?友人はあなたのコードをプロジェクトのモジュールとして使用したいと考えていますが、あなたはまったく異なるコーディング スタイルを使用していることに気づきました。友人に適応させるか、書き直すこともできます。
私に従って、PEAR 標準を使用して PHP プログラムを作成してください。あなたのプログラムとコードは、PHP と同様に、他の専門家のコードと簡単に統合されます。より高いエネルギーを生み出すために。
PEAR とは何ですか?
PEAR は、PHP Extension and Application Repository の略称です。簡単に言うと、PEAR は PHP の CPAN です。
PEAR を使用する理由?
PHP は非常に優れたスクリプト言語であり、簡潔で効率的です。4.0 のリリースにより、PHP は特にインターネット開発言語として最適な言語の 1 つになったと言えます。中小規模の商用アプリケーションを迅速かつ効率的に開発できる必要がある Web サイト開発者にとって、PHP は推奨言語です。しかし、PHP アプリケーションの数が増え続けるにつれて、これらのアプリケーションに対する統一された標準と効果的な管理が不足しているため、PHP コミュニティが PERL コミュニティの人々と同じように相互にコードやアプリケーションを簡単に共有することが困難になっています。なぜなら、PHP には CPAN と同じ標準がないからです。アプリケーション コード モジュールを分類および管理するための統一されたコード ベース (PERL に詳しい人なら、CPAN が巨大な PERL 拡張モジュール ウェアハウスであることを知っています。作成されたアプリケーション モジュールは、次の適切な分類ディレクトリに配置できます)。もちろん、アプリケーション モジュールを作成するときもガイドラインに従う必要があります。)
このため、PEAR が誕生し、4.04 から PHP コアとともに配布されています。
PEAR は私にどのようなメリットをもたらしますか?
1. 前に述べたように、PEAR は特定のカテゴリに従って PEAR アプリケーション コード ライブラリを管理し、他の人が結果を簡単に取得して共有できます。
2.PEAR は単なるコード リポジトリではなく、標準でもあります。この標準を使用して PHP コードを記述すると、プログラムの可読性と再利用性が向上し、エラーの可能性が減ります。
3.PEAR は、デストラクターやエラー キャッチなどの関数を実装するための 2 つのクラスを提供することでフレームワークを構築します。これらの関数は継承を通じて使用できます。
PERR PEARのコーディングルール
PEARのコーディングルールには、インデントルール、制御構造、関数呼び出し、関数定義、コメント、コードを含む、PHPタグ、ファイルヘッダーのコメントブロック、CVSタグ、URLサンプル、定数の命名などが含まれます。11側面。以下に簡単に紹介します:
インデントのルール:
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 .. など) の後にスペースを入れ、その後にコントロールの括弧を置く必要があります。また、中括弧 {} を使用するようにしてください。たとえそれが構文的にオプションであっても、可能な限り完全に。これにより、将来新しいコード行を追加する必要がある場合に論理的な混乱やエラーが発生するのを防ぐことができます。以下に例を示します。関数呼び出し:
関数呼び出しの場合、関数名と左括弧 ( (、関数パラメーターの場合、区切りカンマと次のパラメーターの間に同じスペースで区切る必要があります。最後に、パラメータと右括弧の間にスペースを入れます。以下は標準的な関数呼び出しです。
$result = foo ($param1, $param2,$) param3);
$result=foo( $param1,$param2, $param3 );
また、関数の戻り値に値を代入する場合は、等号と代入された変数にはスペースが必要です。一連の関連する代入ステートメントの場合は、次のように適切なスペースを追加して整列させます。
$result1 = $foo($param1, $param2, $param3); 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 コードのマークアップ:
単に 6b3d0130bba23ae47fe2b8e8cddf0195 を使用するのではなく、常に bb9bd6d87db7f8730c53cb084e6b4d2d を使用してください。これにより、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利用这个特性,提供了析构函数的仿真。假如你有一个PEAR的子类,叫做mypear,那么在mypear类中,你可以定义一个函数,函数名是下划线加上你的类名,_mypear(),这个函数就是这个类的析构函数。不过这个析构函数和C++中的析构函数不太一样,它不会在对象被删除的时候执行,而是在脚本结束的时候,毕竟这只是一个仿真。由于是使用了register_shutdown_function(),所以在你的析构函数里,打印的信息将不会返回浏览器中。此外,在你的构造函数中,需要调用一下它的父类的构造函数,因为PHP不会自动调用父类的构造函数,而析构函数需要在PEAR的构造函数中注册,我们可以看看PEAR的源代码:
<code> function PEAR() { if (method_exists($this, "_".get_class($this))) { global $_PEAR_destructor_object_list; $_PEAR_destructor_object_list[] = &&this; } if ($this->_debug) { printf("PEAR constructor called, class=%s\n", get_class($this)); } ..... function _PEAR_call_destructors() { global $_PEAR_destructor_object_list; if (is_array($_PEAR_destructor_object_list) && sizeof($_PEAR_destructor_object_list)) { reset($_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"); </code>
上面这段代码展示了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的对象就可以了。下面是一个简单的例子:
<code> function myconnect($host = "localhost", $port = 1080) { $fp = fsockopen($host, $port, $errno, $errstr); if (!is_resource($fp)) { return new PEAR_Error($errstr, $errno); } return $fp; } $sock = myconnect(); if (PEAR::isError($sock)) { print "connect error: ".$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必须是E_USER_NOTICE, E_USER_WARNING 或 E_USER_ERROR这3个常量的一个,同PHP中trigger_error的值一致。如果$mode是PEAR_ERROR_CALLBACK,$options可以是一个字符串,内容是要回调的函数名,也可以是一个2元素的数组,分别是一个对象变量,和一个字符串(标明要调用的方法)。
$userinfo:存放附加的用户信息,你可以把相关的调试信息放在这里。
PEAR_Error中有一些常用的方法,这些方法在PHP文挡没有描述,这里一一列出:
int getMode:返回当前的错误处理模式,整型。
string getMessage:返回当前完整的错误信息,字符串。
mixed getCallback:返回当前的回调信息,可能是所回调的函数名,或者是(对象,方法)的数组。
int getCode:返回整型的错误代码。
string getType:返回错误的类型,也就是当前的类名,字符串。
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)捕获相应的错误。
实现你自己的功能。
在最新的PHP4.05的PEAR核心发布里,已经有不少优秀的应用模块了,比如:PHPDoc,Cache,HTML...当然,相对于CPAN来说,PEAR只是刚刚起步,需要PHP社区的人们的共同努力,来完善它,增强它,PHP才会越来越强大。
以上がPHPの宝庫ディレクトリ PEARの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。