您的位置 首页 php

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

命名空间: JetBrains\PhpStorm

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

ArrayShape

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

Deprecated

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

ExpectedValues

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

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

Language

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

NoReturn

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

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

Pure

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

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


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

文章来源:智云一二三科技

文章标题:PHP8的注解

文章地址:https://www.zhihuclub.com/151525.shtml

关于作者: 智云科技

热门文章

网站地图