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的区别,可参考:

  //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正确处理层级结构,看着也挺清晰的,悬浮时编辑器也会对参数进行字符串的读取提示(个人观点)

具体在以下链接,有对应说明和例子,此处不再搬运:

//dev.to/suckup_de/modern-phpdoc-annotations-11d4

  2.对collection注释

      这个属于集合类,没找到很好的办法,可在代码段中使用@var显示定义

    3.对子类定义

        1) 同上,使用@var显示定义

        2) 当使用instanceof后,编辑器会自动认为其为对应子类

 

数组变量结构清晰,处处可自动提示,处处可跳转,太爽啦。