zoukankan      html  css  js  c++  java
  • PHP8的注解

    PHP8.0增加了注解的支持, 虽然 PHP的注解没用过, 但是咱用过JAVA的注解呀.

    注解这玩意怎么用? 简单说就下面几步:

    1. 定义注解类
    2. 使用注解
    3. 提取注解

    到了PHP中, 也基本上换汤不换药.

    使用

    定义注解类

    #[Attribute(Attribute::TARGET_CLASS | Attribute::TARGET_FUNCTION)]
    class MyAttribute{
        private $value;
        public function __construct($value){
            $this->value = $value;
        }
    }
    

    这就定义完了, 其中Attrbute用来标识当前注解可以用在什么地方.

    使用注解

    #[MyAttribute('test')]
    function test(){
    
    }
    

    提取注解

    同样, 也是通过反射来提取注解.

    // 获取方法的反射对象
    $ref = new ReflectionFunction("test");
    // 获取方法上指定名称的全部注解(可以定义多个, 所以返回值是个数组)
    $attributes = $ref->getAttributes(MyAttribute::class);
    // 将获取的第一个值实例化. 此时会调用注解的构造方法
    $myAttribute = $attributes[0]->newInstance();
    

    简单使用就这样了. 问了, 注解有什么用? 想想JAVA中怎么用的, 基本差不多吧. 比如框架的自动注入, 定义一个路径, 在加载的时候扫描路径下的所有文件, 提取出对应的注解.

    注释

    在8.0之前, 通过注释其实也能够实现同样的功能. 但是相比注解, 注释有几点不足:

    1. 没有编译器提示. 容易打错名字, 参数等等
    2. 容易误删. 毕竟注释默认为是不影响代码逻辑的
    3. 缺少运行时检查. 就算你写错了, 也能正常运行, 可能会导致隐藏的 bug
    4. 注释的解析缺少语言支持.

    而注解就是升级后的语言层面注释, 较之前方便了许多

    库注解

    记录一些系统已经定义好的注解, 但是发现没有找到文档. 么事, 全局搜索使用了Attribute的地方就好啦.

    Immutable

    命名空间: JetBrainsPhpStorm

    将一个类的属性标记为不可修改的. (写在类上则标识类的所有属性). 但是这个注解只是加给phpStorm看的, 运行时并不会报错.

    image-20210130145206335

    ArrayShape

    告诉 IDE 返回的数组中都有什么类型, 方便 IDE 提示(IDE 使用)

    image-20210130145449468

    Deprecated

    弃用标识(IDE 使用). 和原本的启用注释类似. 不过可以提示新的函数.

    image-20210130145834483

    ExpectedValues

    标识期望得到的值(IDE 使用). 指定可能的值列表, 二进制位, 类常量等等.

    例如Attribute类构造方法的使用:

    image-20210130150229498

    Language

    (IDE 使用) 说是能提示参数是某个语言的字符串(如 SQL), 研究半天没懂动有什么用.

    NoReturn

    (IDE 使用) 标记调用函数时, 会结束执行, 就像调用exit函数一样.

    其参数可以指定, 仅当接收指定常量参数时才退出.

    image-20210130151715702

    Pure

    标记函数调用过程对结果没有影响, 简单说就是, 如果函数的返回值没有使用, 那就可以安全的删除这个函数调用.

    最后, 发现已经定义的注解, 都是给编译器使用的.


    简单上手之后, 发现和JAVA基本一致, 后面如果封装一些组件的话, 应该能用得上.

  • 相关阅读:
    字符串匹配——KMP算法(C++)
    数论——Fibonacci数列(C++)
    数据结构——线段树之二(C++)
    数据结构——线段树之一(C++)
    最后的最后
    开始的开始
    10.25模拟 保留道路
    10.25模拟 列车调度
    10.25模拟 三角形
    洛谷 P1093 奖学金
  • 原文地址:https://www.cnblogs.com/hujingnb/p/14349299.html
Copyright © 2011-2022 走看看