我试图根据传递变量的单个部分来检查已定义的变量。 (变量的其余部分是静态的,并且它的所有其他部分都是相同的),所以我做了一个测试,以确定这是否可行。
它不起作用,但也许我正在做一些容易修复的小事。
define('TEST', 'works');
$test = 't';
echo TES . strtoupper($test);
echo eval('TES . strtoupper('.$test.');');
echo eval('TES . strtoupper(\'$test\');');
echo eval('TES' . strtoupper($test) . ';');
答案 0 :(得分:5)
如果要检查是否定义了常量,只需使用defined()
<?php
if (defined('TEST')) {
echo TEST;
}
?>
答案 1 :(得分:2)
答案 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");
}