ホームページ バックエンド開発 PHPチュートリアル PHP5 OOP プログラミングでのエージェントと例外のカスタマイズ_PHP チュートリアル

PHP5 OOP プログラミングでのエージェントと例外のカスタマイズ_PHP チュートリアル

Jul 13, 2016 pm 05:34 PM
oop php5 1つ そして 演技 土地 カスタムメイド 物体 異常な 私たち 真似する 単純 プログラミング

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 クラスの拡張。

2. タイプヒント
DBQueryクラス
{
.....

パブリック関数 fetch_array()
{
if (! is_resource($this->result)) {
新しい例外をスローします(クエリは実行されません。); }

$this->db->fetch_array($this->結果)を返す
}

パブリック関数 fetch_row()
{
if (! is_resource($this->result)) {
新しい例外をスローします(クエリは実行されません。); }

$this->db->fetch_row($this->result) を返します
}

パブリック関数 fetch_assoc()
{
if (! is_resource($this->result)) {
新しい例外をスローします(クエリは実行されません。); }

$this->db->fetch_assoc($this->結果)を返します
}

パブリック関数 fetch_object()
{
if (! is_resource($this->result)) {
新しい例外をスローします(クエリは実行されません。); }

$this->db->fetch_object($this->結果)を返します
}

パブリック関数 num_rows()
{
if (! is_resource($this->result)) {
新しい例外をスローします(クエリは実行されません。); }

$this->db->num_rows($this->result) を返します
}
}




各関数の実装は非常に簡単です。まずクエリが実行されたことを確認し、次にタスクを DB オブジェクトに委任し、あたかもクエリ オブジェクトそのものであるかのように結果を返します (基本データベース関数と呼ばれます)。


プロキシが機能するためには、DBQuery オブジェクトの $db 変数が DB インターフェイスを実装するオブジェクトのインスタンスであることを確認する必要があります。型ヒントは、関数パラメータを特定の型のオブジェクトに強制的に変換できるようにする PHP 5 の新機能です。 PHP 5 より前では、関数パラメーターが特定のオブジェクト型であることを確認する唯一の方法は、PHP で提供される型チェック関数 (つまり is_a()) を使用することでした。これで、関数パラメータの前に型名を付けることで、オブジェクト型を簡単にキャストできるようになりました。 DBQuery オブジェクトからの型ヒントについてはすでに説明しました。これにより、DB インターフェイスを実装するオブジェクトがオブジェクト コンストラクターに確実に渡されます。



パブリック関数 __construct(DB $db)
{ $this->db = $db; }



型ヒントを使用する場合、オブジェクト型だけでなく、抽象クラスや抽象インターフェイスも指定できます。

3. 例外をスローする

上記のコードから、QueryException と呼ばれる例外をキャッチしていることに気づいたかもしれません (このオブジェクトは後で実装します)。例外はエラーに似ていますが、より一般的です。例外を説明する最良の方法は、emergency を使用することです。緊急事態は「致命的」ではないかもしれませんが、それでも対処する必要があります。 PHP で例外がスローされると、関数、try..catch ブロック、またはスクリプト自体のいずれであっても、現在の実行スコープはすぐに終了します。その後、例外は呼び出しスタックを横断し、各実行スコープを終了して、try..catch ブロックにキャッチされるか呼び出しスタックの先頭に到達するまで、その時点で致命的エラーが生成されます。

例外処理は、PHP 5 のもう 1 つの新機能です。OOP と組み合わせて使用​​すると、エラー処理とレポートを適切に制御できます。 try..catch ブロックは、例外を処理するための重要なメカニズムです。キャッチされると、スクリプトの実行は、例外がキャッチされて処理されたコードの次の行から続行されます。

クエリが失敗した場合は、例外をスローするように実行関数を変更する必要があります。 QueryException というカスタム例外オブジェクトをスローします。エラーの原因となった DBQuery オブジェクトがそれに渡されます。

リスト 3. 例外をスローします。

/**
*現在のクエリを実行します
*
* 現在のクエリを実行します。ドット マーカーを指定されたパラメーターに置き換えます
*
*
* @parameters: 混合 $queryParams,... クエリパラメータ
* @return: リソース A - クエリが実行されるリソースを説明する参照。
*/
パブリック関数実行($queryParams = )
{
//例: SELECT * FROM table WHERE name=:1S AND type=:2I AND level=:3N
$args = func_get_args(); if ($this->stored_procedure) {
/*コンパイル関数を呼び出してクエリを取得します*/
$query = call_user_func_array(array($this, コンパイル), $args); } その他 {
/*ストアド プロシージャは初期化されていないため、標準クエリとして実行されます*/
$query = $queryParams
; }
$result = $this->db->query($query); if (! $result) {
新しいQueryException($this)をスローします



http://www.bkjia.com/PHPjc/508484.html

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MIT の最新傑作: GPT-3.5 を使用して時系列異常検出の問題を解決する MIT の最新傑作: GPT-3.5 を使用して時系列異常検出の問題を解決する Jun 08, 2024 pm 06:09 PM

今日は、MIT が先週公開した記事を紹介します。GPT-3.5-turbo を使用して時系列異常検出の問題を解決し、時系列異常検出における LLM の有効性を最初に検証しました。プロセス全体に微調整はなく、GPT-3.5-turbo は異常検出に直接使用されます。この記事の核心は、時系列を GPT-3.5-turbo が認識できる入力に変換する方法とその設計方法です。 LLM が異常検出タスクを解決できるようにするためのプロンプトまたはパイプライン。この作品について詳しく紹介していきます。画像用紙タイトル:Large languagemodelscanbeゼロショタノマリデテ

C++ 関数の例外と単一テスト: コードの健全性の確保 C++ 関数の例外と単一テスト: コードの健全性の確保 May 03, 2024 am 09:18 AM

例外処理と単体テストは、C++ コードの健全性を確保するための重要な実践です。例外は try-catch ブロックを通じて処理され、コードが例外をスローすると、catch ブロックにジャンプします。単体テストでは、コード テストを分離して、さまざまな状況下で例外処理が期待どおりに機能することを検証します。実際のケース: sumArray 関数は配列要素の合計を計算し、空の入力配列を処理するために例外をスローします。単体テストでは、配列が空の場合に std::invalid_argument 例外をスローするなど、異常な状況下での関数の予期される動作を検証します。結論: 例外処理と単体テストを活用することで、例外を処理し、コードのクラッシュを防ぎ、異常な状況下でもコードが期待どおりに動作することを保証できます。

C++ 関数例外の詳細: カスタマイズされたエラー処理 C++ 関数例外の詳細: カスタマイズされたエラー処理 May 01, 2024 pm 06:39 PM

C++ の例外処理は、特定のエラー メッセージ、コンテキスト情報を提供し、エラーの種類に基づいてカスタム アクションを実行するカスタム例外クラスを通じて強化できます。 std::Exception から継承した例外クラスを定義して、特定のエラー情報を提供します。カスタム例外をスローするには、throw キーワードを使用します。 try-catch ブロックでdynamic_castを使用して、キャッチされた例外をカスタム例外タイプに変換します。実際の場合、open_file 関数は FileNotFoundException 例外をスローします。例外をキャッチして処理すると、より具体的なエラー メッセージが表示されます。

C++ でネストされた例外処理を実装するにはどうすればよいですか? C++ でネストされた例外処理を実装するにはどうすればよいですか? Jun 05, 2024 pm 09:15 PM

ネストされた例外処理は、ネストされた try-catch ブロックを通じて C++ に実装され、例外ハンドラー内で新しい例外を発生させることができます。ネストされた try-catch ステップは次のとおりです。 1. 外側の try-catch ブロックは、内側の例外ハンドラーによってスローされた例外を含むすべての例外を処理します。 2. 内部の try-catch ブロックは特定のタイプの例外を処理し、スコープ外の例外が発生した場合、制御は外部例外ハンドラーに渡されます。

コーディングの鍵: 初心者のための Python の力を解き放つ コーディングの鍵: 初心者のための Python の力を解き放つ Oct 11, 2024 pm 12:17 PM

Python は、学習の容易さと強力な機能により、初心者にとって理想的なプログラミング入門言語です。その基本は次のとおりです。 変数: データ (数値、文字列、リストなど) を保存するために使用されます。データ型: 変数内のデータの型 (整数、浮動小数点など) を定義します。演算子: 数学的な演算と比較に使用されます。制御フロー: コード実行のフロー (条件文、ループ) を制御します。

Python による問題解決: 初心者プログラマーとして強力なソリューションをアンロックする Python による問題解決: 初心者プログラマーとして強力なソリューションをアンロックする Oct 11, 2024 pm 08:58 PM

Python は、問題解決の初心者に力を与えます。ユーザーフレンドリーな構文、広範なライブラリ、変数、条件文、ループによる効率的なコード開発などの機能を備えています。データの管理からプログラム フローの制御、反復的なタスクの実行まで、Python が提供します

C++ プログラミング パズルのコレクション: 思考を刺激し、プログラミング スキルを向上させます C++ プログラミング パズルのコレクション: 思考を刺激し、プログラミング スキルを向上させます Jun 01, 2024 pm 10:26 PM

C++ プログラミング パズルは、フィボナッチ数列、階乗、ハミング距離、配列の最大値と最小値などのアルゴリズムとデータ構造の概念をカバーします。これらのパズルを解くことで、C++ の知識を強化し、アルゴリズムの理解とプログラミング スキルを向上させることができます。

C の謎を解く: 新人プログラマーのための明確でシンプルな道 C の謎を解く: 新人プログラマーのための明確でシンプルな道 Oct 11, 2024 pm 10:47 PM

C は、初心者がシステム プログラミングを学習するのに最適な選択肢です。ヘッダー ファイル、関数、メイン関数のコンポーネントが含まれています。 「HelloWorld」を印刷できる単純な C プログラムには、標準入出力関数宣言を含むヘッダー ファイルが必要で、main 関数で printf 関数を使用して印刷します。 C プログラムは、GCC コンパイラーを使用してコンパイルして実行できます。基本をマスターしたら、データ型、関数、配列、ファイル処理などのトピックに進み、熟練した C プログラマーになることができます。

See all articles