クラス内でのグローバル変数の使用
ページネーション機能の作成には、クラス内からデータベース オブジェクトへのアクセスが含まれます。ただし、クラス内の外部変数にアクセスしようとすると、エラーが発生する可能性があります。この問題を処理するために考えられる解決策を詳しく見てみましょう。
「非オブジェクトでのメンバー関数 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 サイトの他の関連記事を参照してください。