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