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