php 魔術方法,未宣告屬性,陣列的註釋 - 幫助ide跳轉,提高可讀性
本人使用vscode編輯器。其他編輯器未測試。
經過1:
用laravel開發了一段時間,最麻煩的一點就是許多時候編輯器無法智慧提示和輔助跳轉。
有一款ide-helper的外掛,感覺不是很好用,經常會跳轉到純宣告的檔案中去,有時還會跳出兩個選項。就想著自己寫註釋實現。
成果1:
1.魔術方法(以laravel orm中query,scope等方法跳轉舉例)- 其中query返回,靜態關鍵字寫在型別前面
/** * @method static self query() * @method self find() * * @method self active() */ class Order extends Model { //此處寫return,無法被編輯器正確識別 public function scopeActive($query) {} }
2.未宣告的屬性(以laravel orm中欄位舉例) - 這個關鍵詞找了好久
/**
* @property int $id
*/
class Order extends Model
{}
3.顯式宣告的註釋(輔助跳轉和智慧提示)
對屬性: @var
對方法: @return
var和property的區別,可參考:
經過2:
易得: @return的資料結構,如果是索引陣列的形式,可以在資料型別後面加上[]來表示。
這時我就在想,
1.如何相對標椎的註釋關聯陣列。
2.對laravel orm查詢出的結果集: collection,如何進行註釋。
3.以父類傳輸時,如何幫助編輯器確認子類(這是添頭)
百度沒查到,滿頁相同內容的php註釋基礎知識=.=(查詢時發現netbean似乎有獨特的寫法,未深入瞭解)
成果2:
1.對陣列的註釋(phpdoc)
/** * @param array<int|string,Order> * @param array<int|string,mixed> * @param array<int,array<int,string>> * @param array<int,string[]> * @param array{output:string,debug:string} * @param array<int,array{output:string,debug:string}> * * @param list<array{output:string,debug:string}> * */ public function f() {}
編輯器效果: (注意不要有空格,否則顏色不會正確渲染)
ps: 當資料結構過於複雜時,可不帶*換行,此時顏色渲染會消失或報錯,但使用tab正確處理層級結構,看著也挺清晰的,懸浮時編輯器也會對引數進行字串的讀取提示(個人觀點)
具體在以下連結,有對應說明和例子,此處不再搬運:
https://dev.to/suckup_de/modern-phpdoc-annotations-11d4
2.對collection註釋
這個屬於集合類,沒找到很好的辦法,可在程式碼段中使用@var顯示定義
3.對子類定義
1) 同上,使用@var顯示定義
2) 當使用instanceof後,編輯器會自動認為其為對應子類
陣列變數結構清晰,處處可自動提示,處處可跳轉,太爽啦。