Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 假设参数是常量,如何判断是否传递了该参数?_Php_Constants - Fatal编程技术网

Php 假设参数是常量,如何判断是否传递了该参数?

Php 假设参数是常量,如何判断是否传递了该参数?,php,constants,Php,Constants,我正在使用此代码(注意:HELLO\u WORLD从未定义过!): HELLO\u WORLD可能已定义,但可能未定义。我想知道它是否被传递,并且假设它是常量,是否传递了HELLO\u WORLD。我不在乎HELLO\u WORLD的价值 大概是这样的: function my_function($Foo) { if (was_passed_as_constant($Foo)) { //Do something... } } function my_functi

我正在使用此代码(注意:HELLO\u WORLD从未定义过!):

HELLO\u WORLD
可能已定义,但可能未定义。我想知道它是否被传递,并且假设它是常量,是否传递了
HELLO\u WORLD
。我不在乎
HELLO\u WORLD
的价值

大概是这样的:

function my_function($Foo) {
    if (was_passed_as_constant($Foo)) {
        //Do something...
    }
}
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;
    }
}
假设某个参数是常量还是变量,我如何判断该参数是传递的?


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

你可以这样做:

function my_function($Foo) {
    if (was_passed_as_constant($Foo)) {
        //Do something...
    }
}
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

如果一个常量没有定义,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...
    }
}
为此,唯一需要更改的是传递常量的名称,而不是常量本身。好处是:这还可以防止在原始代码中抛出通知。

尝试以下方法:

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

在尝试使用它之前,请先测试它是否已定义。经过编辑,表明我的示例中从未定义过
HELLO\u WORLD
,这意味着所有建议使用
defined()
的答案都是无用的,除非我遗漏了什么。我问过类似的问题,这可能对你有帮助:这是有帮助的:他想知道给定的参数是常数还是变量。啊,我只是想他想知道它是否定义了。@Mr.Alien你是对的。我已经更新了我的问题,使用了更好的措辞。你的第一句话是最有帮助的。我注意到以前未定义的常量被转换为字符串,但在提问时没有考虑。我想我可能不得不想一个替代的方法来做我想做的事。