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

PHP中如何为返回$this的方法提供IDE语言服务器类型提示支持

解决方案

通用兼容方案(支持所有PHP7+版本)

目前PHP低版本虽未原生支持static作为返回类型声明,但主流PHP IDE和语言服务器(包括你使用的Intelephense)均支持通过PHPDoc标注实现该能力,完全可以满足链式调用的类型提示需求,无需修改业务逻辑:

<?php
class A {
    /**
     * @return static 返回当前调用类的实例
     */
    function a(): self
    {
        return $this;
    }
}

class B extends A {
    /**
     * @return static 返回当前调用类的实例
     */
    function b(): self
    {
        return $this;
    }
}

$o = new B();
$o-> // 正常提示a()、b()
$o->a()-> // 同样识别为B类实例,提示a()、b(),符合预期

该方案对trait场景同样生效,只需给trait内的方法加上对应PHPDoc标注即可解决类型识别错误的问题:

trait trait1 {
    /**
     * @return static
     */
    function a(): self
    {
        return $this;
    }
}

trait trait2 {
    /**
     * @return static
     */
    function b(): self
    {
        return $this;
    }
}

class A {
    use trait1;
}
class B {
    use trait1;
    use trait2;
}

$o = new B();
$o->a()-> // 正确提示a()、b()两个方法

原生支持方案(PHP 8.3+)

PHP 8.3已经正式支持static作为返回类型声明,原生满足你的需求,无需额外PHPDoc标注:

<?php
class A {
    function a(): static
    {
        return $this;
    }
}

class B extends A {
    function b(): static
    {
        return $this;
    }
}

$o = new B();
$o->a()-> // 原生识别为B类实例,提示所有可用方法

以上两种方案都完美适配流式接口设计场景,第三方开发者扩展子类新增方法后,IDE无需额外配置即可自动识别所有可用方法,不会打断链式调用的代码提示体验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:09:02