gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 13:26:20 26 4
gpt4 key购买 nike

在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com