クラス内でのグローバル変数の使用
ページネーション機能の作成には、クラス内からデータベース オブジェクトへのアクセスが含まれます。ただし、クラス内の外部変数にアクセスしようとすると、エラーが発生する可能性があります。この問題を処理するために考えられる解決策を詳しく見てみましょう。
致命的なエラー「非オブジェクトのメンバー関数 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); } }
これにより、ページネーション クラスがデータベース オブジェクトに直接アクセスできるようになります。
メソッド インジェクション
別のオプションは、データベース オブジェクトを特定のオブジェクトに挿入することです。それを必要とするメソッド:
$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); } }
これにより、複数のメソッドでデータベース要件が異なる場合に柔軟性が向上します。
依存関係の挿入の利点
グローバル変数を使用する場合と比較して、依存関係の挿入には次のような利点があります。いくつかの利点:
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3