PHP 8.3 中是否有针对特定类的对象数组的类型提示?

Web*_*ion 29 php type-hinting php-8.1 php-8.2

是否有类型提示允许PHP 8.3使用ExampleClass[]它来声明它是该类的对象数组ExampleClass


在我的具体情况下,ExampleClass称为Task

我想要但不起作用:

private Task[] $tasks;
Run Code Online (Sandbox Code Playgroud)

我的 PHPStorm IDE 告诉我,只有在 doc 类型中才允许使用复数类型
——也就是说,只有在PHPDocusing中Tasks[]才完全可以。但我想使用纯 PHP

错误PHP Parse error: syntax error, unexpected token "[", expecting variable


如果我只需要一个对象Task而不是一组对象,Task[]那么它可以使用:

private Task $task;
Run Code Online (Sandbox Code Playgroud)

这是我当前的工作解决方法:

private array $tasks;
Run Code Online (Sandbox Code Playgroud)

Chr*_*aas 20

最简洁的答案是不。

\n

我的理解是,强制执行这样的事情会带来严重的性能问题。有些人想要一路走下去并拥有完整的泛型,其他人只想要类型安全的集合。有人担心,实施后者可能会阻碍前者未来的发展。所以我们\xe2\x80\x99处于停滞状态。

\n

社区中偶尔有\xe2\x80\x99s 的讨论,例如: https: //externals.io/message/108175

\n

编辑\n根据您如何解释问题,@Pierre\的答案可能被认为更正确,因为OP说“类型提示”,尽管他们显示了“类型声明”。

\n

不久前有一个很好的话题争论如何调用它的含义,并且 PHP 的实现不是提示而是声明。有些人认为,虽然称其为“提示”用词不当,但无论核心发生什么变化,社区仍然会称其为提示。然而,他们最终更新了文档以使用“类型声明”。

\n

就我个人而言,我发现自己仍然对显式类型声明说“类型提示”,但我尝试捕捉并纠正自己。我这样做是因为我试图改变我的心态,这样如果我与非 PHP 人员(通常是 JavaScript 人员)交谈,他们就会知道我不是在谈论 IDE 提示,而是真正的语言功能。

\n


Pie*_*rre 11

如果您使用 PhpStorm、PHPStan 或 Psalm,可以在 PHPDocs 中定义类型,这些工具将执行类型检查等操作。

/** @var Task[] $tasks */
private array $tasks;
Run Code Online (Sandbox Code Playgroud)

  • 最初的问题是:PHP 8.2 中是否有针对特定类的对象数组的类型提示? (3认同)