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

发布于 2024-11-03 00:13:37 字数 446 浏览 0 评论 0原文

假设我有这个功能:

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

使用它,我可以这样做:

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

等等。两者都是具有不同类、不同功能等的不同模型。

但是,我的自动完成功能不起作用,因为它不知道load_model() 函数将会是。

有什么办法可以做这样的事情吗?

/**
* @return $modelName
*/

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

Say I have this function:

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

Using it, I can do:

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

etc. Both will be different models with different classes, different functions, etc.

However, my autocomplete doesn't work, because it doesn't know what the return value of the load_model() function is going to be.

Is there any way to do something like this?

/**
* @return $modelName
*/

That will tell the IDE that the returning value is a user model class, or a forum model class?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

薄凉少年不暖心 2024-11-10 00:13:37

不...您在这里可以期望的最好结果是,如果您的各种模型类都实现相同的接口,或者可能都从同一个抽象父类扩展,那么您可以将接口或抽象类名称作为返回类型。

示例:

如果

class UserModel Implements ModelInterface {}

那么您的 load_model() 函数可以

@return ModelInterface 实现模型的对象

...

或者,如果

class UserModel extends ModelAbstractParent {}

那么你的 load_model() 函数可以

@return ModelAbstractParent 一个具体的 Model 对象

...

phpDocumentor 没有其他方法可以破译运行时动态的返回类型,因此 IDE 的自动完成功能也无法解决这个问题。

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

编辑:还有另一种方法来记录返回类型,但我仍然不认为自动完成功能可以通过使用它来工作 - 列出多个返回类型:

@return UserModel|LoadModel|PlaneModel|TrainModel|AutomobileModel 的对象各种模型类之一

No... the best you can hope for here is that if your various kinds of model classes all implement the same interface, or perhaps all extend from the same abstract parent class, you can put the interface or abstract class name as the return type.

Examples:

If

class UserModel implements ModelInterface {}

Then your load_model() function can

@return ModelInterface an object that implements a Model

...

Or, if

class UserModel extends ModelAbstractParent {}

Then your load_model() function can

@return ModelAbstractParent a concrete Model object

...

There's just no other way for phpDocumentor to decipher a return type that is dynamic at runtime, and therefore there's no way for an IDE's autocomplete to figure it out either.

However, if your various concrete model classes do properly implement a top-level interface or extend from a common abstract parent class, then using the interface/abstract as the return type will allow for some level of autocomplete to work in the IDE.

EDIT: there is one other way to document the return type, but I still don't think autocomplete will work by using it -- listing multiple return types:

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文