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

PhpStorm提示返回值应为'A'却返回'object',如何设置返回类型?

解决PhpStorm返回类型不匹配提示问题

先看你给出的代码:

class A {}
class B {}

class X
{
    private function create(string $class) : object
    {
        return new $class();
    }
    
    public function createA() : A
    {
        return $this->create('A');
    }

    public function createB() : B
    {
        return $this->create('B');
    }
}

PhpStorm的提示源于静态类型检查规则:create方法声明返回object类型,而createA/createB要求返回具体的A/B类——尽管二者都属于对象,但静态检查不认为object能直接兼容具体子类。针对A、B无共性的情况,推荐两种解决方案:

方案一:使用泛型注解(推荐,PHP 8.0+)

通过泛型注解让PhpStorm识别create方法返回的具体类型,兼顾通用性和类型检查精度:

class A {}
class B {}

class X
{
    /**
     * @template T of object
     * @param class-string<T> $class
     * @return T
     */
    private function create(string $class) : object
    {
        return new $class();
    }
    
    public function createA() : A
    {
        return $this->create(A::class);
    }

    public function createB() : B
    {
        return $this->create(B::class);
    }
}
  • @template T of object:定义泛型类型T,限定为对象范畴
  • class-string<T>:确保传入参数是T类的全限定名(用A::class替代字符串更规范)
  • @return T:指定返回值为具体的T类型,PhpStorm可准确识别返回的是A或B,消除提示

方案二:添加类型断言

在调用create方法时,直接告诉PhpStorm返回值的具体类型:

class X
{
    private function create(string $class) : object
    {
        return new $class();
    }
    
    public function createA() : A
    {
        return $this->create('A') as A;
    }

    public function createB() : B
    {
        return $this->create('B') as B;
    }
}

这种方法无需修改create方法本身,但每个调用处都要添加断言,适合不想使用泛型的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 17:42:19