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

Php 使用eval()检查常量是否已设置,php,eval,constants,Php,Eval,Constants,我试图通过传递变量的单个部分来检查定义的变量。(变量的其余部分是静态的,所有其他部分都是相同的),所以我做了一个测试,看看这是否可行 它不起作用,但也许我正在做一些很容易修复的小事情 define('TEST', 'works'); $test = 't'; echo TES . strtoupper($test); echo eval('TES . strtoupper('.$test.');'); echo eval('TES . strtoupper(\'$test\');'); ec

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

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

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

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

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

这应该适合您:

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

echo constant("TES". strtoupper($test));
输出:

works

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


“测试”
不是一个全局变量。这是一个好主意。这些常量具有全局作用域,可以从任何上下文访问它们(假设您知道要使用的常量的名称)。没有必要使用
eval()
进行任何黑客攻击

如果出于某种原因在运行时生成常量的名称,可以使用PHP函数检查是否有已定义的具有该名称的常量,如果该常量存在,则可以使用该函数获取其值

像这样:

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");
}

为什么不直接使用
defined
echo eval('echo constant(“TEST”);)为什么要使用
eval
?那么我们的问题在哪里?下面的答案是否回答了您的问题/解决了您的问题?请使用“已定义”,否则您将收到警告。干得好,谢谢。现在我可以在我正在学习的一门课上非常刻板。当使用eval检查全局变量是否存在时不是。这不能回答问题。它不响应test的值。我没有添加全局标记,其他人添加了。@Iscariot我处理了它并进行了回滚,因为其他人更改了您代码的意图。是的,我喜欢人们如何更改您的问题以使他们的答案正确。。我百分之百肯定那个大学的家伙,如果用ult账户投票给他自己。“马上就是+4了。”加略人:我假设那个大学男生,你是指乌里·戈伦;只要有一个简单的原则,除非你能证明,否则不要指责别人。
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");
}