ホームページ  >  記事  >  バックエンド開発  >  PHP5 OOP プログラミング プロキシとカスタム例外_PHP チュートリアル

PHP5 OOP プログラミング プロキシとカスタム例外_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:33:23873ブラウズ

1. DBQuery オブジェクト

ここで、DBQuery オブジェクトは単純にストアド プロシージャをエミュレートします。実行されると、保存する必要がある結果リソースが返されます。また、結果セットに対して関数 (num_rows() や fetch_row など) を使用したい場合は、 ())、MySQL(PHPとの最良の組み合わせ)DBオブジェクトを渡す必要があります。では、DBQuery オブジェクトが、MySQL(PHP との最適な組み合わせ)DB オブジェクト (クエリ実行の結果を操作するように設計されている) によって実装される関数を実装すると、どのような効果があるのでしょうか?前の例のコードを引き続き使用し、結果リソースが DBQuery オブジェクトによって管理されていると仮定します。 DBQuery クラスのソース コードをリスト 1 に示します。

リスト1. DBQueryクラスの使用。

require MySQL (PHP との最適な組み合わせ)_db.php (現​​在の主流の開発言語として) ;
require_once query.php (現​​在の主流の開発言語として) $db = 新しい MySQL
; (PHP との最適な組み合わせ) $db->connect(host, username, pass); $query = new DBQuery($db ); >prepare(SELECT fname, sname FROM users WHERE username=:1S AND pword=:2S AND期限切れ_time<:3I);
try {
if($query->execute("visualad", "apron ", time()) )->num_rows() == 1) {
echo(正しい資格情報);
} else {
echo(不正な資格情報 / セッションの期限切れ)
}
} catch (QueryException $e) {
echo(クエリの実行エラー: . $e);
}

上記の変更されたコードで最も注目すべき点は、catch ステートメントとexecute ステートメントです。

・executeステートメントは結果リソースを返さなくなり、DBQueryオブジェクト自体を返すようになりました。

・ DBQuery オブジェクトは、DB インターフェースですでにおなじみの num_rows() 関数を実装するようになりました。

・クエリの実行が失敗すると、QueryException 型の例外がスローされます。文字列に変換すると、発生したエラーの詳細が返されます。

これにはプロキシを使用する必要があります。実際、すでに DBQuery オブジェクトでプロキシを使用していますが、ここではそれをさらに深く使用して、MySQL

(PHP との最適な組み合わせ)

DB オブジェクトに緊密にバインドします。 DBQuery オブジェクトは、DB インターフェイスを実装するオブジェクトで初期化されており、クエリを実行する DB オブジェクトの query() メソッドを呼び出すメンバー関数executeがすでに含まれています。 DBQuery オブジェクト自体は実際にはデータベースにクエリを実行せず、このタスクを DB オブジェクトに任せます。これはプロキシであり、同じまたは類似の動作を実装する別のオブジェクトにメッセージを送信することで、オブジェクトが特定の動作を実装できるプロセスです。

これを行うには、DBQuery オブジェクトを変更して、DB オブジェクトからの結果リソースを操作するすべての関数を含める必要があります。クエリを実行するときに保存された結果を使用して、DB オブジェクトの対応する関数を呼び出し、その結果を返す必要があります。次の関数が追加されます: リスト 2: プロキシを使用した DBQuery クラスの拡張。

class DBQuery

{

....

public function fetch_array()
{
if (! is_resource($this->result)) {

throw new Exception(クエリは実行されません。)

}
return $; this->db->fetch_array($this->result);
}

public function fetch_row()
{
if (! is_resource($this->result)) {

throw new Exception(クエリは実行されません。

) Exception(クエリは実行されませんでした。);
return $this->db->fetch_assoc($this->result);

public function fetch_object()
{
if (! is_resource($this->result) ) )) {
throw new Exception(クエリは実行されません。);

return $this->db->fetch_object($this->result);

}

public function num_rows()
{
if (! is_resource ($this->result)) {
throw new Exception(クエリは実行されません。);
}

return $this->db->num_rows($this->result); 実装はとてもシンプルです。まずクエリが実行されたことを確認し、次にタスクを DB オブジェクトに委任し、あたかもクエリ オブジェクトそのものであるかのように結果を返します (基本データベース関数と呼ばれます)。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/508643.html技術記事 1. DBQuery オブジェクト さて、DBQuery オブジェクトは単にストアド プロシージャをエミュレートするだけです。実行されると、保存する必要がある結果リソースが返されます。それを使用したい場合は...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。