2.7PHP类型之注解(Attribute)

1.注解声明

注解的本质是类。

要想声明某个类为注解,只需要通过 use 语句从全局命名空间引入 #[Attribute] 注解。

<?php
// a.php
namespace MyExample;

use Attribute;

#[Attribute]
class MyAttribute
{
    const VALUE = 'value';

    private $value;

    public function __construct($value = null)
    {
        $this->value = $value;
    }
}

如果想要限定注解只能被哪些目标使用,可以添加如下限定。

<?php

namespace Example;

use Attribute;

#[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_FUNCTION)]
class MyAttribute
{
}
限定目标
Attribute::TARGET_CLASS
Attribute::TARGET_FUNCTION函数
Attribute::TARGET_METHOD方法
Attribute::TARGET_PROPERTY属性
Attribute::TARGET_CLASS_CONSTANT类常量
Attribute::TARGET_PARAMETER参数
Attribute::TARGET_ALL所有
Attribute::IS_REPEATABLE允许注解在声明中出现多次

2.调用注解

注解总是以 #[ 开头,以 ] 结尾来包围。

方括号[]内可以是一个或多个注解(以逗号分隔)。

注解名称可以是非限定、限定、完全限定的名称。

注解的参数是非必须的。如果有参数,以常见的括号()包围。注解的参数可以是字面值或者常量表达式。它同时接受按位置传递和按命名传递两种参数传递方式。

当通过反射 API注解的实例被请求时,注解的名称会被解析到一个类名,注解的参数则被传入该类的构造器对应参数中。 因此每个注解都需要引入一个类。

<?php
// b.php

namespace Another;

use MyExample\MyAttribute;

#[MyAttribute]
#[\MyExample\MyAttribute]
#[MyAttribute(1234)]
#[MyAttribute(value: 1234)]
#[MyAttribute(MyAttribute::VALUE)]
#[MyAttribute(array("key" => "value"))]
#[MyAttribute(100 + 200)]
class Thing
{
}

#[MyAttribute(1234), MyAttribute(5678)]
class AnotherThing
{
}

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/php/phplang/9277.html

(0)
上一篇 2021年2月7日 03:40
下一篇 2021年2月8日 17:15

相关推荐

  • 2.11PHP类型之生成器(Generator)

    1.生成器类与自定义类 生成器(Generator)类是PHP语言内置的类,与自定义类一样都实现了 Iterator 接口,提供对象迭代的实现方式。 1.1优势:性能更好 一个简单的例子就是使用生成器函数来重新实现 range() 函数。标准的 range() 函数需要在内存中生成一个数组包含每一个在它范围内的值,然后…

    PHP语言教程 2021年2月11日
    0300
  • 2.1PHP语言的命名空间(Namespace)

    1.命名空间声明 命名空间通过关键字 namespace 来声明。如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间,除了一个以外:declare关键字。 只有以下类型的代码受命名空间的影响,它们是:类(包括抽象类和 trait)、接口、常量和函数。 2.导入外部元素 可以使用 use…

    PHP语言教程 2021年2月1日
    06370
  • 1.7PHP语言的常量(Constant)

    1.常量声明 1.1define()函数声明法 define()函数声明的常量的值,可以是任意表达式。 1.2const关键字声明法 const关键字声明的的常量的值,有一些限制,只可以是 标量类型( int, float, bool, string)表达式、包含标量类型表达式的数组、nu…

    PHP语言教程 2021年1月7日
    0450

发表回复

登录后才能评论