【发布时间】: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