如何设置动态函数的@return值?

时间:2011-04-24 16:37:29

标签: ide autocomplete comments phpdoc docblocks

说我有这个功能:

function load_model($modelName)
{
   $model = new $modelName;
   return $model;
}

使用它,我可以做到:

$userModel = load_model('user');
$forumModel = load_model('forum');

等。两者都是不同类型,不同功能等的不同模型。

但是,我的自动填充功能不起作用,因为它不知道load_model()函数的返回值是什么。

有没有办法做这样的事情?

/**
* @return $modelName
*/

这会告诉IDE返回值是用户模型类还是论坛模型类?

1 个答案:

答案 0 :(得分:1)

不......你可以期待的最好的是,如果你的各种模型类都实现相同的接口,或者可能都是从同一个抽象父类扩展,你可以将接口或抽象类名作为返回类型。

示例:

如果

class UserModel implements ModelInterface {}

然后你的load_model()函数可以

@return ModelInterface an object that implements a Model

...

或者,如果

class UserModel extends ModelAbstractParent {}

然后你的load_model()函数可以

@return ModelAbstractParent a concrete Model object

...

phpDocumentor没有其他方法可以解密在运行时动态的返回类型,因此IDE的自动完成也无法找到它。

但是,如果您的各种具体模型类正确实现顶级接口或从公共抽象父类扩展,那么使用接口/ abstract作为返回类型允许某种级别自动完成功能在IDE中工作。

编辑:还有另一种方法可以记录返回类型,但我仍然认为自动完成不会起作用 - 列出多种返回类型:

@return UserModel|LoadModel|PlaneModel|TrainModel|AutomobileModel an object of one of the various model classes