php - 如何调用常量作为函数名?

标签 php function constants

在 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)();

在线尝试:https://3v4l.org/fsGmo

PHP 的问题在于常量和标识符在分词器中表示为同一事物。 See online how this syntax is tokenized by PHP

当您使用圆括号更改常量操作的优先级时,您告诉 PHP 首先解析常量并使用它的值来执行函数。否则 PHP 会认为 func 是您的函数的名称。

关于php - 如何调用常量作为函数名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22665619/

相关文章:

php - fatal error : Call to a member function prepare() on integer

vba - 如何用函数调用的值声明一个常量变量

java - 实现在应用程序启动时而不是在编译时初始化的 "constants"类

javascript - Angular 常数: config

php - 将正则表达式存储在 MySQL 数据库表中并对其进行处理

php - 如何在斜杠后取一个字符串?

php - Codeigniter 内部连接查询不起作用

c++ - 现在我无法让分子输出任何数字。当我这样做时,我得到 0/任何分母。我错过了什么?

javascript - PHP 依赖于 Javascript 函数

php - 无法从远程计算机上的 mysql 工作台连接到 phpmyadmin 或数据库