현재 위치: > 최신 기사 목록> get_defined_constants 함수를 통해 상수와 구성 배열 간의 치환 관계를 비교하는 방법은 무엇입니까?

get_defined_constants 함수를 통해 상수와 구성 배열 간의 치환 관계를 비교하는 방법은 무엇입니까?

M66 2025-05-19

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

코드 설명 :

  1. 사용자 상수 얻기 :
    get_defined_constants (true) [ '사용자']는 모든 사용자 정의 상수를 얻을 수 있으며이 단계는 핵심입니다.

  2. 비교 논리 :
    구성 배열을 통해 반복하고 각 구성 항목이 상수에 존재하는지 확인하고 존재하는 경우 비교 값이 일관됩니다.

  3. 분류 출력 :

    • 정확히 일치하는 용어는 상수를 통한 구성 값과 일치했음을 나타냅니다.

    • 불일치 한 용어는 잠재적 충돌이 있음을 의미합니다.

    • 누락 된 항목은 이러한 구성이 상수로 이동하지 않았거나 의도적으로 상수로 정의되지 않았 음을 나타냅니다.

실제 응용 시나리오 :

  • 마이그레이션 지원 : 이전 상수 정의에서 통합 구성 파일 구조로 마이그레이션을 준비 할 때이 메소드를 사용하여 구성 배열에 의해 어떤 상수를 덮어 쓴지 확인할 수 있습니다.

  • 디버깅 목적 : 논리적 인복과 혼동을 방지하기 위해 대규모 프로젝트에서 상수 및 구성의 반복적 인 정의를 추적합니다.

  • 환경 검증 : 이러한 종류의 비교 메커니즘은 자동 배포 스크립트에 내장되어 사전 정의 된 상수 및 구성 파일이 일관되도록 할 수 있습니다.

일반적으로 get_defined_constants ()를 구성 배열과 비교하는 것은 매우 실용적인 코드 감사 기술이며, 특히 오래된 프로젝트를 리팩토링 할 때 사용하기에 적합합니다. 일정한 구성에서 중앙 구성으로 점차 마이그레이션되는 PHP 프로젝트를 유지하는 경우이 방법을 사용하면 많은 문제 해결 및 유지 보수 시간이 절약됩니다.