Attribute 클래스 선언
꼭 필요한 것은 아니지만 모든 Attribute에 대해 실제 클래스를 만드는 것이 좋습니다. 가장 간단한 경우에는 use 문을 사용하여 전역 네임스페이스에서 가져올 수 있는 #[Attribute]
attribute이 선언된 빈 클래스만 필요합니다.
예제 #1 단순 Attribute 클래스
<?php
namespace Example;
use Attribute;
#[Attribute]
class MyAttribute
{
}
attribute이 할당될 수 있는 선언의 유형을 제한하기 위해 #[Attribute]
선언에 대한 첫 번째 인수로 비트마스크를 전달할 수 있습니다.
예제 #2 대상 사양을 사용하여 attributes을 사용할 수 있는 위치 제한
<?php
namespace Example;
use Attribute;
#[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_FUNCTION)]
class MyAttribute
{
}
다른 유형에서 MyAttribute를 선언하면 이제 ReflectionAttribute::newInstance()를 호출하는 동안 예외가 발생합니다.
다음 대상을 지정할 수 있습니다.
-
Attribute::TARGET_CLASS
- Attribute::TARGET_FUNCTION
-
Attribute::TARGET_METHOD
-
Attribute::TARGET_PROPERTY
-
Attribute::TARGET_CLASS_CONSTANT
-
Attribute::TARGET_PARAMETER
-
Attribute::TARGET_ALL
기본적으로 attribute는 선언당 한 번만 사용할 수 있습니다. attribute이 선언에서 반복 가능해야 하는 경우 #[Attribute]
선언에 대한 비트 마스크의 일부로 지정되어야 합니다.
예제 #3 IS_REPEATABLE을 사용하여 선언에 attribute을 여러 번 허용
<?php
namespace Example;
use Attribute;
#[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_FUNCTION | Attribute::IS_REPEATABLE)]
class MyAttribute
{
}