使用eval()检查是否设置了常量

时间:2015-05-20 11:13:54

标签: php eval constants

我试图根据传递变量的单个部分来检查已定义的变量。 (变量的其余部分是静态的,并且它的所有其他部分都是相同的),所以我做了一个测试,以确定这是否可行。

它不起作用,但也许我正在做一些容易修复的小事。

define('TEST', 'works');
$test = 't';

echo TES . strtoupper($test);
echo eval('TES . strtoupper('.$test.');');
echo eval('TES . strtoupper(\'$test\');');

echo eval('TES' . strtoupper($test) . ';');

3 个答案:

答案 0 :(得分:5)

如果要检查是否定义了常量,只需使用defined()

<?php
if (defined('TEST')) {
    echo TEST;
}
?>

答案 1 :(得分:2)

这应该适合你:

只需使用constant()将常量名称构建为字符串,然后将其传递给函数。

echo constant("TES". strtoupper($test));

输出:

works

答案 2 :(得分:0)

'TEST' 不是全局变量。这是一个constant。常量具有全局范围,可以从任何上下文访问它们(假设您知道要使用的常量的名称)。没有必要使用eval()进行任何黑客攻击。

如果由于某种原因在运行时生成常量的名称,则可以使用PHP函数defined()来检查是否已经定义了具有该名称的常量,如果常量存在,则可以获得使用函数constant()

的值

像这样:

define('TEST', 'works');
$test = 't';

echo 'TES'.strtoupper($test);

// Compute the constant's name
$name = 'TES'.strtoupper($test);
// Check if the constant exists and get its value
if (defined($name)) {
    echo("The constant '".$name."' is already defined.\n");
    echo("It's value is: ".constant($name)."\n");
}