本人使用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后,编辑器会自动认为其为对应子类

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

php 魔术方法,未声明属性,数组的注释 - 帮助ide跳转,提高可读性的更多相关文章

  1. php -- 魔术方法 之 判断属性是否存在或为空:__isset()

    属性重载:当访问一个不存在或者权限不够的属性的时候,能够触发一系列的魔术方法,就叫做属性重载 __isset($name):当使用 isset()函数或者empty()函数 判断属性是否存在或者是否为 ...

  2. php -- 魔术方法 之 删除属性:__unset()

    属性重载:当访问一个不存在或者权限不够的属性的时候,能够触发一系列的魔术方法,就叫做属性重载 __unset():当删除一个不存在或者权限不够的属性的时候会自动触发 <?php //属性重载 c ...

  3. php -- 魔术方法 之 设置属性:__set()

    属性重载:当访问一个不存在或者权限不够的属性的时候,能够触发一系列的魔术方法,就叫做属性重载 __set():当用户在设置不存在或者权限不够的属性的时候会自动触发 没有设置__set($name,$v ...

  4. php -- 魔术方法 之 获取属性:__get()

    属性重载:当访问一个不存在或者权限不够的属性的时候,能够触发一系列的魔术方法,就叫做属性重载 __get():获取不存在或者权限不够的属性的时候会自动触发 <?php header('Conte ...

  5. Python基础之魔术方法(控制属性的访问和设置)

    # 魔术方法--常规方法# 1. __int__ 构造函数# 2. __new__ 在类实例之前就创建了# 3. __iter__ 迭代器# 4. __del__ 析构方法,用来清除释放的对象内存# ...

  6. Object.keys()方法 返回对象属性数组

    MDN语法 Object.keys(obj) 参数obj:要返回其枚举自身属性的对象. 返回值:一个表示给定对象的所有可枚举属性的字符串数组. 1.传入一个对象,返回的的是所有属性值 var obj2 ...

  7. __unset()魔术方法 删除类内私有属性

    __unset()魔术方法 删除私有属性 unset()对共有属性进行删除 可通过__unset()魔术方法对私有属性进行操作 当在类外部执行unset()函数时,自动执行类内__unset()魔术方 ...

  8. PHP中的常见魔术方法功能作用及用法实例

    概述 在面向对象编程中,PHP提供了一系列的魔术方法,这些魔术方法为编程提供了很多便利.PHP中的魔术方法通常以__(两个下划线)开始,并且不需要显示的调用而是由某种特定的条件出发. 开始之前 在总结 ...

  9. PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化)/约束类型/魔术方法小结

      前  言  OOP  学习了好久的PHP,今天来总结一下PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化). 1  PHP中的抽象 ...

随机推荐

  1. JAVA多线程学习六-守护线程

    java中的守护程序线程是一个服务提供程序线程,它为用户线程提供服务. 它的生命依赖于用户线程,即当所有用户线程都死掉时,JVM会自动终止该线程. 有许多java守护程序线程自动运行,例如 gc,fi ...

  2. Git上传项目到码云提示Push rejected: Push to origin/master was rejected

    感谢大佬:https://blog.csdn.net/weixin_41499217/article/details/82985582 Push rejected: Push to origin/ma ...

  3. 7月3日下午 微擎芸众商城 设计思路 - laravel路由底层源码解读

    学习参考文章 https://learnku.com/articles/13622/the-principle-of-laravel-routing-execution <?phpnamespa ...

  4. shell脚本三剑客之awk

    shell脚本之awk命令 AWK 是一种处理文本文件的语言,是一个强大的文本分析工具 适合小型文本数据 1.工作原理 2.AWK格式 3.按行输入文本 4.按字段输入文本 5.通过管道符号,双引号调 ...

  5. IE,FF等浏览器兼容性问题

    _1:改变选中时候的背景色处理: ::selection { color:#fff; background-color: #5CB85C ;} ::-moz-selection { color:#ff ...

  6. 关于Java多线程-interrupt()、interrupted()、isInterrupted()解释

    多线程先明白一个术语"中断状态",中断状态为true,线程中断. interrupt():就是通知中止线程的,使"中断状态"为true. isInterrupt ...

  7. Pytest介绍

    Pytest介绍 pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高.根据pytest的官方网站介绍,它 ...

  8. Solution -「多校联训」古老的序列问题

    \(\mathcal{Description}\)   Link.   给定序列 \(\{a_n\}\),和 \(q\) 次形如 \([L,R]\) 的询问,每次回答 \[\sum_{[l,r]\su ...

  9. soc AXI接口术语和特性

    AXI接口术语和特性 1.outstanding 2.interleaving 3.out-of-oder 4.写数据可以优先于写地址 5.大小端 小端:低地址数据放在总线bus的低位. 大端:低地址 ...

  10. 小程序入门心得(不谈api)

    小程序入门 一.准备 首先先去微信公众平台注册一个小程序账号,去拿到一个AppID(没AppID也可以开发,只是有些功能会受限),注册成功后到开发设置获取自己的AppID,即使有AppID有些功能还是 ...