PHP 개발에서 상수는 종종 프로그램 실행 중에 변경되지 않은 매개 변수, 상태 값 및 기타 데이터를 구성하는 데 사용됩니다. PHP 5.3 이후 네임 스페이스의 도입은 코드 구성 및 모듈 식 기능을 크게 향상 시켰습니다. 그러나 실제 문제도 따릅니다. 특정 네임 스페이스에 정의 된 모든 상수를 얻으려면 PHP 자체가 네임 스페이스의 상수를 필터링하기위한 기능을 직접 제공하지 않습니다. 현재 get_defined_constants ()는 심층적 인 연구에 가치가있는 도구가됩니다.
get_defined_constants () 함수는 현재 스크립트에 정의 된 모든 상수를 포함하는 연관 배열을 반환합니다. 부울 진정한 매개 변수를 전달하면 분류 (사용자 정의 상수 포함)로 그룹화 할 수도 있습니다.
$constants = get_defined_constants(true);
print_r($constants['user']); // 모든 사용자 정의 상수를 얻으십시오
이는 처음에 PHP 코어 상수, 확장 상수 및 기타 관련없는 콘텐츠를 필터링하는 데 도움이 될 수 있지만 네임 스페이스로 분류하기에는 충분하지 않습니다.
네임 스페이스에 정의 된 상수는 실제로 네임 스페이스 접두사가 포함된다는 점을 제외하고 실제로 PHP 내에서 글로벌 상수로 존재합니다. 예를 들어:
namespace App\Config;
const TIMEOUT = 30;
get_defined_constants () 의 반환 결과 에서이 상수의 키 이름은 app \ config \ timeout 입니다. 따라서 정기적 인 일치 또는 문자열 접두사 판단으로 리턴 결과에서 관심있는 상수를 걸러 낼 수 있습니다.
다음은 사용자 정의 상수에서 특정 네임 스페이스에 속하는 부품을 걸러내는 간단한 기능입니다.
function get_namespace_constants(string $namespace): array {
$allConstants = get_defined_constants(true);
$userConstants = $allConstants['user'] ?? [];
$namespacePrefix = trim($namespace, '\\') . '\\';
$filteredConstants = [];
foreach ($userConstants as $name => $value) {
if (strpos($name, $namespacePrefix) === 0) {
$filteredConstants[$name] = $value;
}
}
return $filteredConstants;
}
Call example:
print_r(get_namespace_constants('App\\Config'));
이 함수는 다음 구조와 유사한 배열을 반환합니다.
Array
(
[App\Config\TIMEOUT] => 30
[App\Config\RETRIES] => 5
)
상수는 먼저 정의해야합니다
get_defined_constants ()는 통화 전에 정의 된 상수 만 얻을 수 있습니다. 즉, 해당 파일 (또는 네임 스페이스)이로드되었는지 확인해야합니다.
명명 사양 <br> 여러 네임 스페이스 아래에 중복 상수 이름이있는 경우 필터링은 전체 이름 (네임 스페이스 포함)에 따라 달라지며 충돌이 없습니다.
도구 함수 또는 클래스 방법으로 캡슐화 될 수 있습니다 <br> 모듈이나 네임 스페이스에서 상수를 얻어야하는 경우 위의 논리를 일반 도구 클래스로 캡슐화하여 코드 재사용 성을 향상시킬 수도 있습니다.
일부 프레임 워크 또는 사용자 정의 프레임 워크에서는 상수를 구성 항목의 대안 또는 보충제로 사용할 수 있습니다. 자동 구성 등록은 get_namespace_constants () 와 함께 조합하여 구현할 수 있습니다. 예를 들어:
$config = get_namespace_constants('App\\Config');
file_put_contents('https://m66.net/log/config_snapshot.json', json_encode($config));
이러한 방식으로 구성 스냅 샷을 저장하거나 원격 시스템으로 보내거나 쉽게 작동하고 유지 관리 또는 문제 해결을 할 수 있습니다.
PHP는 네임 스페이스별로 상수를 나열하는 기본 함수를 직접 제공하지는 않지만 네임 스페이스 접두사 규칙과 함께 get_defined_constants ()를 사용 하여이 요구 사항을 여전히 달성 할 수 있습니다. 이러한 기술을 습득하면 코드 조직 기능이 향상 될뿐만 아니라 프레임 워크 개발 또는 대규모 시스템의 실제 가치를 완전히 플레이합니다.