彩票走势图

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

转帖|使用教程|编辑:鲍佳佳|2021-07-19 10:24:06.587|阅读 936 次

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

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

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

下载PhpStorm 最新版

支持泛型

PHP 中有泛型吗?

虽然泛型是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 中起作用?

使用@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&gt;标签注释某些参数,PhpStorm 将为您提供适当的类型推断:

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

模板继承

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

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

未来的范围是什么?

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

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

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

想要了解或购买PhpStorm正版授权的朋友,欢迎

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

 


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@capbkgr.cn

文章转载自:

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP