Php 如何将常量作为函数名调用?
在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
函数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为什么会这样做。@Fivelleval
是邪恶的。是的,这是一些东西,但我在问题中告诉了大部分。我仍然在寻找一些解释,来解释他们为什么会这样做,如果有的话。为什么你要问这里的用户而不是PHP开发人员呢?@Pietu1998我认为没有任何解释。这就是我想的。如果常量可以这样调用,那就有点混乱了,不是吗?没错,人们不知道它是常量还是函数,但仍然是。是的,所以没有真正的理由不允许这样做;它可以被提议、接受并添加到PHP中吗@RichardA实际上找到了一份文档,它至少证实了变量函数只能处理变量。我想这在技术上是可能的。当运行时检测到没有这样的函数时,它可以在下一步中尝试找到具有该名称的常量并重新开始。也许在附近,但这是否是一个好的功能是另一个问题。老实说,它给谈判桌带来了什么,超过了可能出现的混乱?