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']);