상수 이름을 포함하는 간단한 변수를 사용하여 클래스 상수에 액세스
내 클래스 중 하나에서 클래스 상수에 액세스하려고합니다.
const MY_CONST = "value";
이 상수의 이름을 다음과 같이 보유하는 변수가있는 경우 :
$myVar = "MY_CONST";
어떻게 든 MY_CONST의 값에 액세스 할 수 있습니까?
self::$myVar
정적 속성이기 때문에 분명히 작동하지 않습니다. 변수 변수도 작동하지 않습니다.
이를 수행하는 방법에는 상수 함수를 사용하거나 반사를 사용하는 두 가지 방법이 있습니다.
상수 기능
상수 함수는 다음을 통해 선언 된 define
상수와 클래스 상수 와 함께 작동합니다 .
class A
{
const MY_CONST = 'myval';
static function test()
{
$c = 'MY_CONST';
return constant('self::'. $c);
}
}
echo A::test(); // output: myval
반사 클래스
두 번째로 더 힘든 방법은 반성을 통한 것입니다.
$ref = new ReflectionClass('A');
$constName = 'MY_CONST';
echo $ref->getConstant($constName); // output: myval
이에 대한 구문은 없지만 명시 적 조회를 사용할 수 있습니다.
print constant("classname::$myConst");
나는 또한 self::
.
어떻게 든 MY_CONST의 값에 액세스 할 수 있습니까?
self::MY_CONST
동적으로 액세스하려면 리플렉션 API 문서를 사용할 수 있습니다 .
$myvar = 'MY_CONST';
$class = new ReflectionClass(self);
$const = $class->getConstant($myVar);
리플렉션 API의 이점은 모든 상수를 한 번에 가져올 수 있다는 것입니다 ( getConstants
).
리플렉션 API를 사용하고 싶지 않아 마음에 들지 않는다면 대안은 constant
함수 ( Demo )입니다.
$myvar = 'MY_CONST';
class foo {const MY_CONST = 'bar';}
define('self', 'foo');
echo constant(self.'::'.$myvar);
해봤 어?
$myVar = MY_CONST or $myVar = $MY_CONST
Reflection에 대한 참고 사항 : ReflectionClass의 생성자 는 해당 매개 변수에 대한 클래스 의 전체 경로 를 받아야합니다 . 즉, 'A'문자열을 생성자 매개 변수로 설정하는 것만으로는 어떤 경우에는 작동하지 않을 수 있습니다.
이 문제를 피하려면 ReflectionClass를 사용할 때 다음과 같이하면 더 좋습니다.
$classA = new A();
$name_classA = get_class($classA);
$ref = new ReflectionClass(get_class($name_classA));
$constName = 'MY_CONST';
echo $ref->getConstant($constName);
Function get_class will give you the full path of a class whenever you are in the code. Missing the full path may result in a "Class not found" PHP error.
ReferenceURL : https://stackoverflow.com/questions/7506530/accessing-a-class-constant-using-a-simple-variable-which-contains-the-name-of-th
'IT TIP' 카테고리의 다른 글
TinyMCE 텍스트 영역에서 값 가져 오기 (0) | 2021.01.09 |
---|---|
mongodb의 수많은 레코드에 대한 느린 페이지 매김 (0) | 2021.01.09 |
R에서 산점도의 플롯 포인트를 더 투명하게 만드는 방법은 무엇입니까? (0) | 2021.01.09 |
angular — 여러 http 호출의 데이터에 액세스-약속을 해결하는 방법 (0) | 2021.01.09 |
선택기“.class.class”와“.class .class”의 차이점은 무엇입니까? (0) | 2021.01.09 |