クラス内からグローバル変数にアクセスするという困難は、オブジェクト指向で遭遇する一般的な課題ですプログラミング。この記事では、特に PHP の問題に対処し、「非オブジェクトのメンバー関数 query() の呼び出し」エラーに対する代替解決策を提供します。
提供されたコード スニペット内この致命的なエラーは、pagi クラスの get_records() メソッド内の $db 変数に対して query() メソッドを呼び出そうとしたときに発生します。根本的な原因は、クラスとグローバル $db オブジェクトの間に接続が確立されていないことです。
1.依存関係の注入
依存関係の注入は、必要なオブジェクトをパラメーターとしてクラスに渡す設計パターンです。この場合、データベース接続オブジェクト (つまり、$db) が pagi クラスのコンストラクターに挿入されます。このメソッドにより、クラスはグローバル スコープに頼らずにグローバル変数にアクセスできるようになります。
2.メソッド パラメータの挿入
または、データベース接続オブジェクトをパラメータとして get_records() メソッド自体に渡すこともできます。この方法は必ずしもカプセル化を改善するわけではありませんが、依存関係をより柔軟に管理できるようになります。
1.疎結合:
依存関係の注入により、クラス間の疎結合が促進され、必要に応じて依存関係を簡単に交換できるようになります。このシナリオでは、pagi クラスのコードを変更せずに、別のデータベース接続に切り替えるのが簡単です。
2.単体テスト:
パラメーターを介して依存関係を渡すことにより、単体テストをより効率的に実行できます。複数のクラスを同時にテストする代わりに、特定のユニット (この場合は pagi クラス) のみがテストされます。
依存関係の注入とメソッド パラメーターの注入はどちらも、グローバル変数にアクセスするための実行可能なソリューションを提供します。クラス内で。 2 つのアプローチのどちらを選択するかは、アプリケーションの特定の設計要件によって異なります。最終的には、どちらの方法も必要な外部リソースへのアクセスを提供しながらカプセル化を維持することを目的としています。
以上がPHP クラス内のグローバル変数にエラーなくアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。