我正在使用此代码(注意:HELLO_WORLD从未定义过!):
function my_function($Foo) {
//...
}
my_function(HELLO_WORLD);
可能会定义 HELLO_WORLD
,但可能不会。我想知道它是否通过,如果HELLO_WORLD
被传递,假设它是恒定的。我不关心HELLO_WORLD
的价值。
这样的事情:
function my_function($Foo) {
if (was_passed_as_constant($Foo)) {
//Do something...
}
}
我如何判断参数是否通过,假设它是常数或只是变量?
我知道这不是很好的编程,但这是我想要做的。
答案 0 :(得分:1)
如果未定义常量,PHP会将其视为字符串(在本例中为“HELLO_WORLD”)(并将注意事项发送到日志文件中)。
你可以按如下方式进行检查:
function my_function($foo) {
if ($foo != 'HELLO_WORLD') {
//Do something...
}
}
但遗憾的是,这段代码有两大问题:
更好的解决方案是传递常量名而不是常量本身:
function my_function($const) {
if (defined($const)) {
$foo = constant($const);
//Do something...
}
}
为此,您唯一需要更改的是传递常量的名称而不是常量本身。好事:这也会阻止原始代码中的通知。
答案 1 :(得分:0)
你可以这样做:
function my_function($Foo) {
if (defined($Foo)) {
// Was passed as a constant
// Do this to get the value:
$value = constant($Foo);
}
else {
// Was passed as a variable
$value = $Foo;
}
}
但是你需要引用字符串来调用函数:
my_function("CONSTANT_NAME");
此外,只有在没有变量的值与定义的常量名称相同时,这才有效:
define("FRUIT", "watermelon");
$object = "FRUIT";
my_function($object); // will execute the passed as a constant part
答案 2 :(得分:0)
试试这个:
$my_function ('HELLO_WORLD');
function my_function ($foo)
{
$constant_list = get_defined_constants(true);
if (array_key_exists ($foo, $constant_list['user']))
{
print "{$foo} is a constant.";
}
else
{
print "{$foo} is not a constant.";
}
}