在 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"
callable
上的 PHP 文档说:
A PHP function is passed by its name as a string. Any built-in or user-defined function can be used, except language constructs.
常量值似乎是不可调用的。
我也试过查了一下,当然,
var_dump(is_callable(func));
打印bool(true)
。
现在,是否有关于为什么会这样的解释?据我所知,所有解决方法都依赖于将常量值分配给变量,为什么不能调用常量?
再说一次,为了让它非常清楚,我不需要调用函数的方法,我什至在那里展示了一些。我想知道 为什么 PHP 不允许直接通过常量调用函数。
最佳答案
这从 PHP 7.0 开始有效。唯一的问题是您必须使用更具表现力的语法,以便 PHP 知道您要执行 myfunc
而不是 func
。
<?php
function myfunc(){ echo 'works'; }
define('func', 'myfunc');
(func)();
PHP 的问题在于常量和标识符在分词器中表示为同一事物。 See online how this syntax is tokenized by PHP
当您使用圆括号更改常量操作的优先级时,您告诉 PHP 首先解析常量并使用它的值来执行函数。否则 PHP 会认为 func
是您的函数的名称。
关于php - 如何调用常量作为函数名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22665619/