首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查类常量是否存在

问检查类常量是否存在
EN

Stack Overflow用户
提问于 2014-06-11 09:22:42
回答 6查看 42.5K关注 0票数 69

如何检查在PHP类中是否定义了常量?

代码语言:javascript
复制
class Foo {
    const BAR = 1;
}

类常量是否有类似于property_exists()或method_exists()的东西?或者我可以直接用defined("Foo::BAR")

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-06-11 09:26:00

是的,只需在常量名称前面使用类名:

代码语言:javascript
复制
defined('SomeNamespace\SomeClass::CHECKED_CONSTANT');

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

票数 65
EN

Stack Overflow用户

发布于 2014-06-11 09:24:55

您可以检查是否用以下代码定义了常量:

代码语言:javascript
复制
<?php
if(defined('className::CONSTANT_NAME')){
  //defined
}else{
  //not defined
}
票数 82
EN

Stack Overflow用户

发布于 2018-06-05 10:23:16

你有三种方法可以做到:

定义()

PHP >= 4-最具追溯性的兼容方式

代码语言:javascript
复制
$class_name = get_class($object); // remember to provide a fully-qualified class name
$constant = "$class_name::CONSTANT_NAME";
$constant_value = defined($constant) ? $constant : null;

Note:在(可能来自PHP7.1)上使用defined()将引发错误:“无法访问私有const”。同时使用ReflectionClass或ReflectionClassConstant也可以。

ReflectionClass

PHP >= 5

代码语言:javascript
复制
$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

PHP7.1.0 >=

代码语言:javascript
复制
$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;
}

没有更好的办法了。取决于您的需求和用例。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24159178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档