PHP クラス メソッド内の外部変数へのアクセス
クラスメソッド ($db
クラスの get_records
など) 内からグローバル変数 (pagi
) に直接アクセスしようとすると、エラーが発生します。これは変数のスコープによるものです。グローバル変数は、クラス メソッド内では自動的に使用できません。 解決策には、変数をクラスに明示的に渡すことが含まれます。
解決策: 依存関係の注入
最良のアプローチは依存関係の注入です。これには、必要なオブジェクト (この場合はデータベース オブジェクト) を引数としてクラス コンストラクターに渡すか、メソッドに直接渡すことが含まれます。これにより、クラスがグローバル変数から独立した状態に保たれ、コードの保守性とテスト性が向上します。
方法 1: コンストラクター経由で注入する
<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); } } $pagination = new Paginator($db); // Pass the DB object $records = $pagination->get_records("SELECT * FROM `table`");</code>
方法 2: メソッドに直接注入する
あるいは、データベース オブジェクトをメソッドに直接渡すこともできます。
<code class="language-php">class Paginator { public function get_records($q, DB_MySQL $db) { $x = $db->query($q); return $db->fetch($x); } } $pagination = new Paginator(); $records = $pagination->get_records("SELECT * FROM `table`", $db); // Pass DB object to method</code>
推奨事項: コンストラクターインジェクション
どちらの方法も機能しますが、一般的にはコンストラクター注入 (方法 1) が推奨されます。これにより疎結合が促進され、コードがよりモジュール化され、テスト可能になり、保守が容易になります。 直接メソッド インジェクション (方法 2) を使用すると、コードが読みにくくなり、リファクタリングが困難になる可能性があります。 可能な限りグローバル変数に依存しないようにしてください。
以上がPHP のクラスメソッド内のグローバル変数にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。