成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP代碼靜態(tài)分析工具PHPStan

鄒立鵬 / 1643人閱讀

摘要:最近發(fā)現(xiàn)自己寫的代碼運(yùn)行結(jié)果總跟自己預(yù)想的不一樣,排查時(shí)發(fā)現(xiàn)大多是語法錯(cuò)誤,在運(yùn)行之前錯(cuò)誤已經(jīng)種下。最后代碼的語法錯(cuò)誤,應(yīng)該在編寫的時(shí)候及時(shí)發(fā)現(xiàn),盡量減少正式運(yùn)行時(shí)錯(cuò)誤。

最近發(fā)現(xiàn)自己寫的PHP代碼運(yùn)行結(jié)果總跟自己預(yù)想的不一樣,排查時(shí)發(fā)現(xiàn)大多是語法錯(cuò)誤,在運(yùn)行之前錯(cuò)誤已經(jīng)種下??赡苁亲约捍中拇笠猓蛘哒fphp -l檢測(cè)太簡(jiǎn)單,不過的確是有一些語法錯(cuò)誤埋藏得太深(畢竟PHP是動(dòng)態(tài)語言),那么有沒有辦法,在代碼代碼正式運(yùn)行之前,把語法錯(cuò)誤全找出來呢?

這里介紹一款PHP代碼靜態(tài)分析工具:PHPStan,不需要運(yùn)行代碼,也可以對(duì)代碼進(jìn)行嚴(yán)格的語法檢測(cè),盡量將代碼運(yùn)行錯(cuò)誤率降到最低。

PHPStan 安裝

目前,PHPStanV0.10.2要求系統(tǒng)環(huán)境的PHP版本不低于7.1。用Composer全局安裝:

$ composer global require phpstan/phpstan
使用

PHPStan靜態(tài)分析的使用方法十分簡(jiǎn)單:

$ phpstan analyse [-c|--configuration CONFIGURATION] [-l|--level LEVEL] [--no-progress] [--debug] [-a|--autoload-file AUTOLOAD-FILE] [--errorFormat ERRORFORMAT] [--memory-limit MEMORY-LIMIT] [--] []...

configuration:運(yùn)行配置文件的路徑;

level:嚴(yán)格級(jí)別,0-7,越大越嚴(yán)格;

no-progress:不顯示進(jìn)度;

debug:debug模式;

autoload-file:自動(dòng)加載文件的路徑;

errorFormat:錯(cuò)誤格式;

memory-limit:內(nèi)存限制;

paths:待分析的文件路徑。

比如,分析一個(gè)PHP文件:

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

當(dāng)然,語法分析應(yīng)該是編輯器做的事,寫完代碼還要切換到命令終端執(zhí)行phpstan,未免過于繁瑣。所以這里推薦一款VSCode擴(kuò)展:PHP Static Analysis。

首先,用Composer全局安裝PHPStan;然后,在VSCode的擴(kuò)展管理中搜索PHP Static Analysis,安裝第一個(gè)匹配的擴(kuò)展;重載VSCode重載窗口后,擴(kuò)展會(huì)自動(dòng)分析VSCode下打開的PHP文件。

運(yùn)行效果:

比如,聲明了一個(gè)變量未調(diào)用,調(diào)用了一個(gè)未聲明的變量和調(diào)用了一個(gè)未定義的方法等等這樣錯(cuò)誤都會(huì)被檢測(cè)出了。

不過,寬松一點(diǎn)地來說,其實(shí)$this->array()方法是存在的,只是通過魔術(shù)方法__call()實(shí)現(xiàn)的。

PHPStan with Laravel

高嚴(yán)格級(jí)別的PHPStan檢測(cè)到調(diào)用未聲明的類方法時(shí),會(huì)報(bào)告類中方法不存在的錯(cuò)誤,即使這個(gè)類定義了__call()__callStatic()。

很多應(yīng)用框架為了優(yōu)雅,大量使用了魔術(shù)方法,比如Laravel。
用PHPStan檢測(cè)Laravel項(xiàng)目,自然會(huì)報(bào)告很多調(diào)用未聲明類方法的錯(cuò)誤,對(duì)于這個(gè)問題,可以借助laravel-ide-helper來降低誤報(bào)。

安裝laravel-ide-helper
$ cd /PATH/TO/LARAVEL_PROJECT
$ composer require barryvdh/laravel-ide-helper
注入LaravelIdeHelper

編輯app/Providers/AppServiceProvider.php里的注冊(cè)方法:

app->environment() !== "production") {
            $this->app->register(BarryvdhLaravelIdeHelperIdeHelperServiceProvider::class);
        }
        // ...
    }
生成_ide_helper.php
$ cd /PATH/TO/LARAVEL_PROJECT
$ php artisan ide-helper:generate

這時(shí),Laravel框架中的Facade類,原本通過__callStatic()獲取的靜態(tài)方法,全部在_ide_helper.php聲明了,在PHPStan檢測(cè)Laravel項(xiàng)目代碼時(shí)引入_ide_helper.php文件,就可以減少誤報(bào)。

PHPStan配置

在Laravel項(xiàng)目的根目錄下,新建phpstan.neon文件:

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

在Laravel項(xiàng)目的根目錄下,執(zhí)行phpstan命令時(shí),會(huì)自動(dòng)使用phpstan.neon這個(gè)配置。

最后

代碼的語法錯(cuò)誤,應(yīng)該在編寫的時(shí)候及時(shí)發(fā)現(xiàn),盡量減少正式運(yùn)行時(shí)錯(cuò)誤。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/29205.html

相關(guān)文章

  • PHP工具箱:PHPStan —— PHP 靜態(tài)代碼分析工具

    摘要:為那些經(jīng)常出現(xiàn)在控制器或者門臉中的轉(zhuǎn)發(fā)代碼編寫單元測(cè)試是很不劃算的事。單元測(cè)試也有其成本。最理想的做法就是在持續(xù)集成服務(wù)器上,每次更改時(shí)都運(yùn)行,從而在無需單元測(cè)試的情況下防止此類錯(cuò)誤的產(chǎn)生。在年開始廣泛使用包管理,單元測(cè)試和編碼標(biāo)準(zhǔn)的工具。 showImg(https://segmentfault.com/img/remote/1460000017004148); PHPStan:無需...

    raledong 評(píng)論0 收藏0
  • 使用GrumPHP來糾正代碼“毛病”

    摘要:默認(rèn)的配置不會(huì)檢測(cè)任何代碼。參數(shù)列表質(zhì)量檢測(cè)包其他有人問,你為什么要這么折磨自己呢其實(shí)像類型代碼質(zhì)量工具,不是僅僅自己拿來玩的,在開發(fā)人員略多的技術(shù)團(tuán)隊(duì),可以通過使用它來達(dá)到代碼規(guī)范一致,如果每個(gè)人代碼都不一樣,后果不堪設(shè)想。 showImg(https://segmentfault.com/img/bVbtfeF?w=1796&h=724); 前言 我一生的文章都會(huì)放在這里,我的博客...

    jubincn 評(píng)論0 收藏0
  • 使用 Phan 為你的 PHP 項(xiàng)目保駕護(hù)航 - 代碼靜態(tài)掃描

    摘要:比如上面的例子文件文件我們利用做了語法解析檢測(cè),代碼如下報(bào)錯(cuò)哪里類重復(fù)了不存在查看該屬性是否存在于父類中原理能就是對(duì)解析出來的繼續(xù)做分析,但是前人栽樹后人乘涼,這樣的完整工具已經(jīng)有大神幫我們做好了。 原文:我的個(gè)人博客 https://mengkang.net/1356.html 工作了兩三年,技術(shù)停滯不前,迷茫沒有方向,不如看下我的直播 PHP 進(jìn)階之路 (金三銀四跳槽必考,一般人...

    array_huang 評(píng)論0 收藏0
  • 第2章:軟件構(gòu)建的過程和工具 2.2軟件構(gòu)建的過程,系統(tǒng)和工具

    摘要:建模語言建模語言是可用于表達(dá)信息或知識(shí)或系統(tǒng)的任何人造語言,該結(jié)構(gòu)由一組一致的規(guī)則定義,目標(biāo)是可視化,推理,驗(yàn)證和傳達(dá)系統(tǒng)設(shè)計(jì)。將這些文件安排到不同的地方稱為源代碼樹。源代碼樹的結(jié)構(gòu)通常反映了軟件的體系結(jié)構(gòu)。 大綱 軟件構(gòu)建的一般過程: 編程/重構(gòu) 審查和靜態(tài)代碼分析 調(diào)試(傾倒和記錄)和測(cè)試 動(dòng)態(tài)代碼分析/分析 軟件構(gòu)建的狹義過程(Build): 構(gòu)建系統(tǒng):組件和過程 構(gòu)建變體...

    godiscoder 評(píng)論0 收藏0
  • 利用開源的DebugBar工具調(diào)試PHP代碼

    摘要:是一個(gè)免費(fèi)和開源的應(yīng)用,能夠集成至任何項(xiàng)目中,并收集和展示分析數(shù)據(jù)。它有沒有任何依賴,支持請(qǐng)求,包括常用開發(fā)庫(kù)的通用數(shù)據(jù)采集器和收集器。 DebugBar 是一個(gè)免費(fèi)和開源的應(yīng)用,能夠集成至任何PHP項(xiàng)目中,并收集和展示分析數(shù)據(jù)。它有沒有任何依賴,支持Ajax請(qǐng)求,包括常用開發(fā)庫(kù)的通用數(shù)據(jù)采集器和收集器。 相信用過Laravel的調(diào)試工具的同學(xué),都感到這個(gè)工具非常強(qiáng)大好用,極大地提高了...

    monw3c 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<