[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

【超过500家企业部署】AWS搭建、运维、监控服务

【超过500家企业部署】AWS搭建、运维、监控服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

[仅适用于 WordPress] 云服务器“Web Speed”

[仅适用于 WordPress] 云服务器“Web Speed”

[便宜]网站安全自动诊断“快速扫描仪”

[便宜]网站安全自动诊断“快速扫描仪”

[预约系统开发] EDISONE定制开发服务

[预约系统开发] EDISONE定制开发服务

[注册100个URL 0日元] 网站监控服务“Appmill”

[注册100个URL 0日元] 网站监控服务“Appmill”

【兼容200多个国家】全球eSIM“超越SIM”

【兼容200多个国家】全球eSIM“超越SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

【全球专属服务】Beyond北美及中国MSP

【全球专属服务】Beyond北美及中国MSP

[YouTube]超越官方频道“美由丸频道”

[YouTube]超越官方频道“美由丸频道”

如果你想用VSCode开发PHP,就用最强的intellisense intelephense。

你好。
我是Mandai,负责Wild 开发团队。

这一年我一直在开发PHP,我认为这是在环境方面反复试验的一年。
值得,而且维护起来也相当方便,所以我想用一篇文章来总结一下,其中也包括了库存的含义。

使用 Visual Studio Code 进行 PHP 开发

早期,我对使用 Visual Studio Code(以下简称 VSCode)进行开发有点担心。

其实开始开发之前我就考虑引入PhpStorm,但是放弃了。

它是一个专为 PHP 开发而开发的 IDE,所以我觉得它在功能上很完美,但我就是对 GUI 不够满意。
虽然是一个微不足道的理由,但既然我们在一起一年多了,我认为人们看我很重要。

这就是为什么我决定使用 VSCode 进行开发,但是使用 VSCode 无法进行大规模开发,VSCode 是一个没有扩展的花哨记事本。

有原生 PHP 支持,但总比没有好,所以我一直在寻找一个可以接近 PhpStorm 的强大扩展,我发现了 intelephense。

Langserver.org更多有关详细信息的信息,但我喜欢它的是 IntelliSense 的有效性。

代码完成和代码跳转的速度令人印象深刻。

此外,在这次开发中,我能够正确地编写 PHPDoc 和类型提示,并且当参数中存在类型差异时我能够立即收到警告,这是一件好事。

尽管如此,我在正确跳转代码时遇到了麻烦,所以我做了一些研究,但没有太多信息,也找不到解决方案,所以我想分享一些我积累的知识。

 

确保设置正确

禁用 VSCode 的标准 PHP 支持,如 Visual Studio Code 的 PHP intellisense 中所述,下载vscode-intelephense的源码_GitHub_帮酷

代码补全显示两次,没什么好处。

PHP IntelliSense同样是 PHP intellisense ,就会出现三个提示,这就更烦人了。

 

尽可能多地写出类型提示。

我写的类型提示越多,intelphense 检查就越有效,所以我想写得越来越多。
从 PHP7 开始,现在可以为返回值编写类型提示,所以我们也这样写。

/** * 没有类型提示 */ function square($number) { if (is_array($number)) { $sum = 0; foreach ($number as $n) { $sum+= $n } return $sum;返回空值;

 

上面的代码没有类型提示,但是除非您理解该过程,否则您无法确定在参数中设置什么值。
如果为此添加类型提示,它将如下所示:

/** * 带类型提示 */ function square(array $number): ?float { if (is_array($number)) { $sum = 0; foreach ($number as $n) { $sum+= $ n }返回 $sum; } 返回 null }

 

这是一个相当极端的例子,但是如果你有类型提示,你不需要阅读内容就可以知道参数的类型,并且你一眼就能看出将返回什么样的值。

intelephense 还显示方法的声明部分以及写在方法之前的 PHPDoc,这很方便,因为您不必每次都检查它。

 

正确键入类属性

下面是 AwesomeService 类的单元测试的开始。

class AwesomeServiceTest { protected $awesomeService; public function setUp() { $this->awesomeService = $this->app->make(AwesomeService::class); } // 其余部分省略 }

 

我们将为每个测试重新创建 AwesomeService 类,以便它不会受到其他测试的影响,但在这种情况下,我们将不得不编写很多方法,例如 $this->awesomeService->awesomeMethod() ,这就是代码所在。完成发挥作用,但不幸的是在上面代码的状态下,完成不起作用。

在这种情况下,通过指定类属性的类型,补全变得有效。
以下是添加的注释,以便完成工作。

class AwesomeServiceTest { /** @var AwesomeService */ protected $awesomeService setUp() { $this->awesomeService = $this->app->make(AwesomeService::class); }

 

PhpStorm等似乎有类似的完成机制,所以这是一个很好的评论,无论环境如何,都会让每个人都高兴。

 

正确输入局部变量

我即将接近本课程的核心但无法做到的一件事是指定局部变量的类型,但我认为让某人查看代码会更快,所以请看一下样本。

函数 superMethod() { $awesomeService = $this->app->make(AwesomeService::class); }

 

在这种情况下,intelephense 不知道 $awesomeService 的类型,并且无法完成 AwesomeMethod()。
因此,通过使用@var来告诉局部变量的类型,补全就可以了。

函数 superMethod() { /** @var AwesomeService $awesomeService */ $awesomeService = $this->app->make(AwesomeService::class); }

 

基本思想与类属性相同,但关键似乎是将变量名放在类名后面。
仔细想想,它的写法和@param是一样的,只不过写在类定义之前和类内部的不同地方,所以花了一段时间才走到这一步。
随着开发规模的增加,方法名称往往会变得更长(这是我个人的观点),因此我想确保避免这种额外的努力。

 

概括

这次我们学习了如何使用intelephense,一个用VSCode进行PHP开发的强大工具。

就我个人而言,我很喜欢这个扩展,但是当涉及到有关 PHP 开发的扩展的信息时,收集信息就变得更加困难,所以我认为如果能降低一点介绍的门槛就太好了,所以我我总结了一些信息,与大家分享一些方便的使用方法。

我写下了各种技巧来使开发更容易,但最终,我尝试养成每天编写代码文档的习惯。

如果我发现任何有用的功能,我会添加它们。

最后

我开设了我所属的系统开发服务网站“SEKARAKU Lab”。
Beyond是从服务器设计搭建到运营的一站式服务,所以如果您在服务器端开发方面遇到任何问题,请随时联系我们。
SEKARAKU 实验室: [https://sekarakulab.beyondjapan.com/](https://sekarakulab.beyondjapan.com/)

就是这样。

如果您觉得这篇文章有帮助,请点赞!
1
加载中...
1 票,平均:1.00 / 11
72,414
X Facebook 哈特纳书签 口袋
[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

写这篇文章的人

关于作者

万代洋一

我的主要工作是为社交游戏开发 Web API,但我也很幸运能够做很多其他工作,包括营销。
此外,我在 Beyond 中的肖像权被视为 CC0。