array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'uk', ), 'this' => array ( 0 => 'language.attributes.classes.php', 1 => 'Declaring Attribute Classes', ), 'up' => array ( 0 => 'language.attributes.php', 1 => 'Attributes', ), 'prev' => array ( 0 => 'language.attributes.reflection.php', 1 => 'Reading Attributes with the Reflection API', ), 'next' => array ( 0 => 'language.references.php', 1 => 'References Explained', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'en', 'path' => 'language/attributes.xml', ), 'history' => array ( ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); contributors($setup); ?>
It is recommended to define a separate class for each attribute. In the simplest
case, an empty class with the #[Attribute]
declaration is sufficient.
The attribute can be imported from the global namespace using a use
statement.
Приклад #1 Simple Attribute Class
<?php
namespace Example;
use Attribute;
#[Attribute]
class MyAttribute
{
}
To restrict the types of declarations an attribute can be applied to,
pass a bitmask as the first argument to the #[Attribute]
declaration.
Приклад #2 Using target specification to restrict where attributes can be used
<?php
namespace Example;
use Attribute;
#[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_FUNCTION)]
class MyAttribute
{
}
Declaring MyAttribute on another type will now throw an exception during the call to ReflectionAttribute::newInstance()
The following targets can be specified:
Attribute::TARGET_CLASS
Attribute::TARGET_FUNCTION
Attribute::TARGET_METHOD
Attribute::TARGET_PROPERTY
Attribute::TARGET_CLASS_CONSTANT
Attribute::TARGET_PARAMETER
Attribute::TARGET_ALL
By default, an attribute can only be used once per declaration. To allow
an attribute to be repeatable, specify it in the bitmask of the
#[Attribute]
declaration using the
Attribute::IS_REPEATABLE
flag.
Приклад #3 Using IS_REPEATABLE to allow attribute on a declaration multiple times
<?php
namespace Example;
use Attribute;
#[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_FUNCTION | Attribute::IS_REPEATABLE)]
class MyAttribute
{
}