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基本一致, 后面如果封装一些组件的话, 应该能用得上.

  • 相关阅读:
    hdu 3342 Legal or Not 拓排序
    hdu 1596 find the safest road Dijkstra
    hdu 1874 畅通工程续 Dijkstra
    poj 2676 sudoku dfs
    poj 2251 BFS
    poj Prime Path BFS
    poj 3278 BFS
    poj 2387 Dijkstra 模板
    poj 3083 DFS 和BFS
    poj 1062 昂贵的聘礼 dijkstra
  • 原文地址:https://www.cnblogs.com/hujingnb/p/14349299.html
Copyright © 2011-2022 走看看