【问题标题】:PHPDoc, Factory @return typePHPDoc,工厂@return 类型
【发布时间】:2015-07-22 15:35:22
【问题描述】:

假设我已经

  • 具有一个抽象方法的抽象类。
  • 2 个以自己的方式定义抽象方法的子类。
  • 根据参数返回 2 个子类之一的实例的工厂。

以下是示例代码

abstract class Datalist{
    abstract public function render($arg1, $arg2);
}

class Datalist_Table{
    public function render($arg1, $arg2){
        /* do something here */
    }
}

class Datalist_List{
    public function render($arg1, $arg2){
        /* do something here */
    }
}

class DatalistFactory{

    /**
     * usual stuff
     *
     * @return Datalist
     */
    public static function build($args){
        $class_name = 'Datalist_' . $args['type'];
        return new $class_name($args['m'][0], $args['m'][1]);
    }
}

//in some other file
$list = DatalistFactory::build($args);
$list-> ....

我的问题

我的 IDE (PHPStorm) 没有提示 $list->render()。我的猜测是因为它已被声明为abstract

问题
我应该在 PHPDoc 中的 @return 前面为 DatalistFactory::build() 放什么,以便 IDE 也提示子类中定义的函数。

附言

【问题讨论】:

  • 我通常不使用 IDE,它是否使用 doc 块来建议方法和类似的东西?
  • 您可以使用 Metadata approach 或使用“DynamicReturnType 插件” .. 但它不适用于您的工厂 - 您将所有参数作为数组而不是单个参数传递。
  • 因此——要么使用已经建议的@return Datalist(不会为特定于子的方法提供任何提示......但会为Datalist 类方法提供提示)......或者在$list 时提供类型提示将被创建,例如/** @var Datalist_List $list */$list = DatalistFactory::build($args);

标签: php polymorphism phpstorm return-type phpdoc


【解决方案1】:

您需要在项目中打开此文件。我使用 phpstorm 8.0.3 在项目中创建新文件并插入您的代码。一切正常 =)

【讨论】:

  • 啊,所以我需要更新软件。尽快回复您
猜你喜欢
  • 1970-01-01
  • 2018-08-16
  • 2017-02-06
  • 1970-01-01
  • 1970-01-01
  • 2011-01-04
  • 1970-01-01
  • 2016-08-30
  • 1970-01-01
相关资源
最近更新 更多