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
{
}