ホームページ >データベース >mysql チュートリアル >PHP クラスでデータベースにアクセスするときにグローバル変数を回避するにはどうすればよいですか?
PHP クラスでデータベースにアクセスする場合は、グローバル変数の使用を避けてください
pagi
クラス メソッドのグローバル変数 $db
にアクセスしようとしたときに、コードでエラーが発生しました。このエラーは、query()
メソッドが非オブジェクトに対して呼び出されたことを示します。これは、$db
変数がクラスで使用できないことを示します。
依存性注入ソリューション
この問題を解決する推奨される方法は、グローバル変数に依存するのではなく、依存関係の注入を使用し、データベース オブジェクトをパラメーターとしてクラスに渡すことです。例は次のとおりです:
<code class="language-php">$db = new DB_MySQL("localhost", "root", "", "test"); include_once("pagi.php"); $pagination = new Paginator($db); $records = $pagination->get_records("SELECT * FROM `table`");</code>
<code class="language-php">class Paginator { private $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); } }</code>
この例では、コンストラクターを通じて Paginator
オブジェクトを依存関係として渡す DB_MySQL
という新しいクラスを作成します。これにより、データベース インスタンスがクラスに挿入され、クラス内のメソッドで使用できるようになります。
依存性注入の利点
依存関係の注入を使用すると、次の利点があります:
DB_MySQL
クラスへの直接の依存関係から分離し、より柔軟でテストしやすくします。 global
キーワードを使用する場合とは異なり、依存関係の注入により、クラスが特定の依存関係に依存していることが明確になります。 その他の方法
データベース オブジェクトにアクセスするもう 1 つの方法は、次のように、データベース オブジェクトを必要とするメソッドに直接挿入することです。
<code class="language-php">$db = new DB_MySQL("localhost", "root", "", "test"); include_once("pagi.php"); $pagination = new Paginator(); $records = $pagination->get_records("SELECT * FROM `table`", $db);</code>
<code class="language-php">class Paginator { public function get_records($q, DB_MySQL $db) { $x = $db->query($q); return $db->fetch($x); } }</code>
ただし、カプセル化とテスト容易性が向上するため、コンストラクターを介した依存関係の注入が一般的に好まれます。
以上がPHP クラスでデータベースにアクセスするときにグローバル変数を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。