1. 程式人生 > 其它 >php 魔術方法,未宣告屬性,陣列的註釋 - 幫助ide跳轉,提高可讀性

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的區別,可參考:

  https://stackoverflow.com/questions/52982268/what-is-the-difference-between-method-property-and-variable-in-php

經過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後,編輯器會自動認為其為對應子類

 

陣列變數結構清晰,處處可自動提示,處處可跳轉,太爽啦。