如何判断param是否通过假设它是一个常数?

时间:2013-08-13 04:57:21

标签: php constants

我正在使用此代码(注意: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...
    }
}

我如何判断参数是否通过,假设它是常数或只是变量?

我知道这不是很好的编程,但这是我想要做的。

3 个答案:

答案 0 :(得分:1)

如果未定义常量,PHP会将其视为字符串(在本例中为“HELLO_WORLD”)(并将注意事项发送到日志文件中)。

可以按如下方式进行检查:

function my_function($foo) {
    if ($foo != 'HELLO_WORLD') {
        //Do something...
    }
}

但遗憾的是,这段代码有两大问题:

  • 您需要知道传递的常量的名称
  • constand不包含它自己的名字

更好的解决方案是传递常量名而不是常量本身:

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