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 类型中才允许使用复数类型
——也就是说,只有在PHPDoc
using中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 提示,而是真正的语言功能。
\nPie*_*rre 11
如果您使用 PhpStorm、PHPStan 或 Psalm,可以在 PHPDocs 中定义类型,这些工具将执行类型检查等操作。
/** @var Task[] $tasks */
private array $tasks;
Run Code Online (Sandbox Code Playgroud)