[英]Is there a type hint for an array of objects of a specific class in PHP 8.1?
PHP 8.1
中是否有類型提示,它允許使用ExampleClass[]
聲明它是 class ExampleClass
的對象數組?
在我的具體情況下, ExampleClass
被稱為Task
我想要但不起作用:
private Task[] $tasks;
我的 PHPStorm IDE 告訴我復數類型只允許在文檔類型中
- 說只有在PHPDoc
中使用Tasks[]
就可以了。 但我想使用普通的 PHP 。
錯誤是: PHP Parse error: syntax error, unexpected token "[", expecting variable
如果我只需要一個 object Task
而不是一個對象數組Task[]
它可以使用:
private Task $task;
這是我目前的工作解決方法:
private array $tasks;
最簡潔的答案是不。
我的理解是,執行這樣的事情會帶來可怕的性能問題。 有些人想一直到 go 並擁有完整的 generics,其他人只想要類型安全的 collections。 有人擔心,先實施后者可能會阻礙前者未來的發展。 所以我們處於停滯狀態。
社區里偶爾會有這樣的討論: https://externals.io/message/108175
雖然沒有可用於此類復合類型的類型提示,但有一種強制類型的解決方法。 從 ArrayObject 創建一個子類並驗證添加到 ArrayObject 的所有值。 然后你可以輸入提示你的新子類。
<?php
class Collection extends ArrayObject
{
public function __construct(array $items = [])
{
foreach ($items as $item) {
$this->validate($item)
}
}
public function append($value): void
{
$this->validate($value);
parent::append($value);
}
public function offsetSet($key, $value): void
{
$this->validate($value);
parent::offsetSet($key, $value);
}
protected function validate($value): void
{
if (!$value instanceof Task) {
throw new InvalidArgumentException(
'Not an instance of Task'
);
}
}
}
現在您可以返回帶有Collection
類型提示的對象,它的行為將與 Task 對象數組完全一樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.