派生类中 PHPDoc 中的 PHP 类型提示

Posted

技术标签:

【中文标题】派生类中 PHPDoc 中的 PHP 类型提示【英文标题】:PHP type hinting in PHPDoc in derived classes 【发布时间】:2015-12-30 20:41:46 【问题描述】:

看看这个代码示例:

class basetype 
    public function method() 
        return false;
    


class extendtype extends basetype 
    public function methodb() 
        return true;
    


class aa 
    /**
     * @var basetype
     */
    protected $membera;


class bb extends aa 
    public function __constructor() 
        $this->membera = new extendtype();
    

    public function dosomething() 
        $this->membera->methodb();
    

phpStorm 中编辑时,我收到“在类基类型中找不到方法方法 b”的警告。我使用预先存在的代码库,无法更改基类。那么我该怎么做才能消除这个警告呢?

【问题讨论】:

你为什么是@var basetype $membera 变量?是的,$membera 是一种基本类型,但这可能会让 PHPStrorm 感到困惑。只需删除它,看看你是否得到同样的错误。 我认为您误读了保证。过去它形成phpstorm。归根结底,这只是一个提示,如果您的代码有效,则无关紧要。 PHPStorm type hinting subclasses of baseclass的可能重复 【参考方案1】:

您可以在您的class BB 中覆盖$membera,并为其提供一个具有派生类型的新文档块。

class bb extends aa 
    /**
     * @var extendtype
     */
    protected $membera;

    public function __constructor() 
        $this->membera = new extendtype();
    

    public function dosomething() 
        $this->membera->methodb();
    

【讨论】:

以上是关于派生类中 PHPDoc 中的 PHP 类型提示的主要内容,如果未能解决你的问题,请参考以下文章

基类 派生类 类的继承与约束

抽象类中的纯虚函数,返回类型为基/派生类型

在 TypeScript 中为具有类型变量的抽象类中的派生类分配泛型类型

如何初始化派生类中的静态成员?

通过“函数参数”中的 const 类型在派生类中具有不同函数参数的虚拟函数会破坏虚拟机制吗? [复制]

派生类中的虚函数