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