轉(zhuǎn)帖|使用教程|編輯:鮑佳佳|2021-07-19 10:24:06.587|閱讀 1029 次
概述:PhpStorm 2021.1 測(cè)試版現(xiàn)已推出。我們正在為 PHP 中的泛型添加初步支持。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷(xiāo)售中 >>
PhpStorm 2021.2 測(cè)試版現(xiàn)已推出。我們正在為 PHP 中的泛型添加初步支持。
雖然泛型是PHP語(yǔ)言中最需要的功能之一,但根據(jù)JetBrains開(kāi)發(fā)者生態(tài)系統(tǒng)的調(diào)查,在不久的將來(lái),沒(méi)有計(jì)劃添加它們。
Nikita Popov研究了在PHP中這樣做的可行性,甚至還做了一個(gè)PoC的原型。然而,他得出的結(jié)論是,所有各種可能的實(shí)現(xiàn)方式都有嚴(yán)重的問(wèn)題。
從好的方面看,泛型已經(jīng)被引入靜態(tài)分析工具,如Psalm和PHPStan。它們的應(yīng)用迅速增長(zhǎng),許多流行的開(kāi)源PHP項(xiàng)目現(xiàn)在都依賴(lài)于泛型注釋。因此,難怪 "WI-47158泛型支持與@template "票是PhpStorm問(wèn)題跟蹤器中被支持最多的票之一。
我們?cè)赑hpStorm 2020.3中引入了對(duì)Psalm和PHPStan的支持。這種支持帶有@template注解的泛型的基本 "鏡像 "方案。閱讀更多關(guān)于PhpStorm對(duì)Psalm和PHPStan的支持。
使用@template 的
泛型的最流行的應(yīng)用之一是集合。
在PhpStorm 2021.2中,你將能夠使用泛型類(lèi)集合。查看Brent Roose的《泛型和我們?yōu)槭裁葱枰鼈儭芬晃模私飧嚓P(guān)于這種方法比數(shù)組的優(yōu)勢(shì)。
簡(jiǎn)而言之,你可以得到更多的防錯(cuò)代碼和更好的代碼完成度。
下面是一個(gè)@template注釋的集合類(lèi)的簡(jiǎn)單例子。
使用Doctrine Collections,您已經(jīng)可以在簡(jiǎn)單的場(chǎng)景中完成代碼:
迭代 DoctrineCollection接口當(dāng)前不起作用。因?yàn)闉榱酥С诌@一點(diǎn),應(yīng)該實(shí)現(xiàn)兩個(gè)級(jí)別的模板傳遞:Doctrine Collection=> IteratorAggregate。
因此,解決此問(wèn)題的方法可能是在類(lèi)型提示中使用特定集合,例如ArrayCollection. 使用這樣的注釋?zhuān)鷮⒛軌蛟?foreach 循環(huán)中完成代碼:
在PhpStorm中,你只能獲得第一級(jí)泛型的類(lèi)型推理和完成,即像Base<T>或Base<T1, T2>這樣的泛型。對(duì)于這樣的注解,PhpStorm 將理解 T 類(lèi)型。
像Base<Child<T>>這樣的嵌套泛型不被支持,并且在將來(lái)也可能不被支持,因?yàn)槠湫阅荛_(kāi)銷(xiāo)很大。
@class-string<T>
泛型的另一個(gè)應(yīng)用是容器和工廠。對(duì)于這樣的代碼,通常將類(lèi)名字符串作為參數(shù)傳遞并作為結(jié)果接收對(duì)象。
如果您使用@class-string<T>標(biāo)簽注釋某些參數(shù),PhpStorm 將為您提供適當(dāng)?shù)念?lèi)型推斷:
事實(shí)上,如果您使用new運(yùn)算符從參數(shù)實(shí)例化一個(gè)對(duì)象,則無(wú)需添加@class-string注釋——它只是開(kāi)箱即用:
模板繼承
還支持?jǐn)U展模板類(lèi)的基本情況。為此,您可以使用@extends標(biāo)簽。
該@implements支持,但有當(dāng)模板注釋形成基地簽名一個(gè)已知的問(wèn)題是不能繼承的。
我們正在逐步支持泛型。并計(jì)劃繼續(xù)這項(xiàng)工作。我們計(jì)劃在未來(lái)的更新中添加一些已知功能缺失:
====================================================
想要了解或購(gòu)買(mǎi)PhpStorm正版授權(quán)的朋友,歡迎
JetBrain技術(shù)交流群現(xiàn)已開(kāi)通,QQ搜索群號(hào)“786598704”或者掃描下方二維碼即可加入
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: