php 对象类型的类型提示

php type hinting for object type

我在文档中没有找到关于此的信息,但它的存在似乎是合乎逻辑的。如何为 returning object 类型的值制作类型提示? (我说的是任何对象,而不是某个对象,例如 \DateTime 等)

function getParticipant(): ?object
{
   //...
  $x = new Cat(); 
  return $x;
}

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

你可能会说这真的没有必要,我可以直接写 : Cat,但是当我覆盖一个在他的 PHPDoc 中有 * @return object|null */ 的方法时,这不是我需要的。

:object 不解析具有此类型的变量。事实上,PHP 将查找名为 object 的 class 并期望此 class 的实例将被 returned.

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

function getParticipant(): Cat
{
    return new Cat();
}

我会说 PHPDoc 说 object 将被 returned 很好。 IDE 应该解决它,对于 PHP 解释器来说,这无关紧要。

如果您要覆盖方法,您可以简单地覆盖 PHPDoc.

中的 @return 语句

我找不到确切的解释,但目前你可以 return 类,标量值,因为 PHP 7.1 你有 void 作为 return 值。但在您的情况下 "object" as return 值不存在。

在我看来,检查您 return 哪个对象更有意义,以明确您 return 是正确的对象。所以在你的情况下:

function getParticipant(): Cat
{
   //...
  $x = new Cat(); 
  return $x;
}

那么你可以确定你的函数return是你期望的对象。

通用 object 的类型提示在 PHP 中尚不存在,但应该从 7.2.0 版开始可用,因为 RFC Object typehint 已通过2017 年 5 月 31 日,32 票对 3 票。

尽管通常(在可能的情况下)最好还是对特定 class 或界面进行类型提示。