반응형
PHP에서 동적으로 선택된 클래스 상수 값 가져 오기
다음과 같이 할 수 있기를 바랍니다.
class ThingIDs
{
const Something = 1;
const AnotherThing = 2;
}
$thing = 'Something';
$id = ThingIDs::$thing;
이것은 작동하지 않습니다. 동등한 것을 수행하는 간단한 방법이 있습니까? 나는 수업에 갇혀 있습니다. 다시 쓸 수없는 라이브러리에 있습니다. 나는 명령 행에서 인수를 코드를 쓰고 있어요, 나는 것이 정말 맘 기호 이름 대신 ID 번호를 취할 수 있습니다.
$id = constant("ThingIDs::$thing");
http://php.net/manual/en/function.constant.php
반사 사용
$r = new ReflectionClass('ThingIDs');
$id = $r->getConstant($thing);
네임 스페이스를 사용하는 경우 클래스에 네임 스페이스를 포함해야합니다.
echo constant('My\Application\ThingClass::ThingConstant');
<?php
class Dude {
const TEST = 'howdy';
}
function symbol_to_value($symbol, $class){
$refl = new ReflectionClass($class);
$enum = $refl->getConstants();
return isset($enum[$symbol])?$enum[$symbol]:false;
}
// print 'howdy'
echo symbol_to_value('TEST', 'Dude');
도우미 기능
다음과 같은 기능을 사용할 수 있습니다.
function class_constant($class, $constant)
{
if ( ! is_string($class)) {
$class = get_class($class);
}
return constant($class . '::' . $constant);
}
두 가지 인수가 필요합니다.
- 클래스 이름 또는 개체 인스턴스
- 클래스 상수 이름
객체 인스턴스가 전달되면 해당 클래스 이름이 유추됩니다. PHP 7을 사용하는 경우 ::class
네임 스페이스에 대해 생각할 필요없이 적절한 클래스 이름을 전달할 수 있습니다 .
예
class MyClass
{
const MY_CONSTANT = 'value';
}
class_constant('MyClass', 'MY_CONSTANT'); # 'value'
class_constant(MyClass::class, 'MY_CONSTANT'); # 'value' (PHP 7 only)
$myInstance = new MyClass;
class_constant($myInstance, 'MY_CONSTANT'); # 'value'
클래스 자체에 대한 참조가있는 경우 다음을 수행 할 수 있습니다.
if (defined(get_class($course). '::COURSES_PER_INSTANCE')) {
// class constant is defined
}
내 문제는이 주제와 비슷했습니다. 객체는 있지만 클래스 이름은없는 경우 다음을 사용할 수 있습니다.
$class_name = get_class($class_object);
$class_const = 'My_Constant';
$constant_value = constant($class_name.'::'.$class_const);
참고 URL : https://stackoverflow.com/questions/6147102/get-value-of-dynamically-chosen-class-constant-in-php
반응형
'program story' 카테고리의 다른 글
문자열에 새 줄을 만들지 않고 긴 템플릿 리터럴 줄을 여러 줄로 줄 바꿈 (0) | 2020.08.09 |
---|---|
Java Generics (와일드 카드) (0) | 2020.08.09 |
프로그래밍 방식으로 브라우저 캐시를 비우는 방법은 무엇입니까? (0) | 2020.08.09 |
ssh : 호스트 이름 [hostname]을 확인할 수 없습니다 : nodename 또는 servname이 제공되었거나 알 수 없음 (0) | 2020.08.09 |
수 파이프-각도 2의 매개 변수는 무엇입니까? (0) | 2020.08.09 |