ReflectionClass::getConstants

(PHP 5, PHP 7, PHP 8)

ReflectionClass::getConstants获取常量

描述

public ReflectionClass::getConstants(?int $filter = null): array

获取类中定义的所有常量,无论其可见性如何。

参数

filter

可选的过滤器,用于过滤所需的常量可见性。它使用 ReflectionClassConstant 常量 进行配置,默认情况下包含所有常量可见性。

返回值

一个 array 类型的数组,其中键包含常量名,值包含常量的值。

变更日志

版本 描述
8.0.0 添加了 filter 参数。

参见

添加笔记

用户贡献笔记 6 笔记

davide dot renzi at gmail dot com
10 年前
如果您想返回类中定义的常量,您可以定义一个内部方法,如下所示:

<?php
class myClass {
const
NONE = 0;
const
REQUEST = 100;
const
AUTH = 101;

// 其他...

static function getConstants() {
$oClass = new ReflectionClass(__CLASS__);
return
$oClass->getConstants();
}
}
?>
Sandor Toth
7 年前
您可以将 `$this` 作为类传递给 ReflectionClass。如果您扩展了原始类,`__CLASS__` 不会有帮助,因为它是一个基于文件本身的魔术常量。

<?php

class Example {
const
TYPE_A = 1;
const
TYPE_B = 'hello';

public function
getConstants()
{
$reflectionClass = new ReflectionClass($this);
return
$reflectionClass->getConstants();
}
}

$example = new Example();
var_dump($example->getConstants());

// 结果:
array ( size = 2)
'TYPE_A' => int 1
'TYPE_B' => (string) 'hello'
Panni
5 年前
如果您想定义一个静态 `getConstants()` 函数,它可以在继承时工作,您可以执行以下操作:

<?php

abstract class AbstractClass
{
const
TEST = "test";

public static function
getConstants()
{
// "static::class" 在这里发挥了作用
$reflectionClass = new ReflectionClass(static::class);
return
$reflectionClass->getConstants();
}
}

class
ChildClass extends AbstractClass
{
const
TYPE_A = 1;
const
TYPE_B = 'hello';
}

$example = new ChildClass();
var_dump($example->getConstants());

// 结果:
array(3) {
'TYPE_A' => int(1)
'TYPE_B' => string(5) "hello"
'TEST'
=> string(4) "test"
}

?>
shgninc at gmail dot com
10 年前
我使用函数根据类常量名执行某些操作,如下所示。这个例子可能对每个人都有帮助。
<?php
public function renderData($question_type = NULL, $data = array()) {
$types = array();
$qt = new ReflectionClass(questionType);
$types = $qt->getConstants();
if (
$type = array_search($question_type, $types)){
//.....执行某些操作
}
}
?>
djhob1972 at yahoo dot com dot au
14 年前
我试图确定如何获取接口中常量的 `var_dump`。没错,不是使用任何类,而是使用接口本身。

在我的探索过程中,我发现 ReflectionClass 以及对接口的直接调用也会输出其常量。完美!

这是使用 PHP 5.3.1 和我的示例:

第一个文件

constants.php

<?php
<?php>

interface
MyConstants
{
// --------------------------
// 程序级别
// --------------------------
const DEBUG_MODE_ACTIVE = FALSE;
const
PHP_VERSION_REQUIREMENT = "5.1.2";
}
?>

=======
第二个文件
=======

test.php

<?php>
include_once ("constants.php");

$oClass = new ReflectionClass ('MyConstants');
$array = $oClass->getConstants ();
var_dump ($array);
unset ($oClass);
?>

您将在命令行中获得:

?:\???\htdocs\????>php test.php
array(2) {
["DEBUG_MODE_ACTIVE"]=> bool(false)
["PHP_VERSION_REQUIREMENT"]=> string(5) "5.1.2"

但正如您所见,这在许多方面非常有用,因此我真诚地希望这能帮助其他人在未来遇到类似的难题时有所帮助!

享受!
dmitrochenkooleg at gmail dot com
5 年前
获取声明的最新常量。

抽象类 AbstractEnum
{
/**
* 返回所有类的常量 || Return all constants
*
* @return array
*/
静态函数 getConstants()
{
$rc = new \ReflectionClass(get_called_class());

return $rc->getConstants();
}

/**
* 返回调用类中定义的最后一个常量数组 || Return last constants
*
* @return array
*/
静态函数 lastConstants()
{
$parentConstants = static::getParentConstants();

$allConstants = static::getConstants();

return array_diff($allConstants, $parentConstants);
}

/**
* 返回所有父类的常量 || Return parent constants
*
* @return array
*/
静态函数 getParentConstants()
{
$rc = new \ReflectionClass(get_parent_class(static::class));
$consts = $rc->getConstants();

return $consts;
}
}

======
类 Roles 扩展 AbstractEnum
{
常量 ROOT = 'root';
常量 ADMIN = 'admin';
常量 USER = 'user';
}

// 输出
全部: root, admin, user
最后: root, admin, user

类 NewRoles 扩展 Roles
{
常量 CLIENT = 'client';
常量 MODERATOR = 'moderator';
常量 SUPERMODERATOR = 'super'.self::USER;
}

// 输出
全部: client, moderator, superuser, root, admin, user
最后: client, moderator, superuser

类 AdditionalRoles 扩展 Roles
{
常量 VIEWER = 'viewer';
常量 CHECKER = 'checker';
常量 ROOT = 'rooter';
}

全部: viewer, checker, rooter, client, moderator, superuser, admin, user
最后: viewer, checker, rooter
To Top