get_defined_constants

(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)

get_defined_constants返回一个关联数组,其中包含所有常量的名称及其值

描述

get_defined_constants(bool $categorize = false): array

返回当前定义的所有常量的名称和值。这包括由扩展创建的常量以及使用 define() 函数创建的常量。

参数

categorize

使此函数返回一个多维数组,其中第一维的键为类别,第二维为常量及其值。

<?php
define
("MY_CONSTANT", 1);
print_r(get_defined_constants(true));
?>

上面的例子将输出类似于以下内容

Array
(
    [Core] => Array
        (
            [E_ERROR] => 1
            [E_WARNING] => 2
            [E_PARSE] => 4
            [E_NOTICE] => 8
            [E_CORE_ERROR] => 16
            [E_CORE_WARNING] => 32
            [E_COMPILE_ERROR] => 64
            [E_COMPILE_WARNING] => 128
            [E_USER_ERROR] => 256
            [E_USER_WARNING] => 512
            [E_USER_NOTICE] => 1024
            [E_ALL] => 2047
            [TRUE] => 1
        )

    [pcre] => Array
        (
            [PREG_PATTERN_ORDER] => 1
            [PREG_SET_ORDER] => 2
            [PREG_OFFSET_CAPTURE] => 256
            [PREG_SPLIT_NO_EMPTY] => 1
            [PREG_SPLIT_DELIM_CAPTURE] => 2
            [PREG_SPLIT_OFFSET_CAPTURE] => 4
            [PREG_GREP_INVERT] => 1
        )

    [user] => Array
        (
            [MY_CONSTANT] => 1
        )

)

返回值

返回一个常量名 => 常量值数组,可选地按注册常量的扩展名分组。

示例

示例 #1 get_defined_constants() 示例

<?php
print_r
(get_defined_constants());
?>

上面的例子将输出类似于以下内容

Array
(
    [E_ERROR] => 1
    [E_WARNING] => 2
    [E_PARSE] => 4
    [E_NOTICE] => 8
    [E_CORE_ERROR] => 16
    [E_CORE_WARNING] => 32
    [E_COMPILE_ERROR] => 64
    [E_COMPILE_WARNING] => 128
    [E_USER_ERROR] => 256
    [E_USER_WARNING] => 512
    [E_USER_NOTICE] => 1024
    [E_ALL] => 2047
    [TRUE] => 1
)

参见

添加说明

用户贡献的说明 5 个说明

23
Bob
16 年前
如果你想获得一个类常量的数组,请将此方法添加到你的类定义中(正如 Peter P 在上面所说,get_defined_constants 无法处理类常量)。

<?php
public function get_class_constants()
{
$reflect = new ReflectionClass(get_class($this));
return
$reflect->getConstants());
}
?>

你也可以用它来重写 stdObject,以便所有你的类都有这个方法。
12
R4FC0R3
6 年前
如果你想直接访问一个类别,只需使用

<?php

print_r
(get_defined_constants(true)['Core']);

?>

你可以用你想要的类别替换 'Core'(例如 user)。

<?php

print_r
(get_defined_constants(true)['user']);

?>

警告:仅在开发环境中使用。
9
匿名
18 年前
如果你想过滤并只返回常量的前缀(例如,你的常量有一个命名方案),那么你可以使用这个快速的小函数。它在调试时非常有用。

<?php
function returnConstants ($prefix) {
foreach (
get_defined_constants() as $key=>$value)
if (
substr($key,0,strlen($prefix))==$prefix) $dump[$key] = $value;
if(empty(
$dump)) { return "Error: No Constants found with prefix '".$prefix."'"; }
else { return
$dump; }
}
?>

示例

<?php
define
("SITENAME_OPTION_ONE",true);
define("SITENAME_OPTION_TWO",false);
define("SITENAME_URL","foo");

print_r(returnConstants("SITENAME_OPTION"));
?>

将返回

数组
(
[SITENAME_OPTIONONE] => 1
[SITENAME_OPTIONTWO] =>
)
5
me at gogogadgetscott dot info
19 年前
<?php
/**
* 将常量值转换为字符串名称。
*
* @param mixed 常量值。
* @return string 常量名称。
* @access public
*/
function sch_get_consant($value)
{
$constants = get_defined_constants();
$name = array_search($value, $constants, TRUE);
return
$name;
}
?>
-3
S-Tian
2 年前
如果你想创建一个静态方法,你可以将其复制并粘贴到每个包含创建常量的类中,你可以使用

<php
public static function get_class_constants(): array
{
$reflect = new ReflectionClass(self::class);

return $reflect->getConstants();
}
?>
To Top