constant

(PHP 4 >= 4.0.4, PHP 5, PHP 7)

constant返回一个常量的值

说明

mixed constant ( string $name )

通过 name 返回常量的值。

当你不知道常量名,却需要获取常量的值时,constant() 就很有用了。也就是常量名储存在一个变量里,或者由函数返回常量名。

该函数也适用 class constants

参数

name

常量名。

返回值

返回常量的值。如果常量未定义则返回 NULL

错误/异常

如果常量未定义,会产生一个 E_WARNING 级别的错误。

范例

Example #1 constant() 的例子

<?php

define
("MAXSIZE"100);

echo 
MAXSIZE;
echo 
constant("MAXSIZE"); // same thing as the previous line


interface bar {
    const 
test 'foobar!';
}

class 
foo {
    const 
test 'foobar!';
}

$const 'test';

var_dump(constant('bar::'$const)); // string(7) "foobar!"
var_dump(constant('foo::'$const)); // string(7) "foobar!"

?>

参见

User Contributed Notes

ss 22-Sep-2017 04:11
ss

sssssss
ssssssssssssssssss
s
ssssssssssssss
ssssssssssssssssssssssss
ss
s
s
ssssssssssss
mohammad alzoqaily 22-Sep-2017 04:08
// 1)  you can store the name of constant in default variable
 //     and use it without identify it's name :)

        $str= "constName";
     
        define("constName","this is constant");

        echo constant($str);
      

       output:
             this is constant

// 2)  good for dynamic generating  constants
      

         function generateConst( $const ,  $value , $sensitivity=TRUE )
             {
             
                    define( "$const" , "$value ",$sensitivity);
              }

              $CONST="cost";
              $VALUE="100$";
             
             generateConst( $CONST , $VALUE);
                         
             echo constant($const);

        output:
                100$
helvete at zhouba dot cz 03-Nov-2016 08:08
It is worth noting, that keyword 'self' can be used for constant retrieval from within the class it is defined

<?php
class Foo {
  const
PARAM_BAR = 'baz';

  public function
getConst($name) {
    return
constant("self::{$name}");
  }
}

$foo = new Foo();
echo
$foo->getConst('PARAM_BAR'); // prints 'baz'
?>
t dot kmieliauskas at gmail dot com 21-Apr-2015 11:02
If you are referencing class constant (either using namespaces or not, because one day you may want to start using them), you'll have the least headaches when doing it like this:

<?php
class Foo {
    const
BAR = 42;
}
?>
<?php
namespace Baz;
use \
Foo as F;

echo
constant(F::class.'::BAR');
?>

since F::class will be dereferenced to whatever namespace shortcuts you are using (and those are way easier to refactor for IDE than just plain strings with hardcoded namespaces in string literals)
Richard J. Turner 31-Jan-2013 08:57
As of PHP 5.4.6 constant() pays no attention to any namespace aliases that might be defined in the file in which it's used. I.e. constant() always behaves as if it is called from the global namespace. This means that the following will not work:

<?php
class Foo {
    const
BAR = 42;
}
?>

<?php
namespace Baz;

use \
Foo as F;

echo
constant('F::BAR');
?>

However, calling constant('Foo::BAR') will work as expected.
adam at adamhahn dot com 28-Sep-2011 09:59
This function is namespace sensitive when calling class constants.

Using:
<?php namespace sub;

class
foo {
    const
BAR = 'Hello World';
}

constant('foo::BAR'); // Error

constant('sub\foo::BAR'); // works

?>

This does not seem to affect constants defined with the 'define' function. Those all end up defined in the root namespace unless another namespace is implicitly defined in the string name of the constant.
bohwaz 05-Jul-2010 03:28
Return constants from an object. You can filter by regexp or match by value to find a constant name from the value.

Pretty useful sometimes.

<?php

function findConstantsFromObject($object, $filter = null, $find_value = null)
{
   
$reflect = new ReflectionClass($object);
   
$constants = $reflect->getConstants();
   
    foreach (
$constants as $name => $value)
    {
        if (!
is_null($filter) && !preg_match($filter, $name))
        {
            unset(
$constants[$name]);
            continue;
        }
       
        if (!
is_null($find_value) && $value != $find_value)
        {
            unset(
$constants[$name]);
            continue;
        }
    }
   
    return
$constants;
}

?>

Examples :

<?php

class Example
{
    const
GENDER_UNKNOW = 0;
    const
GENDER_FEMALE = 1;
    const
GENDER_MALE = 2;

    const
USER_OFFLINE = false;
    const
USER_ONLINE = true;
}

$all = findConstantsFromObject('Example');

$genders = findConstantsFromObject('Example', '/^GENDER_/');

$my_gender = 1;
$gender_name = findConstantsFromObject('Example', '/^GENDER_/', $my_gender);

if (isset(
$gender_name[0]))
{
   
$gender_name = str_replace('GENDER_', '', key($gender_name));
}
else
{
   
$gender_name = 'WTF!';
}

?>
hellekin 25-May-2010 05:07
Checking if a constant is empty is bork...

You cannot

<?php
define
('A', '');
define('B', 'B');

if (empty(
B)) // syntax error
if (empty(constant('B'))) // fatal error

// so instead, thanks to LawnGnome on IRC, you can cast the constants to boolean (empty string is false)
if (((boolean) A) && ((boolean) B))
 
// do stuff
?>
dachnik 10-Apr-2010 08:41
You can define values in your config file using the names of your defined constants, e.g.

in your php code:
define("MY_CONST",999);

in you config file:
my = MY_CONST

When reading the file do this:

$my = constant($value); // where $value is the string "MY_CONST"

now $my holds the value of 999
XC 19-Jan-2007 11:13
When you often write lines like

<?php

if(defined('FOO') && constant('FOO') === 'bar')
{
...
}

?>

to prevent errors, you can use the following function to get the value of a constant.

<?php

function getconst($const)
{
    return (
defined($const)) ? constant($const) : null;
}

?>

Finally you can check the value with

<?php

if(getconst('FOO') === 'bar')
{
...
}

?>

It's simply shorter.
narada dot sage at googlemail dot com 13-Jul-2006 03:01
To access the value of a class constant use the following technique.

<?php

class a {
    const
b = 'c';
}

echo
constant('a::b');

// output: c

?>
service at dual-creators dot de 16-May-2006 07:00
It's easily to user constant() and define() to translate some words from your database-saves.

For example:
You have a table userprofil and one coloumn is "gender".
Gender can be male or female but you will display "maennlich" or "weiblich" (german words for it - whatever...)

First step: Fetch into $Gender

Second:
define("male", "maennlich");
define("female", "weiblich");

Third:
echo constant($Gender);

Now, the index of the variable $Gender will be handled like a constant!

(It works like "echo male;" for better understanding)

And a result of this, it displays maennlich btw. weiblich!

greetz
Trevor Blackbird > yurab.com 18-Apr-2006 11:58
Technically you can define constants with names that are not valid for variables:

<?php

// $3some is not a valid variable name
// This will not work
$3some = 'invalid';

// This works
define('3some', 'valid');
echo
constant('3some');

?>

Of course this is not a good practice, but PHP has got you covered.
11-Oct-2005 04:20
In reply to VGR_experts_exchange at edainworks dot com

To check if a constant is boolean, use this instead:

<?php
if (TRACE === true)  {}
?>

Much quicker and cleaner than using defined() and constant() to check for a simple boolean.

IMO, using ($var === true) or ($var === false) instead of ($var) or (!$var) is the best way to check for booleans no matter what. Leaves no chance of ambiguity.
Joachim Kruyswijk 13-Nov-2004 06:12
The constant name can be an empty string.

Code:

define("", "foo");
echo constant("");

Output:

foo
Andre 27-Apr-2003 10:10
Maybe this is useful:

$file_ext is the file Extension of the image

<?php
if ( imagetypes() & @constant('IMG_' . strtoupper($file_ext)) )
{
   
$file_ext = $file_ext == 'jpg' ? 'jpeg' : $file_ext;
   
$create_func = 'ImageCreateFrom' . $file_ext;
}
?>