使用constant()函数和直接按名称引用常量有什么区别?

时间:2014-02-26 07:27:23

标签: php constants

根据PHP手册constant(),如果您需要检索常量的值,但不知道其名称,则非常有用。即它存储在变量中或由函数返回。

define("MAXSIZE", 100);

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

如果有人不知道MAXSIZE,他怎么能使用 constant("MAXSIZE") 。这足以使用 echo MAXSIZE 吗?有人可以用一个例子解释一下吗?我尝试了下面的代码,它不起作用。

    define("MAXSIZE", 100);

    $x = MAXSIZE;
    echo constant($x);

2 个答案:

答案 0 :(得分:9)

尝试一下,应该有效

define("MAXSIZE", 100);

$x = "MAXSIZE";
echo constant($x);

如果你有一个字符串变量,方法constant()将返回一个已定义常量的值。

考虑这个例子。

define("MAX", 1000);
define("MIN", 1);

$val = 50; 
$const = null;
if ( $val < 50 ) {
    $const = "MAX";
} else {
    $const = "MIN";
}

echo constant($const); // output 1

答案 1 :(得分:2)

通过do not know its name手册意味着constant()除了字符串文字外,还可以接受表达式(例如字符串和变量的变量或串联)作为常量的名称。

这种描述确实有点误导。描述这个的更好方法是说你不必知道它的名字。例如,如果常量的名称存储在变量中或由类定义,则不能直接按名称引用常量。这是constant()派上用场的地方,允许我们动态引用常量的名称而不实际知道

例如,考虑以下区别:

define('MAXSIZE', 100);
echo MAXSIZE;

define('MAXSIZE-2', 100);

$sizeConstantPrefix = 'MAXSIZE';
$sizeConstantSuffix = '-2';

echo constant($sizeConstantPrefix.$sizeConstantSuffix);

或更极端

class whatever {
   const 'MAXSIZE-2' = 100;
}

$className          = 'whatever'
$sizeConstantPrefix = 'MAXSIZE';
$sizeConstantSuffix = '-2';

echo constant($className.'::'.$sizeConstantPrefix.$sizeConstantSuffix);