PHP でのグローバル変数の使用は、緊密に結合されたコードを作成し、柔軟性を妨げる可能性があるため推奨されません。そしてセキュリティリスクをもたらします。この記事では、具体的な例に焦点を当ててグローバルを避けるべき理由を詳しく掘り下げ、依存関係の挿入に基づいたより効率的な解決策を提供します。
グローバル変数の主な問題それは彼らの暗黙の性質です。変数をグローバルとして宣言すると、コードベース全体にわたってその変数への直接の依存関係が作成されます。変数の名前や可用性を変更すると、アプリケーションの他の部分に即座に影響します。この暗黙的な依存関係は、特に大規模なコードベースで混乱を引き起こす可能性があり、エラーの追跡とコードの保守が困難になります。
システムのさまざまな部分で共有される変数を管理するためのより良いアプローチコードベースは依存関係の注入です。これには、グローバルに利用可能な変数に依存するのではなく、必要な依存関係をパラメーターとして関数またはクラスに明示的に渡すことが含まれます。そうすることで、依存関係が明示的になり、管理が容易になります。
グローバル変数の問題を説明するために、構成配列 $config がconfig.php ファイルに含まれており、アプリケーションの複数のページに含まれています。特定の関数conversion()では、構成データにアクセスするためにグローバル$config宣言が必要になります。
function conversion($Exec, $Param = array(), $Log = '') { global $config; $cmd = $config['phppath'] . ' ' . $config['base_path'] . '/' . $Exec; foreach ($Param as $s) { $cmd .= ' ' . $s; } }
依存性注入を採用することで、$config配列をconversion()関数に直接渡すことができます。
function conversion($Exec, $Param = array(), $Log = '', $config) { $cmd = $config['phppath'] . ' ' . $config['base_path'] . '/' . $Exec; foreach ($Param as $s) { $cmd .= ' ' . $s; } }
これで、conversion() 関数はよりモジュール化され、グローバル変数への依存度が低くなります。これは、config.php ファイルを含めたり、グローバル $config 宣言を必要とせずに、アプリケーションの他の部分で使用できます。
このシナリオでは、次のことが可能です。さらに拡張して、データベース接続による依存関係の注入を実証します。 Database クラスと、データベースから構成データを取得するメソッドloadConfigurationFromDatabase() があると仮定します。
class Database { // ... public function loadConfigurationFromDatabase() { // ... return $config; } }
依存関係注入を使用して構成データにアクセスするには、Database クラスのインスタンスを次のオブジェクトに渡すことができます。関数またはクラスを指定し、loadConfigurationFromDatabase() を呼び出して構成配列を取得します。
// ... $db = new Database(); $config = $db->loadConfigurationFromDatabase(); // ...
このアプローチは明確ですデータベース接続と構成読み込みプロセスをアプリケーション コードの残りの部分から分離し、保守性とテスト性を高めます。
結論として、グローバル変数は便利に見えるかもしれませんが、暗黙的な依存関係を導入し、コードの柔軟性を制限します。依存関係の注入を採用することで、開発者はコードの分離を促進し、モジュール性を強化し、ソフトウェア全体の品質を向上させることができます。この道に着手すると、より明確で、より保守しやすく、拡張可能なコードベースが実現します。
以上がPHP でグローバル変数の使用をやめ、依存関係の注入を採用する必要があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。