PHP 프로그래밍에서 상수는 실행 중에 변경할 수없는 식별자이며 종종 구성 매개 변수 또는 고정 값 선언에 사용됩니다. 대규모 응용 프로그램을 개발하거나 타사 라이브러리를 디버깅 할 때 때때로 특정 코드에서 정의되거나 수정되는 상수를 감지해야합니다. 현재 get_defined_constants () 함수는 편리합니다.
get_defined_constants () 는 현재 정의 된 모든 상수와 해당 값을 반환하는 PHP 내장 기능입니다. 코드가 실행되고 비교되기 전후의 기능을 호출함으로써 새로 추가 된 상수를 정확하게 캡처하고 이러한 상수의 값을 더 확인할 수 있습니다.
array get_defined_constants ([ bool $categorize = false ] )
$ 분류 매개 변수가 true 로 설정된 경우, 반환 된 배열은 상수의 분류 (예 : 코어, 사용자 정의 등)에 따라 그룹화됩니다.
그렇지 않으면, 평평한 1 차원 연관 배열을 반환하면, 키는 상수의 이름이고 값은 상수의 값입니다.
특정 코드 전후에 한 번 get_defined_constants ()를 호출 한 다음 두 배열의 차이점을 비교하여 중간 코드에 새 상수를 추가 할 수 있습니다.
다음은 전체 예입니다.
<?php
// 초기 상수 상태를 기록하십시오
$before = get_defined_constants();
// 타사 구성 파일 또는 라이브러리로드를 시뮬레이션합니다
include 'http://m66.net/sample-config.php'; // 예 URL
// 로딩 후 상수 상태를 기록하십시오
$after = get_defined_constants();
// 새로운 상수를 계산하십시오
$new_constants = array_diff_assoc($after, $before);
// 출력에 새로운 상수가 추가됩니다
echo "새로운 상수는 다음과 같습니다:\n";
foreach ($new_constants as $name => $value) {
echo "$name => " . var_export($value, true) . "\n";
}
이 예에서는 array_diff_assoc ()을 사용하여 키 이름뿐만 아니라 키 값을 비교하는 두 배열의 차이를 비교합니다. 이를 통해 값이 변경되는 기존 상수보다는 새로 정의 된 상수를 정확하게 얻을 수 있습니다.
사용자 정의 상수 만 얻으려면 get_defined_constants (true)를 호출 할 때 분류 매개 변수를 추가하고 "사용자" 범주에서 상수를 추출 할 수 있습니다. 예를 들어:
$before = get_defined_constants(true)['user'] ?? [];
include 'http://m66.net/sample-config.php';
$after = get_defined_constants(true)['user'] ?? [];
$new_constants = array_diff_assoc($after, $before);
foreach ($new_constants as $name => $value) {
echo "$name => " . var_export($value, true) . "\n";
}
이 방법은 시스템 기본 상수를 제외 해야하는 시나리오에 특히 적합하며 사용자 또는 비즈니스 로직에서 새로운 정의를 캡처하는 데 집중할 수 있습니다.
타사 라이브러리 디버깅 : 라이브러리 또는 프레임 워크에서 소개되는 상수를 분석합니다.
구성 추적 : 여러 구성 파일에 정의 된 위치 복제 또는 충돌 상수;
보안 감사 : 비정상적인 상수가 악의적으로 주입되는지 여부를 모니터링합니다.
테스트 및 검증 : 자동 테스트 프로세스에서 전후에 상태 차이 비교.
일정한 정의를 수정할 수 없으면 반복 된 정의는 경고를 유발합니다.
이름 지정 충돌을 피하기 위해 네임 스페이스 접두사를 사용하는 것이 좋습니다.
코어 로직에서 많은 상수를 동적으로 생성하지 않으면 코드의 유지 관리에 영향을 미칩니다.