はじめに
新しい大規模な PHP プログラムを開発する場合でも、一部のデータはコードのさまざまな部分で使用する必要があるため、必然的にグローバル データを使用することになります。一般的なグローバル データには、プログラム設定クラス、データベース接続クラス、ユーザー情報などが含まれます。このデータをグローバル データにする方法は数多くありますが、最も一般的に使用される方法は、「global」キーワード宣言を使用することです。これについては、この記事の後半で詳しく説明します。
「global」キーワードを使用してグローバル データを宣言する唯一の欠点は、これが実際には非常に不適切なプログラミング方法であり、グローバル データによってコードが分離されるため、後でプログラムでより大きな問題が発生することがよくあることです。相互にリンクされているため、コードの一部を変更すると、他の部分に問題が発生する可能性があります。したがって、コード内に多くのグローバル変数がある場合、プログラム全体の保守が困難になります。
この記事では、さまざまな手法や設計パターンを通じてこのグローバル変数の問題を防ぐ方法を説明します。もちろん、最初にグローバル データに「global」キーワードを使用する方法とその仕組みを見てみましょう。
グローバル変数と「global」キーワードを使用する
PHP はデフォルトでいくつかの「スーパーグローバル」変数を定義します。これらは自動的にグローバル化され、$_GET や $_REQUEST など、プログラム内のどこからでも呼び出すことができます。通常、これらの変数はデータまたはその他の外部データから取得されますが、これらの変数は基本的に書き込み可能ではないため、通常は使用しても問題は発生しません。
ただし、独自のグローバル変数を使用することもできます。キーワード「global」を使用すると、グローバル データを関数のローカル スコープにインポートできます。 「変数の使用範囲」がわからない場合は、PHP マニュアルの該当する説明を参照してください。
以下は、「global」キーワードを使用したデモの例です:
1. コードの再利用はほぼ不可能です。
関数がグローバル変数に依存している場合、この関数を異なる環境で使用することはほぼ不可能です。もう 1 つの問題は、この関数を抽出して他のコードで使用できないことです。
2. デバッグと問題の解決は非常に困難です。
グローバル変数の追跡は、非グローバル変数の追跡よりもはるかに困難です。グローバル変数は、不明瞭なインクルード ファイルで再定義されている可能性があり、非常に優れたプログラム エディタ (または IDE) を使用していても、問題を発見するまでに数時間かかる場合があります。
3. これらのコードを理解するのは非常に困難です。
グローバル変数がどこから来て何に使われるのかを理解するのは困難です。開発プロセス中はすべてのグローバル変数を知っているかもしれませんが、約 1 年後には、少なくとも一部のグローバル変数を忘れてしまう可能性があります。その時点で、非常に多くのグローバル変数を使用したことを後悔するでしょう。
では、グローバル変数を使用しない場合は何を使用すればよいでしょうか?以下にいくつかの解決策を見てみましょう。
関数パラメータの使用
グローバル変数の使用をやめる 1 つの方法は、以下に示すように、変数をパラメータとして関数に渡すことです: