zoukankan      html  css  js  c++  java
  • PHP代码静态分析工具PHPStan

    最近发现自己写的PHP代码运行结果总跟自己预想的不一样,排查时发现大多是语法错误,在运行之前错误已经种下。可能是自己粗心大意,或者说php -l检测太简单,不过的确是有一些语法错误埋藏得太深(毕竟PHP是动态语言),那么有没有办法,在代码代码正式运行之前,把语法错误全找出来呢?

    这里介绍一款PHP代码静态分析工具:PHPStan,不需要运行代码,也可以对代码进行严格的语法检测,尽量将代码运行错误率降到最低。

    PHPStan

    安装

    目前,PHPStanV0.10.2要求系统环境的PHP版本不低于7.1。用Composer全局安装:

    ```$ composer global require phpstan/phpstan ```

    使用

    PHPStan静态分析的使用方法十分简单:

    ```$ phpstan analyse [-c|--configuration CONFIGURATION] [-l|--level LEVEL] [--no-progress] [--debug] [-a|--autoload-file AUTOLOAD-FILE] [--errorFormat ERRORFORMAT] [--memory-limit MEMORY-LIMIT] [--] [<paths>]... ```
    • configuration:运行配置文件的路径;
    • level:严格级别,0-7,越大越严格;
    • no-progress:不显示进度;
    • debug:debug模式;
    • autoload-file:自动加载文件的路径;
    • errorFormat:错误格式;
    • memory-limit:内存限制;
    • paths:待分析的文件路径。

    比如,分析一个PHP文件:

    ```$ phpstan analyse --level=7 --autoload-file=/PATH/TO/vendor/autoload.php /PATH/TO/someone.php ```

    PHPStan in VSCode

    当然,语法分析应该是编辑器做的事,写完代码还要切换到命令终端执行phpstan,未免过于繁琐。所以这里推荐一款VSCode扩展:PHP Static Analysis

    首先,用Composer全局安装PHPStan;然后,在VSCode的扩展管理中搜索PHP Static Analysis,安装第一个匹配的扩展;重载VSCode重载窗口后,扩展会自动分析VSCode下打开的PHP文件。

    运行效果:

    比如,声明了一个变量未调用,调用了一个未声明的变量和调用了一个未定义的方法等等这样错误都会被检测出了。

    不过,宽松一点地来说,其实$this->array()方法是存在的,只是通过魔术方法__call()实现的。

    PHPStan with Laravel

    高严格级别的PHPStan检测到调用未声明的类方法时,会报告类中方法不存在的错误,即使这个类定义了__call()__callStatic()

    很多应用框架为了优雅,大量使用了魔术方法,比如Laravel
    用PHPStan检测Laravel项目,自然会报告很多调用未声明类方法的错误,对于这个问题,可以借助laravel-ide-helper来降低误报。

    安装laravel-ide-helper

    ```$ cd /PATH/TO/LARAVEL_PROJECT $ composer require barryvdh/laravel-ide-helper ```

    注入LaravelIdeHelper

    编辑app/Providers/AppServiceProvider.php里的注册方法:

    &lt;?php
        ...
        public function register()
        {
            if ($this-&gt;app-&gt;environment() !== 'production') {
                $this-&gt;app-&gt;register(BarryvdhLaravelIdeHelperIdeHelperServiceProvider::class);
            }
            // ...
        }
    

    生成_ide_helper.php

    ```$ cd /PATH/TO/LARAVEL_PROJECT $ php artisan ide-helper:generate ```

    这时,Laravel框架中的Facade类,原本通过__callStatic()获取的静态方法,全部在_ide_helper.php声明了,在PHPStan检测Laravel项目代码时引入_ide_helper.php文件,就可以减少误报。

    PHPStan配置

    在Laravel项目的根目录下,新建phpstan.neon文件:

    ``` parameters: autoload_files: - %currentWorkingDirectory%/_ide_helper.php ```

    在Laravel项目的根目录下,执行phpstan命令时,会自动使用phpstan.neon这个配置。

    最后

    代码的语法错误,应该在编写的时候及时发现,尽量减少正式运行时错误。

    原文地址:https://segmentfault.com/a/1190000015956085

  • 相关阅读:
    Droptiles
    10 条建议让你创建更好的 jQuery 插件
    15个值得开发人员关注的jQuery开发技巧和心得
    8 个最好的 jQuery 树形 Tree 插件
    jQuery的发展史,你知道吗?
    20+个可重复使用的jQuery代码片段
    10 款基于 jQuery 的切换效果插件推荐
    关于浏览器事件的思考
    JS实现复制到剪贴板(兼容FF/Chrome/Safari所有浏览器)
    Javascript函数声明与函数表达式的区别
  • 原文地址:https://www.cnblogs.com/lalalagq/p/9975250.html
Copyright © 2011-2022 走看看