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

PHP如何在一行代码中实现两个函数的链式调用?

错误原因
  1. 原代码中outside()方法没有设置返回值,PHP中无返回值的方法默认返回null,因此调用$foo->outside()后得到的是null,尝试对null调用inside()方法自然触发致命错误。
  2. 你在outside()内部定义的inside()属于全局函数,不是bar类的成员方法,即使outside()有返回值,也无法通过对象链式调用的方式访问这个全局函数。
可行实现方案

方案1:标准链式调用(最常用,性能最优)

将inside()定义为bar类的成员方法,outside()执行完自身逻辑后返回当前类实例$this即可支持链式调用:

class bar {
    public function outside(){
        // 此处可放置outside需要执行的原有逻辑
        return $this;
    }

    public function inside(){
        return "baz";
    }
}

$foo = new bar();
echo $foo->outside()->inside(); // 正常输出 baz

方案2:通过匿名类实现inside封装(PHP 7+支持)

如果需要限制inside()仅在调用outside()后可访问,不直接暴露为类的公共方法,可以让outside()返回包含inside()方法的匿名类实例:

class bar {
    public function outside(){
        return new class {
            public function inside(){
                return "baz";
            }
        };
    }
}

$foo = new bar();
echo $foo->outside()->inside(); // 正常输出 baz
补充说明

原代码的写法实际调用完$foo->outside()后,inside()会被注册为全局函数,直接执行echo inside();也可以输出baz,但不符合要求的链式调用语法,且污染全局函数命名空间,不推荐使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:57:03