Check if a class constant exists

后端 未结 4 1336
醉梦人生
醉梦人生 2021-02-06 20:43

How can I check if a constant is defined in a PHP class?

class Foo {
    const BAR = 1;
}

Is there something like property_exists()

相关标签:
4条回答
  • 2021-02-06 20:51

    You have 3 ways to do it:

    defined()

    [PHP >= 4 - most retro-compatible way]

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

    ReflectionClass

    [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;
    }
    

    ReflectionClassConstant

    [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;
    }
    

    There is no real better way. Depends on your needs and use case.

    0 讨论(0)
  • 2021-02-06 20:59

    You can use that function:

    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;
    }
    

    Or alternative version using 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;
    }
    
    0 讨论(0)
  • 2021-02-06 21:07

    You can check if a constant is defined with the code below:

    <?php
    if(defined('className::CONSTANT_NAME')){
      //defined
    }else{
      //not defined
    }
    
    0 讨论(0)
  • 2021-02-06 21:14

    Yes, just use the class name in front of the constant name:

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

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

    0 讨论(0)
提交回复
热议问题