クラスでグローバル変数を使用する
PHP では、global
キーワードを使用してクラス内からグローバル変数にアクセスできます。ただし、これにより、コードの可読性と保守性の問題が発生する可能性があります。次のコード例を考えてみましょう:
<code class="language-php">$db = new DB_MySQL("localhost", "root", "", "test"); // 连接数据库 include_once("pagi.php"); $pagination = new pagi(); $records = $pagination->get_records("SELECT * FROM `table`");</code>
ファイル内の pagi.php
:
<code class="language-php">class pagi { public function get_records($q) { global $db; $x = $db->query($q); return $db->fetch($x); } }</code>
このコードは、get_records
メソッドの pagi
クラス外の $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 the, fields, you, want, to retrieve FROM `table`");</code>
<code class="language-php">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); } }</code>
この場合、$db
オブジェクトはコンストラクターを通じて Paginator
クラスに渡されます。これにより、クラスは、グローバル変数として設定したり、クラス内に新しいインスタンスを作成したりせずに、$db
オブジェクトを使用してクエリを実行できます。
結論
グローバル変数の使用は便利かもしれませんが、依存関係注入は、クラスに外部機能を追加するためのより柔軟で保守が容易な方法です。依存関係を明示的に渡すことにより、クラスを特定の実装から分離し、テストと保守が容易になります。
以上がPHP クラス内の外部オブジェクトに適切にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。