PHP에서 상수는 스크립트 실행 중에 값을 변경할 수없는 식별자입니다. 일반적으로 Define () 함수는 상수를 정의하는 데 사용되거나 Const 키워드를 사용할 수 있습니다. 그러나 일부 시나리오에서는 상수가 정의되었는지 여부, 특히 이러한 상수가 타사 라이브러리, 구성 파일 또는 기타 모듈에 의해 동적으로로드 될 수 있는지 확인해야 할 수도 있습니다.
일반적으로 사용되는 정의 된 () 함수 외에도 PHP는 내장 된 기능 get_defined_constants ()를 제공하며, 이는 모든 정의 된 상수를 반환하여 배열로 표시 할 수 있습니다. 이것을 array_key_exists () 함수와 함께 사용하면보다 유연하고 정확한 일정한 존재 감지를 달성 할 수 있습니다. 이 기사에서는이 조합의 사용법 및 실제 응용 프로그램 예제를 소개합니다.
get_defined_constants () 함수는 정의 된 모든 상수를 포함하는 다차원 배열을 반환합니다. 배열의 구조는 다음과 같습니다.
[
'Core' => [...],
'pcre' => [...],
'user' => [
'MY_CONSTANT' => 'value',
...
],
...
]
그중에서도 사용자 부분은 사용자가 정의하는 상수이며 다른 부분은 PHP 내장 또는 확장으로 정의됩니다.
get_defined_constants (true) [ 'user'] 배열을 얻으면 모든 사용자 정의 상수를 나열하고 Array_key_exists ()를 사용하여 상수 이름이 존재하는지 여부를 결정할 수 있습니다. 예를 들어:
define('MY_SITE_URL', 'https://m66.net');
$userConstants = get_defined_constants(true)['user'];
if (array_key_exists('MY_SITE_URL', $userConstants)) {
echo '끊임없는 MY_SITE_URL 한정된,가치는입니다:' . $userConstants['MY_SITE_URL'];
} else {
echo '끊임없는 MY_SITE_URL 한정되지 않은';
}
이 예에서는 먼저 상수 my_site_url을 정의한 다음 get_defined_constants (true) [ '']를 사용하여 모든 사용자 정의 상수를 얻고 array_key_exists ()를 사용하여 판단을합니다.
정의 된 () 함수를 사용하면 상수가 존재하는지 여부를 확인할 수 있지만, 현재 시스템의 모든 상수의 정의를 분석하거나 디버깅해야 할 때 Get_defined_constants ()는 배열 작업과 결합하여 장점이 있습니다. 예를 들어, 다음 코드를 사용하여 My_ 로 시작하는 모든 상수를 인쇄 할 수 있습니다.
foreach (get_defined_constants(true)['user'] as $key => $value) {
if (strpos($key, 'MY_') === 0) {
echo "$key => $value\n";
}
}
다음은 구성 판단의 예이며, 이는 다중 환경 배치에서 특히 일반적입니다.
// config.php
define('ENVIRONMENT', 'production');
// init.php
$userConstants = get_defined_constants(true)['user'];
if (array_key_exists('ENVIRONMENT', $userConstants)) {
if ($userConstants['ENVIRONMENT'] === 'production') {
error_reporting(0);
} else {
error_reporting(E_ALL);
}
} else {
// 기본 환경
define('ENVIRONMENT', 'development');
error_reporting(E_ALL);
}
이런 식으로, 우리는 상수의 존재가 더 유연하다는 것을 보장 할뿐만 아니라 상수의 반복적 인 정의로 인한 경고를 방지 할 수 있습니다.
get_defined_constants () 와 array_key_exists ()를 결합하는 것은 기존 정의 된 () 함수보다 더 강력하고 확장 가능한 방법입니다. 이를 통해 현재 스크립트 실행 환경, 특히 대규모 프로젝트 및 다중 모듈 아키텍처에서 지속적인 정의를 깊이 이해하고 관리 할 수 있습니다. 디버깅, 구성 검사 또는 런타임 제어 로직에 사용 되든이 방법은 마스터하고 활용할 가치가 있습니다.