programing

클래스 상수가 있는지 확인합니다.

magicmemo 2023. 8. 4. 22:58
반응형

클래스 상수가 있는지 확인합니다.

PHP 클래스에 상수가 정의되어 있는지 확인하려면 어떻게 해야 합니까?

class Foo {
    const BAR = 1;
}

그런 것이 있습니까?property_exists()또는method_exists()클래스 상수에 대해?아니면 그냥 사용해도 될까요?defined("Foo::BAR")?

아래 코드로 상수가 정의되어 있는지 확인할 수 있습니다.

<?php
if(defined('className::CONSTANT_NAME')){
  //defined
}else{
  //not defined
}

예, 상수 이름 앞에 클래스 이름을 사용합니다.

defined('SomeNamespace\SomeClass::CHECKED_CONSTANT');

http://www.php.net/manual/en/function.defined.php#106287

다음과 같은 세 가지 방법이 방법은 다음과 같습니다.

정의된

[PHP >= 4 - 가장 역호환적인 방법]

$class_name = get_class($object); // remember to provide a fully-qualified class name
$constant = "$class_name::CONSTANT_NAME";
$constant_value = defined($constant) ? $constant : null;

참고: 사용defined()PHP 7.1에서 가능개인 상수에서 "개인 상수에 액세스할없음" 오류가 발생합니다.사용 중ReflectionClass또는ReflectionClassConstant효과가 있을 것입니다.

반사 클래스

[PHP >= 5]

$class_reflex = new \ReflectionClass($object);
$class_constants = $class_reflex->getConstants();
if (array_key_exists('CONSTANT_NAME', $class_constants)) {
    $constant_value = $class_constants['CONSTANT_NAME'];
} else {
    $constant_value = null;
}

반사 클래스 상수

[PHP >= 7.1.0]

$class_name = get_class($object); // fully-qualified class name
try {
    $constant_reflex = new \ReflectionClassConstant($class_name, 'CONSTANT_NAME');
    $constant_value = $constant_reflex->getValue();
} catch (\ReflectionException $e) {
    $constant_value = null;
}

이보다 더 좋은 방법은 없습니다.필요 및 사용 사례에 따라 다릅니다.

이 기능을 사용할 수 있습니다.

function constant_exists($class, $name){
    if(is_string($class)){
        return defined("$class::$name");
    } else if(is_object($class)){
        return defined(get_class($class)."::$name");
    }
    return false;
}

또는 ReflectionClass를 사용하는 대체 버전

function constant_exists($class, $name) {
    if(is_object($class) || is_string($class)){
        $reflect = new ReflectionClass($class);
        return array_key_exists($name, $reflect->getConstants());
    }
    return false;
}

그래서 시도해봤습니다.

$constants = new \ReflectionClass(App\Namespace\ClassName::class);
if ($constants->getConstant('CONSTANT_NAME')){
    // Do this
} else {
    // Do that
}

그리고 잘 작동했습니다.

언급URL : https://stackoverflow.com/questions/24159178/check-if-a-class-constant-exists

반응형