IT TIP

상수 이름을 포함하는 간단한 변수를 사용하여 클래스 상수에 액세스

itqueen 2021. 1. 9. 11:14
반응형

상수 이름을 포함하는 간단한 변수를 사용하여 클래스 상수에 액세스


내 클래스 중 하나에서 클래스 상수에 액세스하려고합니다.

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

반응형