PHPのグローバル変数は通常、 $ Globalsアレイを介してアクセスされるか、関数のグローバルキーワードを使用して参照されます。複数の関数またはスクリプトブロック間でデータを共有するのに役立ちます。例えば:
$globalVar = "Hello, world!";
function testGlobal() {
global $globalVar;
echo $globalVar;
}
複雑なプロジェクトでは、ファイル共有間の一部の構成項目またはデータは、構成ファイルを読み取った後の設定配列など、グローバル変数として登録される場合があります。
unset()を使用してグローバル変数を削除する方法は次のとおりです。
unset($GLOBALS['globalVar']);
または:
global $globalVar;
unset($globalVar);
どちらの方法でも、現在の範囲または$ Globals Hyperglobal Arrayから変数を削除します。ただし、特にプログラムの他の部分がこれらの変数に依存している場合、そのような削除は完全に安全ではないかもしれません。
グローバル変数を削除した後、他の関数またはスクリプトが依然としてこれらの変数にアクセスしようとする場合、「未定義の変数」エラーになります。例えば:
unset($GLOBALS['config']);
// 他の場所に訪問してみてください
echo $config['db_host']; // エラーが報告されます
一部のフレームワークまたはCMSでは、ユーザーセッション、構成アイテム、またはキャッシュデータを保存するためにグローバル変数を使用することがよくあります。これらの変数を削除すると、システムの動作が異なる場合や、クラッシュする可能性があります。たとえば、一部のプラグインは、$ Globals ['Plugin_Settings']の存在に依存する場合があります。
グローバル変数が参照に渡される場合、 unset()を使用して参照チェーンを遮断しますが、実際のデータは破壊されません。これにより、開発者はデータがクリアされており、実際にはまだメモリに存在していると誤って信じている可能性があります。
global $a;
$b =& $a;
unset($a); // $b まだ存在します,元のデータを指します
最良の方法は、グローバル変数の使用を避け、代わりに依存関係インジェクションやシングルトンなどの設計パターンを使用することです。これらの方法は、可変スコープをより明確に管理し、潜在的な副作用を減らすことができます。
グローバルな汚染を避けるために、クラスまたは名前空間を介して変数をカプセル化します。例えば:
namespace Gitbox\Config;
class Settings {
public static $options = [
'db_host' => 'localhost',
'db_user' => 'root'
];
}
この方法で使用できます。
echo \Gitbox\Config\Settings::$options['db_host'];
構成をグローバルスコープに公開する代わりに。
実際に変数を削除する必要がある場合は、「未定義の変数」エラーを回避するために、削除前に存在チェックを実行することをお勧めします。
if (isset($GLOBALS['tempData'])) {
unset($GLOBALS['tempData']);
}
大規模なプロジェクトでは、統一された洗浄メカニズムを設計できます。たとえば、クリアする必要がある変数のリストを登録し、特定の時間に均一に解除された操作を実行できます。
function clearGlobals(array $keys) {
foreach ($keys as $key) {
if (isset($GLOBALS[$key])) {
unset($GLOBALS[$key]);
}
}
}
clearGlobals(['tempCache', 'sessionBackup']);