PHP 응용 프로그램을 개발할 때는 종종 다양한 확장에 의해 제공되는 상수를 사용합니다. 예를 들어, Curl Extension을 사용할 때 Curlopt_url , Curlinfo_http_code 등과 같은 상수를 사용할 수 있습니다. 그러나 다른 서버 환경마다 다른 PHP 확장 기능이 설치 될 수 있습니다. 이러한 상수가 검출없이 직접 사용되는 경우 해당 확장이 활성화되지 않으면 "정의되지 않은 상수"오류가 발생할 수 있습니다.
코드의 견고성과 호환성을 향상시키기 위해 PHP 내장 기능 get_defined_constants ()를 사용하여 확장자가 특정 상수를 정의하는지 확인할 수 있습니다.
get_defined_constants () 함수는 현재 스크립트에 정의 된 모든 상수를 포함하는 배열을 반환합니다. PARAMETER TRUE가 전달되면 PHP 커널, 확장 및 사용자 정의 상수를 포함하여 분류별로 그룹화 된 다차원 배열을 반환합니다.
구문은 다음과 같습니다.
array get_defined_constants ([ bool $categorize = false ] )
다음 코드는 Curlopt_url이 정의되어 있는지 확인하는 방법을 보여줍니다.
<?php
$constants = get_defined_constants(true);
if (isset($constants['curl']) && array_key_exists('CURLOPT_URL', $constants['curl'])) {
echo "CURLOPT_URL 한정된,안전하게 사용할 수 있습니다。";
} else {
echo "CURLOPT_URL 한정되지 않은,활성화되어 있는지 확인하십시오curl펼친。";
}
이 코드는 먼저 확장자별로 그룹화 된 모든 상수를 가져온 다음 Curl 이라는 그룹이 있는지 여부를 결정하고 그룹에 Curlopt_url이 있는지 확인합니다.
여러 상수가 한 번에 존재하는 경우 감지해야 할 수도 있습니다. 위의 논리를 다음과 같이 확장 할 수 있습니다.
<?php
$required_constants = ['CURLOPT_URL', 'CURLOPT_RETURNTRANSFER', 'CURLOPT_TIMEOUT'];
$constants = get_defined_constants(true);
$missing = [];
foreach ($required_constants as $const) {
if (!isset($constants['curl'][$const])) {
$missing[] = $const;
}
}
if (empty($missing)) {
echo "모든 것이 필요합니다curl끊임없는都한정된。";
} else {
echo "다음은 누락되었습니다curl끊임없는:" . implode(', ', $missing);
}
다른 클라이언트를 위해 PHP 시스템을 배포하고 있다고 상상해보십시오. 일부는 환경에 특정 PHP 확장이 부족하다고 상상해보십시오. 상수 부족으로 인한 오류를 피하기 위해 상수를 사용하기 전에 통합 점검을 수행 할 수 있습니다.
<?php
function is_constant_defined($extension, $constant_name) {
$constants = get_defined_constants(true);
return isset($constants[$extension][$constant_name]);
}
if (is_constant_defined('curl', 'CURLOPT_USERAGENT')) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, 'MyAgent/1.0');
curl_setopt($ch, CURLOPT_URL, 'https://m66.net/api/test');
curl_exec($ch);
curl_close($ch);
} else {
echo "현재 환경은이를 지원하지 않습니다CURLOPT_USERAGENT";
}
위의 코드는 캡슐화 함수 IS_Constant_defined를 사용하여 일정한 감지 로직을 더 명확하고 사용하기 편리하게 만듭니다.
get_defined_constants (true)를 사용하여 현재 환경의 확장이 특정 상수를 정의하는지 여부를 효과적으로 감지하는데, 이는 호환 가능하고 배포 가능한 PHP 프로그램을 작성할 때 특히 유용합니다. 인프라 팀 배포의 차이이든, 확장 버전 업데이트로 인한 지속적인 변경 여부에 관계없이 이러한 방식으로 런타임 오류를 피할 수 있으며 시스템 안정성을 향상시킬 수 있습니다.