如果您希望获取类常量的数组,请将此方法添加到您的类定义中(如 Peter P 上述所说,get_defined_constants 不适用于类常量)
<?php
public function get_class_constants()
{
$reflect = new ReflectionClass(get_class($this));
return $reflect->getConstants());
}
?>
您还可以使用它覆盖 stdObject,以便所有类都具有此方法(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
get_defined_constants — 返回一个关联数组,其中包含所有常量及其值
返回当前定义的所有常量的名称和值。这包括由扩展创建的常量以及使用 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
)
如果您希望获取类常量的数组,请将此方法添加到您的类定义中(如 Peter P 上述所说,get_defined_constants 不适用于类常量)
<?php
public function get_class_constants()
{
$reflect = new ReflectionClass(get_class($this));
return $reflect->getConstants());
}
?>
您还可以使用它覆盖 stdObject,以便所有类都具有此方法如果您想直接访问一个类别,只需使用
<?php
print_r(get_defined_constants(true)['Core']);
?>
您可以将“Core”替换为您想要的类别(例如 user)
<?php
print_r(get_defined_constants(true)['user']);
?>
警告:仅在开发环境中使用此方法如果您希望筛选并仅返回常量的前缀(即,您的常量具有命名方案),则可以使用此快速的小函数。它在调试时非常方便。
<?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] =>
)<?php
/**
* 将常量值转换为字符串名称。
*
* @param mixed 常量值。
* @return string 常量名称。
* @access public
*/
function sch_get_consant($value)
{
$constants = get_defined_constants();
$name = array_search($value, $constants, TRUE);
return $name;
}
?>