트레이트 – 20.트레이트 관련 함수

리플렉션 기능 함수

리플렉션 API와 관계없이, 기존의 클래스 또는 인터페이스에서 제공되는 관련 함수와 발을 맞춰서 리플렉션 기능의 트레이트 함수가 추가되었습니다.

  • trait_exists
    클래스와 인터페이스가 아닌 트레이트가 존재하는지 여부를 반환함
  • get_declared_traits
    클래스나 인터페이스가 아닌 정의된 트레이트를 반환함

리플렉션 기능 함수들의 특징은 트레이트가 클래스에 조합되어 있지 않고, 선언만 되어 있어도 반응(reflection)한다는 것입니다. 이를 확인하기 위하여 리플렉션 함수들에 대하여 조합되지 않은 트레이트를 포함한 경우의 반응을 실험해 보겠습니다.

조합되지 않은 트레이트가 있는 경우

trait_exists

bool trait_exists ( string $traitname [, bool $autoload ] )

매개변수로는 트레이트 이름을 지정하면, 지정된 트레이트가 존재하면 TRUE, 아니면 FALSE를 반환합니다. 트레이트가 아닌 클래스나 인터페이스에 대해서는 FALSE가 반환됩니다. 위의 예제에서와 같이 조합되지 않은 트레이트가 있는 경우, 조합되지 않더라도 트레이트가 존재한다면 TRUE를 반환합니다. 오류가 발생하면 NULL을 반환합니다.

아래의 실행 결과를 보면, 트레이트 World는 선언만 되어 있고 클래스에 조합되지 않았음에도 불구하고 traits_exists 함수에서 TRUE를 반환하고 있음을 알 수 있습니다.

get_declared_traits

array get_declared_traits ( void )

클래스나 인터페이스가 아닌 선언된 모든 트레이트 이름을 배열 값으로 반환합니다. 위의 예제에서와 같이 조합되지 않은 트레이트가 있는 경우, 조합되지 않더라도 트레이트가 존재한다면 반환합니다. 오류가 발생하면 NULL을 반환합니다.

아래의 실행 결과를 보면, 트레이트 World는 선언만 되어 있고 클래스에 조합되지 않았음에도 불구하고 get_declared_traits 함수에서 트레이트 World까지도 반환하고 있음을 볼 수 있습니다.

일반 트레이트 관련 함수

SPL(Standard PHP Library) 함수 목록에 포함된 트레이트 함수로, 조합된 트레이트만 반환하는 함수로 class_uses 함수가 있습니다.

  • class_uses
    클래스에 조합된 트레이트를 반환함

class_uses

array class_uses ( mixed $class [, bool $autoload = true ] )

매개변수로는 클래스 이름/인스턴스(또는 트레이트 이름)을 지정하면, 지정된 클래스(또는 트레이트)에 조합된 트레이트 이름을 배열로 반환합니다. 그러나 여기에는 부모 클래스에서 조합된 트레이트가 포함되지 않습니다. 위의 예제에서와 같이 조합되지 않은 트레이트가 있는 경우, 조합되지 않은 트레이트 이름은 반환하지 않습니다. 오류가 발생하면 FALSE를 반환합니다.

아래의 실행 결과를 보면, 선언만 되고 조합되지 않은 트레이트 World는 배제되고 있다는 것을 확인할 수 있습니다.

답글 남기기