현재 위치: > 최신 기사 목록> 사용하지 않는 상수를 걸러내는 방법

사용하지 않는 상수를 걸러내는 방법

M66 2025-05-31

PHP 프로젝트 개발에서 우리는 종종 정의 또는 const를 사용하여 상수를 정의합니다. 프로젝트가 계속 확장됨에 따라 상수의 수도 극적으로 증가 할 것입니다. 시간이 지남에 따라 일부 상수는 잊혀지고 더 이상 코드에 의해 참조되지 않을 수 있습니다. 이러한 미사용 상수는 유지 보수 비용을 증가시키고 코드 가독성 및 유지 관리 가능성을 줄입니다. 코드 품질을 향상시키기 위해 정적 분석 방법과 결합 된 get_defined_constants 함수를 사용하여 사용되지 않은 상수를 식별하고 청소할 수 있습니다.

get_defined_constants 란 무엇입니까?

get_defined_constants 는 PHP의 내장 함수 중 하나이며, 현재 스크립트 (사용자 정의 상수 및 PHP 내부 상수 포함)에서 정의 된 모든 상수를 반환하는 데 사용됩니다. 이 함수는 부울 매개 변수를 허용 할 수 있으며, 매개 변수가 이면 분류별로 그룹화 된 다차원 배열을 반환합니다. 그렇지 않으면 평평한 배열을 반환합니다.

예:

 print_r(get_defined_constants(true));

사용되지 않은 상수를 필터링하는 원리

get_defined_constants는 상수가 사용되는지 직접 알려주지 않습니다. 그러나 우리는 다음 두 단계를 결합 하여이 목표를 간접적으로 달성 할 수 있습니다.

  1. 모든 사용자 정의 상수 이름을 가져옵니다.

  2. 프로젝트 코드를 반복하고 이러한 상수가 참조되는지 확인하십시오.

  3. 표시되지 않은 상수를 "사용하지 않은"것으로 표시합니다.

샘플 구현

다음은 중소형 프로젝트를 유지하고 있다고 가정하는 간단한 구현 아이디어입니다.

1 단계 : 모든 사용자 정의 상수를 수집하십시오

 $allConstants = get_defined_constants(true);

$userConstants = isset($allConstants['user']) ? $allConstants['user'] : [];

2 단계 : 프로젝트 디렉토리를 통과하고 지속적인 참조를 찾으십시오.

 $projectDir = __DIR__ . '/src'; // 프로젝트 소스 코드 디렉토리
$usedConstants = [];

$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($projectDir));
foreach ($files as $file) {
    if ($file->isFile() && pathinfo($file, PATHINFO_EXTENSION) === 'php') {
        $content = file_get_contents($file->getPathname());
        foreach ($userConstants as $name => $value) {
            // 간단한 문자열 검색,정기적 인 일치 정확도를 사용할 수도 있습니다
            if (strpos($content, $name) !== false) {
                $usedConstants[$name] = true;
            }
        }
    }
}

3 단계 : 사용하지 않는 상수를 필터합니다

 $unusedConstants = array_diff_key($userConstants, $usedConstants);

echo "사용하지 않는 상수 목록:\n";
print_r(array_keys($unusedConstants));

추가 제안

  • 대규모 프로젝트의 경우 변수 이름이 상수 이름과 유사 할 때 간섭과 같은 잘못 판단을 피하기 위해 정규식을 사용하는 것이 좋습니다.

  • 다중 검증을 위해 코드 정적 분석 도구 (예 : PHPSTAN, PSALM)와 협력하는 것이 좋습니다.

  • 상수를 제거하기 전에 개발 환경에서 반복적으로 테스트하여 동적으로 참조되는 실수 상수를 피하는 것이 좋습니다.

실제 응용 시나리오

프로젝트가 다음 상수를 정의한다고 가정합니다.

 define('API_URL', 'https://m66.net/api/');
define('DEBUG_MODE', true);
define('UNUSED_CONST', 12345);

스크립트 분석 후, UNUSED_CONST는 프로젝트에서 참조되지 않으므로 프로젝트 코드의 깔끔함을 향상시키기 위해 코드에서 제거하는 것을 고려할 수 있습니다.

결론

PHP에는 사용되지 않는 상수를 직접 찾을 수있는 내장 기능이 없지만 get_defined_constants 기능과 간단한 코드 스캔 로직을 통해이를 달성 할 수 있습니다. 상수의 합리적인 관리는 코드 가독성과 유지 관리를 향상시키는 데 도움이되며 프로젝트의 성숙도와 표준화를 반영합니다.