ホームページ > バックエンド開発 > PHPチュートリアル > クラス内のデータベース オブジェクトにアクセスするときにグローバル変数を回避するにはどうすればよいですか?

クラス内のデータベース オブジェクトにアクセスするときにグローバル変数を回避するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-22 15:00:20
オリジナル
217 人が閲覧しました

How to Avoid Global Variables When Accessing a Database Object within a Class?

クラス内でのグローバル変数の使用

ページネーション機能の作成には、クラス内からデータベース オブジェクトへのアクセスが含まれます。ただし、クラス内の外部変数にアクセスしようとすると、エラーが発生する可能性があります。この問題を処理するために考えられる解決策を詳しく見てみましょう。

「非オブジェクトでのメンバー関数 query() の呼び出し」という致命的なエラーに対処するには、クラス内でデータベース オブジェクトにアクセスできる必要があります。グローバル変数を使用する代わりに、より適切なアプローチは、データベース オブジェクトをクラスまたはそのメソッドに注入することです。

依存関係の注入

1 つの方法は、データベースを注入することです。以下に示すように、オブジェクトをクラス コンストラクターに追加します。

include_once("pagi.php");

$db = new DB_MySQL("localhost", "root", "", "test"); // connect to the database

$pagination = new Paginator($db);
$records = $pagination->get_records("SELECT * FROM `table`");

class Paginator
{    
    protected $db;

    public function __construct(DB_MySQL $db)
    {
        $this->db = $db;
    }

    public function get_records($q) {
        $x = $this->db->query($q);
        return $this->db->fetch($x);
    }
}
ログイン後にコピー

これにより、ページネーション クラスがデータベース オブジェクトにアクセスできるようになります。

メソッドの挿入

もう 1 つのオプションは、データベース オブジェクトを必要とする特定のメソッドに挿入することです。

$pagination = new Paginator();
$records = $pagination->get_records("SELECT * FROM `table`", $db);

class Paginator
{
    public function get_records($q, DB_MySQL $db) {
        $x = $db->query($q);
        return $db->fetch($x);
    }
}
ログイン後にコピー

これにより、さらに多くの機能が提供されます。複数のメソッドにさまざまなデータベース要件がある場合の柔軟性。

依存関係の利点インジェクション

グローバル変数を使用する場合と比較して、依存関係の注入にはいくつかの利点があります。

  • 明示的に定義された依存関係: どのオブジェクトが他のオブジェクトに依存しているのかが明確になります。 、隠れた依存関係を排除します。
  • 緩い結合: クラスは、テスト目的で別のデータベース オブジェクトまたはモック化されたデータベース オブジェクトに簡単に切り替えることができます。
  • テスト容易性: 単体テストは、データベースの機能を妨げることなく、クラスのみに集中できます。
  • 拡張性: 主要なコードを使用せずに複数のデータベースまたは他のフレームワークを使用できるようにします。変更します。

以上がクラス内のデータベース オブジェクトにアクセスするときにグローバル変数を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート