0

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

假设参数是常量还是变量,我如何判断参数是否已传递?

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

4

3 回答 3

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

为此,您唯一需要更改的是传递常量的名称而不是常量本身。好消息:这也将防止在您的原始代码中抛出通知。

于 2013-08-13T05:07:17.293 回答
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
于 2013-08-13T05:03:16.177 回答
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.";
   }
}
于 2013-08-13T05:07:19.933 回答