php开发工具PhpStorm新版本V2022.1 新增功能亮点介绍
PhpStormV2022.1 版本支持多行和嵌套数组形状、就地提取方法重构,增强对Blade 模板、WordPress、PHP 中的泛型支持等。
自 PhpStorm 2021.2 起,已支持 PHPDoc 块中的单行和单级注释。在 PhpStorm 2022.1 中,在 PHPDoc 和#[ArrayShape]属性 中完全支持多行和嵌套数组形状。
添加数组形状注释以获取键的代码完成并推断简单数组数据结构或类对象数组中的值类型。可以在 PhpStorm 中使用 PHPDoc 和 Attribute 语法,无论使用哪种,返回类型和参数类型都支持该语法。
Extract Method是 PhpStorm 中最常用的重构之一。为了简化代码并创建新方法,只需选择一段代码并按⌘⌥M( Cmd+Alt+M/ Ctrl+Alt+M)。
以前,这将打开重构配置的对话框。在许多情况下,为了提取方法,可以使用就地重构来代替。 不会有对话框,并且会立即在编辑器中创建一个新方法(或函数),光标将激活以编辑新方法的名称。
以前,PhpStorm 将 Blade 模板中的每个代码块视为一个独立的范围,这通常会导致代码完成和洞察力出现问题。在 PhpStorm V2022.1 中,对 IDE 处理 Blade 模板的方式进行了重大修改,可以在.blade.php文件中更好的完成代码,也解决了Blade 模板中代码完成和格式化的更多问题。
在 PhpStorm 中,可以⌘+Click( Ctrl+Click) 对文件路径在编辑器中打开相应的文件。当路径与 WordPress 函数复合时,这不适用于 WordPress 代码中的动态路径。 在此版本中,添加了对get_template_directory_uri()路径中函数的支持。
WordPress 钩子系统功能强大,但无法从调用钩子的位置跳转到声明处理程序的位置。 现在调用左侧有一个装订线图标。单击它可以查看钩子用法列表,包括注册和其他调用。
PhpStorm 除了具有内置的“代码感知”功能外,还具有外部代码知识。这些知识以.phpstorm.meta.php文件的形式出现。可以使用它来教 PhpStorm 有关代码库的更多信息,从而提高完成度。
如果依赖方法_callor _callStatic,那么将失去这些方法的代码完成,因为它们没有定义。 在此版本中,可以添加相应的元数据条目并获得此类调用的自动完成功能。甚至可以自动处理动态调用,从参数值接收特定的方法名称。
现在可以像@|MyClass在.phpstorm.meta.php中一样指定联合类型——这可以改进模拟的编码辅助。
继续改进对 PhpStorm 中基于注释的泛型的支持。在此版本中,介绍了更多案例,包括但不限于:
- @psalm-import-type,@phpstan-import-type
- @psalm-trace,@phpstan-trace
- @method标签中的泛型
在PhpStorm最新版本 中创建新的空项目时,可以选择自动为其生成composer.json文件并提供所需的依赖项,创建项目后,PhpStorm 会提示安装。
V2022.1用新的通知工具窗口替换了事件日志实例。它可以帮助用户了解 IDE 通知,并减少错过任何重要信息的机会。默认情况下,新工具窗口位于 IDE 窗口的右下角。所有通知分为两类:建议和时间线。
从主菜单中,调用结构搜索和替换编辑 | 查找 | 从结构上搜索。 重新设计了结构搜索和替换对话框,以列出所有模板,以便更轻松地浏览它们。 还在Structural Search and Replace 对话框的右上角 添加了Pin Dialog图标。
现在可以在编辑器选项卡之间平均分配工作空间以具有相同的宽度。启用设置/首选项 | 高级设置 | 编辑器标签 | 使嵌套拆分中的比例相等。
现在可以将 UML 图导出为 yEd .graphml、JGraph .drawio、Graphviz .dot、Mermaid .md、Plantuml 和 IntelliJ IDEA .uml 文件,这使得它们与第三方工具兼容。
自述文件通常描述运行应用程序所需的步骤并列出需要使用的命令。V2022.1 将允许直接从降价文件运行这些命令——只需单击命令左侧装订线中的运行图标即可。
向 Markdown 块添加了一个新的复制代码片段操作,它可以让您快速将其内容复制到剪贴板。
重新设计了文本选择中出现的浮动工具栏,以便更轻松地格式化 Markdown 文件。除了新设计之外,工具栏现在允许创建列表并提供用于选择标题样式的菜单。 工具栏是可自定义的,因此可以使用最需要的选项来填充它。转到设置/首选项 | 外观与行为 | 菜单和工具栏 | Markdown 编辑器浮动工具栏。
改进了使用 Git Blame进行注释的功能,使调查引入的更改更容易。当鼠标悬停在注释上时,IDE 会在编辑器中突出显示行中的差异,并在单击它时 打开Git 日志工具窗口。
现在可以更轻松地在 PhpStorm 中使用建议的更改,因为可以直接在 IDE 中本地应用或提交更改。
提交详细信息窗格现在包含有关 GPG 签名和构建状态的信息 ,以前,此数据仅在 Git 日志中显示为一列。
Git 文件历史工具窗口 的新 UI现在独立于索引过程。即使 Log 索引关闭,数据也会以新界面表示。
以上就是PhpStormV2022.1更新的新功能的相关内容,想要了解PhpStorm更多信息,可以私聊我。
PhpStorm是一款PhpStorm开发工具,其旨在提高用户效率,可深刻理解用户的编码,提供智能代码补全,快速导航以及即时错误检查。
2020终极版PhpStorm:全面支持PHP8,静态分析器
PhpStorm 是 JetBrains 公司开发的一款商业的 PHP 集成开发工具,旨在提高用户效率,可深刻理解用户的编码,提供智能代码补全,快速导航以及即时错误检查。
这个主要版本包括对PHP 8,静态分析器PHPStan和Psalm,Xdebug 3,Tailwind CSS,通过Code With Me进行协作开发的全面支持。
PhpStorm 2020.3现已上市!
下载PHPSTORM 2020.3
阅读有关所有新功能和重要更新以及大量GIF的详细信息!
- PHP 8:支持所有语言功能,甚至开源的Custom Attributes。
- PHPStan和Psalm可以直接在代码编辑器中或以批处理方式检测问题。
- Xdebug 3具有简化的配置,以及调试器的改进,例如嵌入式监视和交互式提示。
- HTTP客户端现在可以运行Guzzle请求并将请求复制为cURL。
- 协作开发使您可以与他人共享您的项目,并实时一起进行。
- 在编辑器中,您现在可以使用Mermaid.js渲染图和图表,更轻松地拆分选项卡,并即时预览文件而无需打开它们。
- 各种各样的IDE增强功能:“无处不在的搜索”有了一些新的举措。IDE视觉主题与操作系统保持同步。将PhpStorm设置为打开文件的默认应用程序。
- 现在支持Git stage作为变更列表的替代。
- 数据库工具为MongoDB和新的数据提取器带来了对SQL的支持。
- Tailwind CSS,为Tailwind类提供编码帮助。
PHP 8
PhpStorm 2020.3支持所有最新的语言更改。以下是可用的功能以及如何在IDE中使用它。
从状态栏设置语言级别
现在,状态栏始终显示项目的当前语言级别。从那里进行切换,以利用PHP 8的新功能。
如果切换未激活,则意味着项目的composer.json中的语言版本受到限制,您应该在该文件中对其进行调整。
命名参数
在PHP 8中,可以通过指定参数名称来传递函数和方法参数。现在,调用已自行记录,并且可选参数已成为真正的可选参数,因为您可以忽略它们。
使用添加名称标识符快速修复将位置参数转换为命名参数:
如果参数包含错字或没有匹配的参数,则PhpStorm会突出显示这些参数:
如果传递的值与参数的默认值相同,则PhpStorm会将参数变灰,您可以通过快速修复将其安全删除:
开发人员经常使用选项数组来传递一组参数。使用命名参数,这不是必需的,因为您可以指定所需的参数。另外,与数组元素不同,以这种方式传递的参数是类型安全的。
属性
属性(又名注解)是一种新的结构化方式,用于在PHP中指定元数据。它们替换了PHPDoc注释。
要创建属性,请声明一个普通的类并#[Attribute]在其顶部添加一个标记。PhpStorm在此处提供了所有预期的功能,包括突出显示,代码完成,查找用法,重构等。
PHP本身仅在调用时才验证属性ReflectionAttribute::newInstance()。在此之前,如果不通过反射访问,则将完全忽略属性,以避免必须加载类和创建对象。
使用PhpStorm,无需运行反射API即可查看属性是否有效。强制执行以下规则:
- 指定的类实际上可以是一个属性。
- 此属性仅适用于允许的目标:类,属性,方法,参数,函数或类常量。
- 仅当具有Attribute::IS_REPEATABLE标志时,才重复此属性。
这是与Symfony一起使用的属性:
PhpStorm中的自定义PHP 8属性
PhpStorm 2020.3中有几个可用的属性,它们位于\\JetBrains\\PhpStorm\\名称空间下。
立即将它们添加到您的代码库中,以获得更好的代码完成和更多的检查。
#[ArrayShape]
当定义一个实类时,此属性对于使用简单的数据结构或类对象数组很有用。
语法如下:
type可以被指定为一个字符串或作为在FQN字符串或形式的类引用::class常量。
这是定义形状的数组。将其提取为常量,然后在其适用的属性内重用:
const MY_ARRAY_SHAPE = [] ;
#[ ArrayShape (MY_ARRAY_SHAPE )]
在PhpStorm中,我们已经注释了一些内部PHP函数,例如parse_url()with #[ArrayShape],因此您可以立即受益于这些属性。
幸运的是,单行属性的语法是向后兼容的。如果将#[ArrayShape]属性添加到PHP 7.*项目的单独一行中,则PHP解释器会将其解析为注释行。但是,多行属性对于8之前的PHP版本并不安全。
与PHP解释器不同,PhpStorm仍然会分析属性!因此,即使您的项目在PHP 7.4或更低版本上运行,您仍然可以从添加#[ArrayShape]属性中受益。
点击“了解更多”获取更多详细更新内容
服务器后端语言选择(PHP篇)
背景图片 来自 Markus Spiske on Unsplash
ProjectX是现在我在做的一个项目的代号,我计划在整个项目的过程中做更多的尝试,并且尽可能的将过程记录下来。如果感兴趣可以关注我,非常欢迎给我或是ProjectX提提你的建议。
这次ProjectX在选择后端开发语言的时候,我不会考虑我自己的熟悉程度和之前的积累,希望可以比较客观的选择一个适合的后端语言,我也可以通过这个过程了解更多后端语言。目前计划尝试的后端语言有:PHP、JAVA、Node.js、Go、Rust、Ruby、Python。没有案例的分享都是耍流氓,我用这几个语言统一做一个简单的数据查询返回的API接口,来从服务器支持、开发环境搭建、RESTful路径设置、数据库连接、语言结构和文档社区丰富度六个方面来聊聊我自己的感受。
语言简介
PHP的全称是PHP:Hypertext Preprocesser (一个程序员的黑色幽默),最初Personal Home Page的简称,算是目前最流行的网站开发语言,从PHP的名称就能看出来,PHP最初就是为了开发网站而设计的编程语言。据统计目前有80%的网站是有PHP开发的,尤其著名的Wordpress就是基于PHP开发的。PHP对于我来说也是最熟悉的后端开发语言,已经用PHP开发了大概15年了,从以前开发网站到后来App的后端接口再到小程序的后端接口基本都是使用PHP。也就是因此,我的第一篇打算从PHP开始分享,毕竟比较熟悉不容易翻车。
服务器支持
既然是最流行的服务器端编程语言,服务器的支持绝对是最佳的,PHP通过Apache服务器可以安装在所有服务器操作系统上,包括Linux、macOS、Windows和Unix系统,就算使用其他Web服务器软件,如Nginx、Lighthttp、LiteSpeed等等也都支持,虽然可能没有Apache自带那么方便。现在云服务器的服务供应商基本上都支持携带Linux+Apache+MySQL+PHP的镜像安装。基本可以做到了开箱即用,而且对于绝大多数网络应用来说基本不需要做什么配置,直接将在本地开发环境中的代码上传到相应的文件夹就可以使用了。所以服务器支持基本上可以算是满分了,而且购买了云服务器之后基本不需要配置就可以开始部署代码,服务器配置也很快,在几个大的云服务商基本上确定了合适的服务器运算配置后,只要15分钟就能让一台LAMP服务器上线。
LAMP构架的服务器
IDE vs. Editor
PHP作为解释性语言,可以不用依赖IDE,不过现在PHP的框架还是非常成熟可以提高不少开发效率,IDE的好处是能直接通过新建项目来生成这些框架的脚手架,比直接在命令行内生成要直观不少,为此我尝试了一下JetBrain的PhpStorm。虽然PhpStorm已经改成了订阅制的收费方式,不过还是小贵的。我先安装体验一下,再看看是不是值得购买。
一年一千多,还是有点小贵的
整个安装过程还是比较快速的,直接下载后拖拽入应用程序文件夹即可。然后打开PhpStorm先做了简单的配置和插件安装,可以看到PhpStorm对于主流的一些PHP框架都是有不同程度的支持的。这样新建项目的时候就可以直接选择需要的框架来搭建脚手架程序,非常方便,对于刚刚涉猎PHP的框架还是比较不错的,例如Symfony就可以直接建立带有Demo的项目,这样就可以边学边用。
PhpStorm直接生成Symfony项目
不过个人比较不喜欢使用框架,而且这次ProjectX对于性能优化的要求并不是特别高,所以就不准备使用框架了,毕竟从无到有的开发还是蛮有成就感的。最终还是决定使用VS Code来做开发,结合一些VS Code的语言格式化和高亮等插件,VS Code基本能满足整体的开发需要。因为过程中可能会尝试一些新的技术,会通过学习一些已有第三方库来深度学习,所以还会通过Composer来安装一些PHP依赖库。
基本上PHP还是选择了Editor,开发配置会更直接一些,结合一些插件基本上就能着手开发了。
RESTful VS GraphQL
因为ProjectX计划是跨平台的前端,所以后端会通过API的方式来实现服务,之前一直使用的是类似RESTful的API设计,毕竟对于比较复杂的后端接口来说RESTful还是有一些局限的,而且往往没有足够时间来设计完整的RESTful API。后来出现了GraphQL,这次会多花点时间研究一下,GraphQL更像一个前端向后端传输的查询语句,可拓展性更高一些,这次在PHP中就试试能否使用GraphQL的接口规范。
在PHP中配置RESTful规范的API,主要是对路径的重写来实现相应的RESTful EndPoint可以直接重新定向到相应的PHP文件。达到路径重写需要通过加载rewrite模块就可以让Apache服务器支持路径改写,支持类似下面这样的路径来调用一个herb的资源对象。
开启rewrite的方式是在httpd.conf文件中找到mod rewrite这行代码将注释标识符#去掉
再将服务器根文件夹中AllowOverride 从默认的None改成All,
在重启动服务器就完成了Apache的配置,接下来就是在项目的目录下通过建立 .htaccess文件来开启重写引擎和建立重写规则。通过正则表达式来匹配请求路径中的信息,然后再匹配到相应PHP文件以及PHP的传入参数。 如下是一个简单的重写规则:
完成重写规则之后,就可以在相应的PHP文件中编写业务逻辑了,例如在herb.php中根据不同的HTTP提交的请求方法来返回相应的JSON格式数据。例如一下通过Postman来测试的接口。
RESTful接口的返回测试
对于PHP来说建立一个RESTful规范格式的API,还是相对简单的,不过主要会在接口设计上花比较多时间,尤其对于比较复杂的业务场景,完全按照RESTful规范设计会很困难,尤其是在需要传路多个参数的时候。
GraphQL的出现实际上就是弥补RESTful的一些设计缺陷。不过因为之前一直没有花时间学习GraphQL,乘这次的机会深入了解一下。GraphQL基本上是一套前端发送查询语句到后端的规范,可以通过添加多个输入参数和指定返回数据的参数的方式,将数据传输变得更可控,而且还添加了数据类型的控制。
在PHP中使用GraphQL可以通过已有的第三方库,例如graphql-php、Railt、GraphQLite、Siler以及一些框架下的库,都是不错的选择,因为graphql-php应该算是PHP下对GraphQL实现的第一个库,所以是通过Composer安装了一下,尝试了一些GraphQL的机制,的确比RESTful灵活很多。如下在Postman中测试的接口,可以通过控制查询语句来控制返回的数据结构。
GraphQL接口的返回测试
不过graphql-php的文档不是很完善,只提供了一些简单的操作方式,估计最终如果选择使用PHP来实现GraphQL的话,估计会自己写一个GraphQL的处理库或者找到一个完善一点的库。
对于PHP来说,无论是对RESTful还是对GraphQL的支持都中规中矩,都有第三方库支持,就算自己来做库也都不算太困难。
数据库连接
这个点PHP已经非常成熟了,原生的库基本就能解决所有问题,为了更适合ProjectX的和个人的习惯还是会做一定的封装,现在已有的开源框架对于这方面的支持也算是不错的,可以直接使用现有框架,当然自己写一个基础的库也可以让自己更熟悉PHP对于数据连接上的一些机制和支持性。
语言结构
PHP目前已经发展到了第7版,无论是面向对象的开发方式还是函数的开发方式都支持,而且PHP对于Class的支持还是中规中矩的,对于封装一些业务逻辑来说还是不错的,只是PHP作为一个弱类型的编程语言,对于变量类型的控制会比较弱一点,不过只要养成一定的开发习惯还是能规避一些这方面的问题的。
文档社区
作为最流行的网络应用开发语言,文档支持和社区支持非常成熟,可以在Github上找到任何类型的库解决绝大多数开发中的问题,类似CSDN、Stackoverflow这类网站上解答关于PHP的问题也非常多,PHP官方文档也支持中文,基础问题也直接能在php.net上解决。
总结
作为最流行的网络应用开发语言,PHP各方面都非常完善,是可以直接拿起用的后端开发语言。不过因为自己对于PHP太熟悉了,绝对挑战少了一些,所以这次基本上不会使用PHP作为后端开发语言,除非尝试下来其他语言都不适合后端开发,不过这个概率应该不大。
希望你喜欢这次的分享,如果喜欢的话,可以点赞让我知道一下!如有不同想法或是对之后内容的建议,可以在评论区讨论一下。
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。