首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >php类型提示对象类型

php类型提示对象类型
EN

Stack Overflow用户
提问于 2017-06-19 13:30:49
回答 3查看 2.4K关注 0票数 1

我在文档中没有发现有关这方面的任何信息,但似乎存在这种情况是合乎逻辑的。如何使类型提示返回object类型的值?(我指的是任何对象,而不是\DateTime等的某个对象。)

代码语言:javascript
运行
复制
function getParticipant(): ?object
{
   //...
  $x = new Cat(); 
  return $x;
}

它不起作用,而真正不公平的是,print getType($x)将导致object。因此,我们有一个object类型,但不能严格地说我们将返回一个object

您可能会说,这真的是不必要的,我本可以只编写: Cat,但是当我覆盖一个在他的PHPDoc中包含了* @return object|null */的方法时,这并不是我所需要的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-19 16:06:47

对于通用object的类型提示还不存在于PHP7.2.0版本之后,这是RFC对象类型提示在2017年5月31日以32票对3票通过的结果。

尽管通常(在可能的情况下),最好还是向特定的类或接口输入提示。

票数 4
EN

Stack Overflow用户

发布于 2017-06-19 13:38:31

:object不解析具有此类型的变量。实际上,PHP将查找名为object的类,并期望返回该类的实例。

使用您的示例,您应该指示该函数将返回Cat的一个实例,因此它应该如下所示:

代码语言:javascript
运行
复制
function getParticipant(): Cat
{
    return new Cat();
}

我想说的是,PHPDoc说object将被归还是很好的。IDE应该解决这个问题,对于PHP解释器来说,这并不重要。

如果您正在覆盖方法,您可以简单地用@return覆盖PHPDoc语句。

票数 1
EN

Stack Overflow用户

发布于 2017-06-19 13:38:43

我无法找到确切的解释,但目前您可以返回类、标量值,而且从PHP7.1开始,您可以使用void作为返回值。但在您的示例中,"object“作为返回值并不存在。

在我看来,检查返回的对象更有意义,以明确返回正确的对象。所以在你的情况下:

代码语言:javascript
运行
复制
function getParticipant(): Cat
{
   //...
  $x = new Cat(); 
  return $x;
}

然后,您可以确保您的函数返回您期望的对象。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44631968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档