You need to enable JavaScript to run this app. 为什么PHP中数组类型的可变函数变量可以直接调用执行?
优惠活动
大模型
产品
解决方案
定价
更多

为什么PHP中数组类型的可变函数变量可以直接调用执行?

这是PHP可变函数针对**可调用类型(callable)**的预设语法规则,属于官方定义的合法用法:

  • PHP执行$func()这类可变调用时,不会强制要求$func必须是字符串类型,会优先检测变量是否符合可调用类型的结构要求,只要满足规则就能正常执行。
  • 双元素数组是PHP可调用类型的标准写法之一,解析规则如下:
    • 第一个元素为字符串类名、第二个元素为字符串方法名时,会自动识别为调用该类的对应静态方法,你示例中的array("Foo", "bar")就符合这条规则,所以可以正常调用静态方法bar()
    • 第一个元素为类的实例对象、第二个元素为字符串方法名时,会自动识别为调用该实例的对应普通方法,你示例中的array(new Foo, "baz")符合这条规则,所以可以正常调用实例方法baz()
  • 你示例中的"Foo::bar"字符串写法,也是PHP预设的可调用类型格式,会被解析为调用Foo类的静态bar方法。

你可以通过is_callable()函数验证这几个$func变量的返回值均为true,就说明PHP本身认可它们是合法的可调用结构,和平时我们给call_user_func()传的回调参数识别规则完全一致。

内容的提问来源于stack exchange,提问作者ikhvjs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 07:30:01