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正确处理层级结构,看着也挺清晰的,悬浮时编辑器也会对参数进行字符串的读取提示(个人观点)
具体在以下链接,有对应说明和例子,此处不再搬运:
//dev.to/suckup_de/modern-phpdoc-annotations-11d4
2.对collection注释
这个属于集合类,没找到很好的办法,可在代码段中使用@var显示定义
3.对子类定义
1) 同上,使用@var显示定义
2) 当使用instanceof后,编辑器会自动认为其为对应子类
数组变量结构清晰,处处可自动提示,处处可跳转,太爽啦。