若外部API有throw exception,呼叫API的函式就必須加上try...catch做例外處理,如Java可以在編譯的時候幫你檢查是否忘了加try…catch,但因為PHP不用編譯,所以無法靠compiler幫我們檢查,但透過PHPDoc的@thorwsPHP Inspections這個外掛,可以讓我們寫code的當下,PhpStorm就自動幫我們檢查是否忘了加try…catch。

Version


Laravel 5.1.24
PhpStorm 10.0.1

下載外掛


PHP Inspections下載,檔案為Java的PhpInspectionsEA.jar

安裝外掛


PhpStorm -> Preferences -> Plugin -> Install plugin from disk…

載入剛剛下載的PhpInspectionsEA.jar

安裝完會要求啟動PhpStorm。

檢查Exception


app/Services/MyService.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
namespace App\app\Services;

use Doctrine\Instantiator\Exception\UnexpectedValueException;

class MyService
{

/**
* 模擬產生exception的外部API
*
* @throws UnexpectedValueException
*/

public function process()
{

throw new UnexpectedValueException();
}
}

我們在第15行自行throw了一個exception。

由於PHP沒有compiler,PHP Inspection是靠PHPDoc的@thorws去判斷該函式是否有throw exception,所以一定要加上@throws

若忘了加上try...catch,PhpStorm會在code下方加上波浪警告,滑鼠指過去會顯示警告的原因。

Conclusion


  • 套過PhpStorm與PHP Inspection外掛,我們就可以在寫code時隨時發現自己是否忘記加上try…catch,避免上線後才發現問題。

  • PHP Inspection事實上還有其他很強的功能,可以幫我們檢查PHP :

    1. architecture related issues (e.g. design pattern violations)
    2. possible code construct simplifications
    3. weak types control (important in Enterprise Applications)
    4. performance issues
    5. non-optimal, duplicate and suspicious “if” conditions
    6. validation of magic methods usage
    7. regular expressions
    8. validation of exception handling workflow
    9. compatibility issues
    10. variety of time-consuming bugs
2015-11-27