©
本文档使用
php.cn手册 发布
(PHP 4 >= 4.1.0, PHP 5, PHP 7)
get_defined_constants — 返回所有常量的关联数组,键是常量名,值是常量值
$categorize
= false
] )返回当前所有已定义的常量名和值。 这包含 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 ))
返回的数组为 常量名 => 常量值,也可以按注册变量的扩展名称来分组。
版本 | 说明 |
---|---|
5.3.1 | 仅作用于 Windows:内核常量归类到 Core,之前是 mhash。 |
5.3.0 | 内核常量归类为 Core,之前是 internal。在 Windows 上,内核常量归类到 mhash。 |
5.2.11 | categorize 参数现在可以合适得被处理。
在此之前,categorize 被解释为 !is_null($categorize),导致任何非 NULL 的值会强制常量分类。
|
5.0.0 |
增加了参数 categorize 。
|
Example #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 )
[#1] bimal at sanjaal dot com [2013-02-28 09:10:33]
Though the syntax editors mark the following as error, it executes successfully under PHP, as you desire.
<?php
$user_defined_constants=get_defined_constants(true)['user'];
print_r($user_defined_constants);
?>
No errors/warnings seen.
Only the special thing here is, you are passing true to the function, and extracting the result's 'user' index directly.
[#2] Bob [2008-08-07 21:50:34]
Add this method to your class definition if you want an array of class constants (get_defined_constants doesn't work with class constants as Peter P said above):
<?php
public function get_class_constants()
{
$reflect = new ReflectionClass(get_class($this));
return $reflect->getConstants());
}
?>
You could also override stdObject with it so that all your classes have this method
[#3] [2006-01-05 11:29:09]
If you want to filter through and return only the prefix for your constants (i.e. you have constants with a naming scheme), then you can use this quick little function. It comes in handy for debugging.
<?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; }
}
?>
Example:
<?php
define("SITENAME_OPTION_ONE",true);
define("SITENAME_OPTION_TWO",false);
define("SITENAME_URL","foo");
print_r(returnConstants("SITENAME_OPTION"));
?>
Will return:
Array
(
[SITENAME_OPTIONONE] => 1
[SITENAME_OPTIONTWO] =>
)
[#4] me at gogogadgetscott dot info [2005-06-18 11:14:22]
<?php
function sch_get_consant($value)
{
$constants = get_defined_constants();
$name = array_search($value, $constants, TRUE);
return $name;
}
?>