クラスでのグローバル変数の使用
外部変数を利用するページネーション クラスを作成しようとしています。ただし、「非オブジェクトでメンバー関数 query() を呼び出します。」というエラーが発生します。
この問題は、外部変数 $db がクラス内で直接アクセスできないために発生します。これを解決するために、2 つの主なアプローチを検討します。
アプローチ 1: 依存関係の注入
依存関係の注入には、データベース オブジェクトを引数としてクラスのコンストラクターに渡すことが含まれます。このメソッドにより、クラスが必要な依存関係に確実にアクセスできるようになります。
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); } }
アプローチ 2: メソッドの挿入
あるいは、データベース オブジェクトを引数として渡すこともできます。それを必要とする特定のメソッドに移動します。このアプローチは、少数のメソッドのみが依存関係にアクセスする必要がある場合に適しています。
class Paginator { public function get_records($q, DB_MySQL $db) { $x = $db->query($q); return $db->fetch($x); } }
これらのアプローチのどちらを選択するかは、特定の要件によって異なります。複数のメソッドに依存関係が必要な場合は依存関係の挿入が推奨されますが、メソッド インジェクションは依存関係の使用が限定されている場合に適しています。
以上がPHP クラス内の外部変数 (データベース オブジェクトなど) に適切にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。