在 PHP 中,您可以通过在变量中调用函数名称来调用函数。
function myfunc(){ echo 'works'; }
$func = 'myfunc';
$func(); // Prints "works"
但是,你不能用常量来做到这一点。
define('func', 'myfunc');
func(); // Error: function "func" not defined
有一些解决方法,例如:
$f = func;
$f(); // Prints "works"
call_user_func(func); // Prints "works"
function call($f){ $f(); }
call(func); // Prints "works"
PHP 文档上callable https://www.php.net/manual/en/language.types.callable.php says:
PHP 函数通过其名称作为字符串进行传递。可以使用任何内置或用户定义的函数,但语言构造除外。
似乎没有什么关于常量值不可调用的问题。
我也尝试过检查一下,当然,
var_dump(is_callable(func));
prints bool(true)
.
现在,有没有一个解释,为什么会这样呢?据我所知,所有解决方法都依赖于将常量值分配给变量,为什么不能调用常量?
再说一遍,为了非常清楚地说明,我不需要调用该函数的方法,我什至在那里提供了一些方法。我想知道whyPHP 不允许直接通过常量调用函数。
从 PHP 7.0 开始,此功能有效。但你必须使用更详细的语法,以便 PHP 知道你要执行myfunc
代替func
.
<?php
function myfunc(){ echo 'works'; }
define('func', 'myfunc');
(func)();
在线尝试这个:https://3v4l.org/fsGmo https://3v4l.org/fsGmo
PHP 的问题在于常量和标识符在分词器中表达为相同的东西。在线查看 PHP 如何将此语法标记化 https://3v4l.org/uE4kg
当您使用括号更改常量操作的优先级时,您告诉 PHP 首先解析该常量并使用其值来执行该函数。否则 PHP 会认为func
是你的函数的名称。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)