本人使用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. JavaWeb编码浅解

    感谢原文作者:少年无形 原文链接:https://blog.csdn.net/dl18215164175/article/details/72512131?depth_1-utm_source=dis ...

  2. Web标准和骨架

    Web 标准的好处 1.让Web的发展前景更广阔 2.内容能被更广泛的设备访问 3.更容易被搜寻引擎搜索 4.降低网站流量费用 5.使网站更易于维护 6.提高页面浏览速度 Web 标准构成 Web标准 ...

  3. 深入解析HashMap、HashTable (转)

    集合类之番外篇:深入解析HashMap.HashTable Java集合类是个非常重要的知识点,HashMap.HashTable.ConcurrentHashMap等算是集合类中的重点,可谓&quo ...

  4. byte溢出栗子

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11634402.html byte溢出测试: byte b1 = (byte) 127; byt ...

  5. Docker之LNMP分布式容器部署

    Docker之LNMP分布式容器部署 目录 Docker之LNMP分布式容器部署 一.项目模拟 1. 项目环境 2. 服务器环境 3. 任务需求 二.Linux系统基础镜像 三.Nginx 1. 建立 ...

  6. 宝塔面板部署springboot项目并使用域名访问

    环境准备:服务器搭建宝塔linux面板项目: springboot项目项目打包方式jar包 环境: 一.服务器,一个域名,然后再服务器上(DNS服务)将域名解析好.把安全组设置好. 二.用宝塔快速搭建 ...

  7. Spring IOC-基于注解配置的容器

    Spring中提供了基于注解来配置bean的容器,即AnnotationConfigApplicationContext 1. 开始 先看看在Spring家族中,AnnotationConfigApp ...

  8. 手把手教你实现pynq-z2条形码识别

    我是 雪天鱼,一名FPGA爱好者,研究方向是FPGA架构探索和SOC设计. 关注公众号,拉你进"IC设计交流群". 1.前言 单单实现一个二维码识别就花了将近一个星期,这篇文章我就 ...

  9. 使用VMware安装win10虚拟机

    (1)打开VMware: (2)打开左上角的文件,点击新建虚拟机: (3)选择典型,下一步: (4)选择稍后安装操作系统,下一步: (5)选择win10×64,下一步: (6)可随意修改虚拟机名称,位 ...

  10. kube-scheduler源码分析(1)-初始化与启动分析

    kube-scheduler源码分析(1)-初始化与启动分析 kube-scheduler简介 kube-scheduler组件是kubernetes中的核心组件之一,主要负责pod资源对象的调度工作 ...