当前位置: 首页 > 后端技术 > PHP

PHP代码静态分析工具PHPStan

时间:2023-03-29 23:52:54 PHP

最近发现我写的PHP代码运行结果总是和我预想的不一样。排查的时候发现大部分都是语法错误,而且错误在运行之前就已经种好了。可能是我自己粗心,也可能是php-l检测的太简单了,但是确实有一些语法错误埋的太深了(毕竟PHP是动态语言),那么有没有什么办法可以把语法错误全部去掉代码代码是否正式运行?查出?这里介绍一款PHP代码静态分析工具:PHPStan,它不需要运行代码,还可以对代码进行严格的语法检测,尽量降低代码的错误率。PHPStan安装目前PHPStanV0.10.2要求系统环境PHP版本不低于7.1。使用Composer全局安装:$composerglobalrequirephpstan/phpstan使用PHPStan静态分析的方法很简单:$phpstananalyze[-c|--configurationCONFIGURATION][-l|--levelLEVEL][--no-progress][--debug][-a|--autoload-fileAUTOLOAD-FILE][--errorFormatERRORFORMAT][--memory-limitMEMORY-LIMIT][--][]...配置:运行配置文件的路径;level:严格级别,0-7,越大越严格;no-progress:不显示进度;debug:调试模式;autoload-file:自动加载文件的路径;errorFormat:错误格式;memory-limit:内存限制;paths:要分析的文件的路径。比如分析一个PHP文件:$phpstananalyze--level=7--autoload-file=/PATH/TO/vendor/autoload.php/PATH/TO/someone.phpPHPStaninVSCode当然要进行语法分析小编写完代码后要切换到命令终端执行phpstan,太麻烦了。所以这里推荐一个VSCode扩展:PHPStaticAnalysis。首先,使用Composer全局安装PHPStan;然后,在VSCode的扩展管理中搜索PHPStaticAnalysis,安装第一个匹配的扩展;重新加载VSCode重新加载窗口后,扩展将自动分析在VSCode下打开的PHP文件。运行效果:比如声明了变量却没有调用,调用了未声明的变量调用了未定义的方法等错误都会被检测到。不过,松散的讲,$this->array()这个方法其实是存在的,只不过是通过魔术方法__call()来实现的。Laravel高严格级别的PHPStan检测到调用未声明的类方法时,会报错该类中的方法不存在,即使该类定义了__call()或__callStatic()。很多应用框架为了优雅使用了很多神奇的方法,比如Laravel。使用PHPStan检测Laravel项目,自然会报很多调用未声明类方法的错误。对于这个问题,可以使用laravel-ide-helper来减少误报。安装laravel-ide-helper$cd/PATH/TO/LARAVEL_PROJECT$composerrequirebarryvdh/laravel-ide-helperInjectLaravelIdeHelper在app/Providers/AppServiceProvider.php中编辑注册方法:app->environment()!=='production'){$this->app->register(\Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class);}//...}produce_ide_helper.php$cd/PATH/TO/LARAVEL_PROJECT$phpartisanide-helper:generate此时Laravel框架中的Facade类,原本通过__callStatic()获取的静态方法,是都在_ide_helper.php中声明,在PHPStan检测Laravel项目代码时引入_ide_helper.php文件可以减少误报。在Laravel项目根目录下配置PHPStan,新建一个phpstan.neon文件:parameters:autoload_files:-%currentWorkingDirectory%/_ide_helper.php在Laravel项目根目录下,执行phpstan命令时,将自动使用phpstan.neon的配置。最后,在编写时要及时发现代码的语法错误,尽量减少形式化的运行时错误。

最新推荐
猜你喜欢