Php 如何将常量作为函数名调用?

Php 如何将常量作为函数名调用?,php,function,constants,Php,Function,Constants,在PHP中,可以通过在变量中调用函数名来调用函数 函数myfunc(){echo'works';} $func='myfunc'; $func();//印刷“作品” 但是,你不能用常数来做这件事 define('func','myfunc'); func();//错误:未定义函数“func” 有一些变通办法,比如: $f=func; $f();//印刷“作品” 调用_user_func(func);//印刷“作品” 函数调用($f){$f();} 调用(func);//印刷“作品” 上的P

在PHP中,可以通过在变量中调用函数名来调用函数

函数myfunc(){echo'works';}
$func='myfunc';
$func();//印刷“作品”
但是,你不能用常数来做这件事

define('func','myfunc');
func();//错误:未定义函数“func”
有一些变通办法,比如:

$f=func;
$f();//印刷“作品”
调用_user_func(func);//印刷“作品”
函数调用($f){$f();}
调用(func);//印刷“作品”
上的PHP文档说明:

PHP函数以其名称作为字符串传递。可以使用任何内置或用户定义的函数,但语言构造除外

常量值似乎不可调用

我也试着检查了一下,当然

var_dump(可调用(func));
打印
bool(真)

那么,为什么会这样呢?据我所知,所有的解决方法都依赖于将常量值赋给变量,为什么不能调用常量


再说一次,为了让大家明白,我不需要调用函数的方法,我甚至在那里介绍了一些。我想知道为什么PHP不允许直接通过常量调用函数。

尝试将常量作为函数调用时,如下所示:

define('FUNC', 'myFunction');

function myFunction()
{
    echo 'Oh, hello there.';
}

FUNC(); // Fatal error: Call to undefined function FUNC()
将导致PHP解释器需要一个名为FUNC的函数。因此出现错误致命错误:调用未定义的函数FUNC()

尽管常量FUNC的类型是可调用的,但将其作为函数调用将不起作用。这仅仅是因为PHP需要一个名为FUNC的函数


因此,如果没有解决方法,您将无法通过常量直接调用函数。

因为您询问了原因,我想唯一的答案(可能不会让您满意)是:

因为它还没有被提出、讨论和接受。

试试这个。对我有用

constant('func')();

constant()
函数返回常量的值,在您的例子中是它的
myfunc
,然后应用圆括号
()
,您将得到有效的
myfunc()
调用。

这在PHP 7.0中起作用。唯一的问题是您必须使用更具表现力的语法,以便PHP知道您的意思是执行
myfunc
,而不是
func

<?php
function myfunc(){ echo 'works'; }
define('func', 'myfunc');

(func)();

也许这澄清了一些事情:@RichardA是的,我读过这个问题,但与这个问题相比,我的问题是为什么不将
func
定义为
“mysql\u error”
并调用
func()
工作。我想PHP就是这样工作的。当您执行
func()
时,PHP需要一个名为func的函数,尽管func是可调用的。我能给你的最好答案是“如果没有解决方法,你不能将常数作为函数调用。”@Fivell我知道这是另一个解决方法,但我想知道PHP为什么会这样做。@Fivell
eval
是邪恶的。是的,这是一些东西,但我在问题中告诉了大部分。我仍然在寻找一些解释,来解释他们为什么会这样做,如果有的话。为什么你要问这里的用户而不是PHP开发人员呢?@Pietu1998我认为没有任何解释。这就是我想的。如果常量可以这样调用,那就有点混乱了,不是吗?没错,人们不知道它是常量还是函数,但仍然是。是的,所以没有真正的理由不允许这样做;它可以被提议、接受并添加到PHP中吗@RichardA实际上找到了一份文档,它至少证实了变量函数只能处理变量。我想这在技术上是可能的。当运行时检测到没有这样的函数时,它可以在下一步中尝试找到具有该名称的常量并重新开始。也许在附近,但这是否是一个好的功能是另一个问题。老实说,它给谈判桌带来了什么,超过了可能出现的混乱?