You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP8中如何将类方法作为参数传递给跨文件公共函数并正确调用

问题根因

你当前的写法存在参数求值顺序问题:调用doThis($this->bar())时,PHP会先执行$this->bar()直接输出foo,再将bar()的返回值(该方法无显式return,默认返回null)传入doThis。call_user_func(null)不会触发任何执行逻辑,因此最终仅输出foo。

PHP8下的修复方案

你需要向doThis传入可调用类型的参数,而非直接执行方法后的返回值,有两种常用写法:

写法1:通用可调用数组(兼容所有PHP7+、PHP8版本)

修改Foo类的test方法即可:

class Foo
{
  public function test()
  {
    // 传入实例方法的可调用结构:[实例, 方法名]
    doThis([$this, 'bar']);
  }

  public function bar()
  {
    echo 'foo';
  }
}

写法2:一阶可调用语法(仅支持PHP8.1及以上版本)

语法更简洁,也能明确传递方法引用:

public function test()
{
  doThis($this->bar(...));
}

修改后执行逻辑完全符合预期:doThis被调用时先输出this must run,再通过call_user_func执行bar方法输出foo。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:42:01