PHP 프로그래밍에서 정의 된 () 함수는 상수가 정의되었는지 여부를 결정하는 데 사용됩니다. 일반적으로, 정의 된 ()는 상수가 정의되지 않은 경우 false를 반환해야합니다. 그렇지 않으면 true . 그러나 때로는 개발자가 예외가 발생할 수 있습니다. defined () 오류는 정의되지 않은 상수를 판단 할 때 true를 반환하여 프로그램 논리의 혼란을 유발하고 오류를 해결하기가 어렵습니다.
이 기사는이 현상의 가능한 원인을 탐색하고 몇 가지 효과적인 해결책을 제공합니다.
PHP 코드 예 :
<?php
if (defined('MY_CONST')) {
echo "MY_CONST 한정된";
} else {
echo "MY_CONST 한정되지 않은";
}
?>
정상적인 상황에서 My_Const가 정의되지 않으면 위의 코드는 "my_const undefined"를 출력해야합니다. 그러나 일부 환경이나 특정 코드 컨텍스트에서 정의 된 ( 'my_const')는 예기치 않게 true를 반환하여 상수가 정의되었다고 잘못 판단합니다.
때로는 프로그램에서 상수가 실수로 정의 될 수 있지만 이름 공간, 대문자 및 소문자 케이스에는 차이가 있습니다. PHP의 상수 이름은 사례에 민감합니다. 귀하의 판단이 정의와 일치하지 않으면 잘못 판단 할 수 있습니다.
일부 프레임 워크 또는 확장자는 상수를 동적으로 정의하거나 정의되지 않은 상수에 액세스 할 때 자동으로 마법 방법을 사용하여 정의 된 경우 () 가 true를 반환 할 수 있습니다.
PHP의 다른 버전은 일정한 처리 메커니즘에서 다를 수 있으며 일부 이전 버전 또는 특정 구성으로 인해 정의 된 () 가 비정상적으로 동작 될 수 있습니다.
먼저 정의 된 ()를 사용하여 판단한 다음 constant ()를 사용하여 값을 얻습니다. 예외가 발생하면 정의되지 않은 것으로 간주됩니다.
<?php
function is_constant_defined($name) {
if (!defined($name)) {
return false;
}
try {
constant($name);
return true;
} catch (Error $e) {
return false;
}
}
if (is_constant_defined('MY_CONST')) {
echo "MY_CONST 한정된";
} else {
echo "MY_CONST 한정되지 않은";
}
?>
정의되지 않은 상수에 액세스 할 때 자동으로 정의되는 논리가 없음을 확인하십시오. 필요한 경우 논리를 비활성화하거나 덮어 씁니다.
최신 버전의 PHP는 많은 상수 관련 버그를 수정하고 PHP 환경을 업그레이드하면 이러한 문제를 피할 수 있습니다.
볼 수 있도록 정의 된 모든 상수를 인쇄합니다 : print_r (get_defined_constants (true));
판단하기 전에 캐시를 청소하십시오 (캐시 메커니즘이 사용되는 경우)
정의 된 ( 'my_const') === 유형 혼동을 피하기위한 간단한 판단 대신 true 사용
정의 된 ()에 의해 진정한 오류는 일반적으로 환경 또는 코드 로직 예외로 인해 발생합니다. 위의 솔루션을 결합하여 개발자는 코드 사양, 환경 업그레이드, 오류 캡처 등과 같은 다양한 측면에서 확인하여 지속적인 판단의 정확성을 확인할 수 있습니다.