PHP 개발에서 우리는 종종 상수를 사용하여 경로, 스위치, 서비스 인터페이스 등과 같은 일부 전역 구성을 정의하지만보다 현대적인 또는 모듈 식 아키텍처에서는 구성 배열 (예 : config.php 또는 .env 환경 변수)에서 많은 수의 전역 상수 사용량을 대체합니다. 마이그레이션을 원활하게하거나 호환성 비교를하려면 현재 실행 환경에서 정의 된 상수를 비교하여 구성 배열의 값으로 대체 될 수 있는지 확인해야 할 수도 있습니다.
현재 get_defined_constants () 함수는 편리합니다. 정의 된 모든 상수 (시스템 및 사용자 정의 상수 포함)를 반환하고 배열 형태로 제시하여 논리적 처리를 수행 할 수 있습니다.
다음은 get_defined_constants () 를 통해 구성 배열과 비교하고 복제 또는 충돌이있을 수있는 부분을 찾는 방법을 보여주는 실용적인 예입니다.
<?php
// 구성 배열을 시뮬레이션합니다,일반적으로 가능합니다 config.php 또는 env 파일로드
$config = [
'APP_ENV' => 'production',
'API_URL' => 'https://api.m66.net',
'DEBUG' => false,
];
// 일부 구성이 원래 일정하다고 가정합니다
define('APP_ENV', 'production');
define('API_URL', 'https://api.m66.net');
define('SITE_NAME', 'MySite');
// 모든 사용자 정의 상수를 얻으십시오
$userConstants = get_defined_constants(true)['user'];
// 일치하는 결과를 저장하는 데 사용됩니다
$matched = [];
$unmatched = [];
$missingInConstants = [];
foreach ($config as $key => $value) {
if (array_key_exists($key, $userConstants)) {
if ($userConstants[$key] === $value) {
$matched[$key] = $value;
} else {
$unmatched[$key] = [
'constant' => $userConstants[$key],
'config' => $value
];
}
} else {
$missingInConstants[$key] = $value;
}
}
// 출력 비교 결과
echo "=== 일치하는 구성 항목(일정하고 가치는 일관성이 있습니다) ===\n";
print_r($matched);
echo "\n=== 不일치하는 구성 항목(같은 이름이지만 다른 값) ===\n";
print_r($unmatched);
echo "\n=== 구성에 존재하지만 상수로 정의되지 않은 항목 ===\n";
print_r($missingInConstants);
사용자 상수 얻기 :
get_defined_constants (true) [ '사용자']는 모든 사용자 정의 상수를 얻을 수 있으며이 단계는 핵심입니다.
비교 논리 :
구성 배열을 통해 반복하고 각 구성 항목이 상수에 존재하는지 확인하고 존재하는 경우 비교 값이 일관됩니다.
분류 출력 :
정확히 일치하는 용어는 상수를 통한 구성 값과 일치했음을 나타냅니다.
불일치 한 용어는 잠재적 충돌이 있음을 의미합니다.
누락 된 항목은 이러한 구성이 상수로 이동하지 않았거나 의도적으로 상수로 정의되지 않았 음을 나타냅니다.
마이그레이션 지원 : 이전 상수 정의에서 통합 구성 파일 구조로 마이그레이션을 준비 할 때이 메소드를 사용하여 구성 배열에 의해 어떤 상수를 덮어 쓴지 확인할 수 있습니다.
디버깅 목적 : 논리적 인복과 혼동을 방지하기 위해 대규모 프로젝트에서 상수 및 구성의 반복적 인 정의를 추적합니다.
환경 검증 : 이러한 종류의 비교 메커니즘은 자동 배포 스크립트에 내장되어 사전 정의 된 상수 및 구성 파일이 일관되도록 할 수 있습니다.
일반적으로 get_defined_constants ()를 구성 배열과 비교하는 것은 매우 실용적인 코드 감사 기술이며, 특히 오래된 프로젝트를 리팩토링 할 때 사용하기에 적합합니다. 일정한 구성에서 중앙 구성으로 점차 마이그레이션되는 PHP 프로젝트를 유지하는 경우이 방법을 사용하면 많은 문제 해결 및 유지 보수 시간이 절약됩니다.