本篇文章給大家?guī)砹岁P于PHP的相關知識,主要介紹了為什么不能在PHP中使用泛型,下面將深入探討泛型和PHP背后的情況,理解為什么泛型還不被支持作為一等公民,希望對大家有幫助。
推薦學習:《PHP教程》
為什么我們不能在 PHP 中使用泛型
我們將深入探討泛型和 PHP 背后的情況。理解為什么泛型在 PHP 中還不被支持作為一等公民,這非常有趣,并且非常重要。
讓我們看看吧。
PHP 中沒有泛型。這就是去年的 Nikita 的結論。這根本不可行。
為了理解 Nikita 為什么這么說,我們需要看看如何實現(xiàn)泛型。一般來說,有三種可能的方法;支持泛型的編程語言大多使用這三種方法之一。
第一個稱為 單態(tài)泛型。 讓我們回到這個系列的第一篇文章,在這篇文章中我展示了這個集合示例:
class StringCollection extends Collection { public function offsetGet(mixed $key): string { /* … */ } } class UserCollection extends Collection { public function offsetGet(mixed $key): User { /* … */ } }
我解釋了我們可以為需要的集合的每種類型,手動創(chuàng)建集合類的實現(xiàn)。 工作量將是巨大的,會有很多代碼,但是它會起作用。
單態(tài)泛型正是這樣做的,但在幕后自動實現(xiàn)。 在運行時,PHP 不會知道泛型 Collection 類,而是知道兩個或多個特定實現(xiàn):
$users = new Collection<User>(); // Collection_User $slugs = new Collection<string>(); // Collection_string
單態(tài)泛型是一種完全有效的方法。例如,Rust 就使用它們。 其一個優(yōu)點是有一系列的性能提升,因為在運行時沒有