前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP8的注解

PHP8的注解

作者头像
烟草的香味
发布2021-02-04 11:43:17
1.2K0
发布2021-02-04 11:43:17
举报
文章被收录于专栏:烟草的香味烟草的香味

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

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

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

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

使用

定义注解类

代码语言:javascript
复制
#[Attribute(Attribute::TARGET_CLASS | Attribute::TARGET_FUNCTION)]
class MyAttribute{
    private $value;
    public function __construct($value){
        $this->value = $value;
    }
}

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

使用注解

代码语言:javascript
复制
#[MyAttribute('test')]
function test(){

}

提取注解

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

代码语言:javascript
复制
// 获取方法的反射对象
$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基本一致, 后面如果封装一些组件的话, 应该能用得上.

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 烟草的香味 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用
  • 注释
  • 库注解
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档