PhpStorm 2021.2:正在为 PHP 中的泛型添加初步支持|附下载

PhpStorm 2021.1 测试版现已推出。我们正在为 PHP 中的泛型添加初步支持。

支持泛型

PHP 中有泛型吗/h3>

虽然泛型是PHP语言中最需要的功能之一,但根据JetBrains开发者生态系统的调查,在不久的将来,没有计划添加它们。

Nikita Popov研究了在PHP中这样做的可行性,甚至还做了一个PoC的原型。然而,他得出的结论是,所有各种可能的实现方式都有严重的问题。

通过注解泛型

从好的方面看,泛型已经被引入静态分析工具,如Psalm和PHPStan。它们的应用迅速增长,许多流行的开源PHP项目现在都依赖于泛型注释。因此,难怪 “WI-47158泛型支持与@template “票是PhpStorm问题跟踪器中被支持最多的票之一。

我们在PhpStorm 2020.3中引入了对Psalm和PHPStan的支持。这种支持带有@template注解的泛型的基本 “镜像 “方案。阅读更多关于PhpStorm对Psalm和PHPStan的支持。

什么将在 PhpStorm 2021.2 中起作用/h3>

使用@template 的
泛型的最流行的应用之一是集合。

PhpStorm 2021.2中,你将能够使用泛型类集合。查看Brent Roose的《泛型和我们为什么需要它们》一文,了解更多关于这种方法比数组的优势。

简而言之,你可以得到更多的防错代码和更好的代码完成度。

下面是一个@template注释的集合类的简单例子。

PhpStorm 2021.2:正在为 PHP 中的泛型添加初步支持|附下载

使用Doctrine Collections,您已经可以在简单的场景中完成代码:

PhpStorm 2021.2:正在为 PHP 中的泛型添加初步支持|附下载

迭代 DoctrineCollection接口当前不起作用。因为为了支持这一点,应该实现两个级别的模板传递:Doctrine Collection=> IteratorAggregate。

因此,解决此问题的方法可能是在类型提示中使用特定集合,例如ArrayCollection. 使用这样的注释,您将能够在 foreach 循环中完成代码:

PhpStorm 2021.2:正在为 PHP 中的泛型添加初步支持|附下载

只支持第一级深度

在PhpStorm中,你只能获得第一级泛型的类型推理和完成,即像Base<T>或Base<T1, T2>这样的泛型。对于这样的注解,PhpStorm 将理解 T 类型。

像Base<Child<T>>这样的嵌套泛型不被支持,并且在将来也可能不被支持,因为其性能开销很大。

@class-string<T>

泛型的另一个应用是容器和工厂。对于这样的代码,通常将类名字符串作为参数传递并作为结果接收对象。

如果您使用@class-string<T>标签注释某些参数,PhpStorm 将为您提供适当的类型推断:

PhpStorm 2021.2:正在为 PHP 中的泛型添加初步支持|附下载

事实上,如果您使用new运算符从参数实例化一个对象,则无需添加@class-string注释——它只是开箱即用:

PhpStorm 2021.2:正在为 PHP 中的泛型添加初步支持|附下载

模板继承

还支持扩展模板类的基本情况。为此,您可以使用@extends标签。

PhpStorm 2021.2:正在为 PHP 中的泛型添加初步支持|附下载

该@implements支持,但有当模板注释形成基地签名一个已知的问题是不能继承的。

未来的范围是什么/h3>

我们正在逐步支持泛型。并计划继续这项工作。我们计划在未来的更新中添加一些已知功能缺失:

  • WI-56034支持类上的泛型
  • WI-60894支持参数包装
  • WI-61438支持基于 IteratorAggregate 的推理
  • WI-61497泛型模板@implements 应该从接口继承注释

====================================================

想要了解或购买PhpStorm正版授权的朋友,欢迎咨询官方客服

JetBrain技术交流群现已开通,QQ搜索群号“786598704或者扫描下方二维码即可加入

PhpStorm 2021.2:正在为 PHP 中的泛型添加初步支持|附下载

 

标签:

来源:慧都

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年6月16日
下一篇 2021年6月16日

相关推荐

发表回复

登录后才能评论