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
)

参考

add a note

User Contributed Notes 5 notes

up
23
Bob
17 years ago
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):<?phppublic 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
up
12
R4FC0R3
7 years ago
If you want to access directly on one category, just use:<?phpprint_r(get_defined_constants(true)['Core']);?>you can replace 'Core' by the category you wish (e.g. user):<?phpprint_r(get_defined_constants(true)['user']);?>Warning: only use this on development side
up
9
Anonymous
19 years ago
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.<?phpfunction 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:<?phpdefine("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] => )
up
5
me at gogogadgetscott dot info
20 years ago
<?php/** * Convert constant value into string name. * * @param  mixed  Constant value. * @return string Constant name. * @access public */function sch_get_consant($value){    $constants = get_defined_constants();    $name = array_search($value, $constants, TRUE);        return $name;}?>
up
-3
S-Tian
3 years ago
If you want to create a static method that you can copy and paste into each class you have constants created, you can use:<phppublic static function get_class_constants(): array{    $reflect = new ReflectionClass(self::class);    return $reflect->getConstants();}?>
To Top