1. 程式人生 > 其它 >程式碼提示_PHPStorm 支援 Laravel Facades 的程式碼提示

程式碼提示_PHPStorm 支援 Laravel Facades 的程式碼提示

技術標籤:程式碼提示

好久沒用 Laravel 和 PHPStorm 了,最近開發了小專案,用的時候發現 Laravel 的 Facades 是沒有程式碼補全提示的,原因是 Facades 是基於 靜態方法過載 __callStatic() 實現的。

找了個工具,可以實現 Facades 的程式碼補全。

程式碼補全

安裝

生成

基本原理

程式碼補全

使用外掛 barryvdh/laravel-ide-helper 可以讓 PHPStorm 支援 Laravel 的程式碼補全。外掛的 GitHub 地址是: https://github.com/barryvdh/laravel-ide-helper。

使用起來很簡單,過程如下:

安裝

1composer require --dev barryvdh/laravel-ide-helper

生成

1php artisan ide-helper:generate

執行生成後,會在專案目錄生成 _ide_helper.php 檔案,表示安裝生成成功。

之後在 PHPStorm 中就可以使用 Facades 的程式碼補全了,效果如下圖:

ce8c6629156fa2aee98c2d29364f434f.png

基本原理

在 Laravel 中 Facades 的使用靜態方法過載實現的,Facade 基類使用了__callStatic() 魔術方法,直到物件從容器中被解析出來後,才會進行呼叫。由於此,所以 IDE 的程式碼補全工具不能解析出來此靜態方法的呼叫。例如 DB::table()->insert() 。

外掛形成了一個助手檔案,將專案中的 Facades 的方法,具體實現了一份,沒有實現具體功能,僅僅是實現了結構部分,例如屬於哪個 Facades ,有哪些引數,返回值型別等。這樣就告知了 IDE 使用那些內容補全程式碼!參考生成的助手檔案 _ide_helper.php 的部分程式碼:

 1namespace IlluminateSupportFacades {  2 class DB { 3 /** 4 * Run an insert statement against the database. 5 * 6 * @param string $query 7 * @param array $bindings 8 * @return bool  9 * @static 10 */ 11 public static function insert($query, $bindings = array())12 {13 //Method inherited from IlluminateDatabaseConnection 14 /** @var IlluminateDatabaseMySqlConnection $instance */15 return $instance->insert($query, $bindings);16 }17 }18}19namespace { 20 class DB extends IlluminateSupportFacadesDB {}21}

上面的程式碼可知道,模擬了類 DB,並模擬的靜態方法 insert,通過規範化的註釋,得到 PHPDoc,從而實現 IDE 的程式碼提示功能。