ホームページ >バックエンド開発 >PHPチュートリアル >PHP5 OOP プログラミングでのエージェントと例外のカスタマイズ_PHP チュートリアル
1. DBQuery オブジェクト
DBQuery オブジェクトは単純にストアド プロシージャをエミュレートします。実行されると、保存する必要がある結果リソースが返されます。その結果セットに対して関数 (num_rows() や fetch_row() など) を使用したい場合は、次のようにする必要があります。 MySqlDB オブジェクトを渡します。では、MySqlDB オブジェクト (実行されたクエリの結果を操作するように設計されている) によって実装される関数を DBQuery オブジェクトが実装すると、どのような影響があるのでしょうか?前の例のコードを引き続き使用し、結果リソースが DBQuery オブジェクトによって管理されていると仮定します。 DBQuery クラスのソース コードをリスト 1 に示します。
リスト 1. DBQuery クラスの使用。
mysql_db.phpが必要です。
require_once クエリ ; $db = 新しい MySqlDb ; $db->connect(ホスト、ユーザー名、パス); $db->クエリ(content_management_system を使用); $query = 新しい DBQuery($db); $query->prepare(SELECT fname,sname FROM users WHERE username=:1S AND pword=:2S AND expire_time<:3i> を試してください if($query->execute("visualad", "エプロン", time()))->num_rows() == 1) { echo(正しい資格情報) } その他 { echo(間違った認証情報 / セッションの期限切れ) } } キャッチ (QueryException $e) { echo(クエリ実行エラー: . $e); } 上記の変更されたコードで最も注目するのは、catch ステートメントとexecute ステートメントです。 ·execute ステートメントは結果リソースを返さなくなり、DBQuery オブジェクト自体を返すようになりました。 · DBQuery オブジェクトは、DB インターフェイスですでにおなじみの num_rows() 関数を実装するようになりました。 · クエリの実行が失敗した場合、QueryException タイプの例外がスローされます。文字列に変換すると、発生したエラーの詳細が返されます。 これを行うには、プロキシを使用する必要があります。実際、すでに DBQuery オブジェクトでプロキシを使用していますが、ここではそれをさらに深く使用して、MySqlDB オブジェクトに緊密に結び付けます。 DBQuery オブジェクトは、DB インターフェイスを実装するオブジェクトで初期化されており、クエリを実行する DB オブジェクトの query() メソッドを呼び出すメンバー関数executeがすでに含まれています。 DBQuery オブジェクト自体は実際にはデータベースにクエリを実行せず、このタスクを DB オブジェクトに任せます。これはプロキシであり、同じまたは類似の動作を実装する別のオブジェクトにメッセージを送信することで、オブジェクトが特定の動作を実装できるプロセスです。 これを行うには、DBQuery オブジェクトを変更して、DB オブジェクトからの結果リソースを操作するすべての関数を含める必要があります。クエリを実行するときに保存された結果を使用して、DB オブジェクトの対応する関数を呼び出し、その結果を返す必要があります。以下の機能が追加されます: リスト 2: プロキシを使用した DBQuery クラスの拡張。
プロキシが機能するためには、DBQuery オブジェクトの $db 変数が DB インターフェイスを実装するオブジェクトのインスタンスであることを確認する必要があります。型ヒントは、関数パラメータを特定の型のオブジェクトに強制的に変換できるようにする PHP 5 の新機能です。 PHP 5 より前では、関数パラメーターが特定のオブジェクト型であることを確認する唯一の方法は、PHP で提供される型チェック関数 (つまり is_a()) を使用することでした。これで、関数パラメータの前に型名を付けることで、オブジェクト型を簡単にキャストできるようになりました。 DBQuery オブジェクトからの型ヒントについてはすでに説明しました。これにより、DB インターフェイスを実装するオブジェクトがオブジェクト コンストラクターに確実に渡されます。 パブリック関数 __construct(DB $db) {
|