개발 꿀팁/PHP

PHP의 Trait 특성

Jammie 2022. 9. 27. 11:32
반응형

Trait는 인터페이스도 클래스도 아닌 PHP 5.4에 추가되었습니다.단상속 언어의 규제를 풀기 위해서다.PHP 다중 상속 솔루션입니다.예를 들어, 두 개의 Abstract Class를 동시에 상속해야 하는 것은 번거로운 일이 될 것이며, Trait는 이 문제를 해결하기 위한 것입니다.하나 이상의 기존 클래스에 추가할 수 있습니다.클래스가 할 수 있는 일을 선언하고(인터페이스 특성을 나타냄), 구체적인 구현도 포함합니다(클래스 특성을 나타냄).

간단히 사용하다
먼저, 당연히 Trait, PHP5.4 trait 키워드를 추가하였습니다

1 trait first_trait {
2      function first_method() { /* Code Here */ }
3      function second_method() { /* Code Here */ }
4 }

또한 Class에서 이 Trait을 사용하려면 use 키워드를 사용합니다

1 class first_class {
 2     // 이 성명을 사용하고 주의. first_trait
 3     use first_trait;
 4 }
 5 
 6 $obj = new first_class();
 7 
 8 // Executing the method from trait
 9 $obj->first_method(); // valid
10 $obj->second_method(); // valid

다중 Trait 사용
같은 클래스에서다중 Trait 사용 가능

1 trait first_trait
 2 {
 3     function first_method() { echo "method1"; }
 4 }
 5 
 6 trait second_trait {
 7     function second_method() { echo "method2"; }
 8 }
 9 
10 class first_class {
11     // now using more than one trait
12     use first_trait, second_trait;
13 }
14 
15 $obj= new first_class();
16 
17 // Valid
18 $obj->first_method(); // Print : method1
19 
20 // Valid
21 $obj->second_method(); // Print : method2

Trait 사이의 중첩
동시에 Trait 사이에도서로 중첩할 수 있습니다. 예를 들어

1 trait first_trait {
 2     function first_method() { echo "method1"; }
 3 }
 4 
 5 trait second_trait {
 6     use first_trait;
 7     function second_method() { echo "method2"; }
 8 }
 9 
10 class first_class {
11     // now using 
12     use second_trait;
13 }
14 
15 $obj= new first_class();
16 
17 // Valid
18 $obj->first_method(); // Print : method1
19 
20 // Valid
21 $obj->second_method(); // Print : method2

Trait의 추상적 방법 (Abstract Method)
구현해야 할 추상적 방법을 Trait에 선언할 수 있습니다. 이렇게 하면그것을 사용하는 Class는 그것을 실현해야 합니다

 1 trait first_trait {
 2     function first_method() { echo "method1"; }
 3 
 4     // 여기에 수식어를 넣을 수 있는데, 호출 클래스가 반드시 그것을 실현해야 함을 설명한다
 5     abstract public function second_method();
 6 }
 7 
 8 class first_method {
 9     use first_trait;
10 
11     function second_method() {
12         /* Code Here */
13     }
14 }

Trait 충돌
다중 Trait 동시 사용은 충돌을 피할 수 없으며, 이것은 우리가 해결해야 합니다.PHP5.4 문법에서 관련 키워드 문법: insteadof 및 as를 가져옵니다. 용법은 을 참조하십시오

1 trait first_trait {
 2     function first_function() { 
 3         echo "From First Trait";
 4     }
 5 }
 6 
 7 trait second_trait {
 8     //first_trait와 같은 이름으로 충돌이 있을 수 있습니다
 9     function first_function() { 
10         echo "From Second Trait";
11     }
12 }
13 
14 class first_class {
15     use first_trait, second_trait {
16         // first_trait의 first_function 치환을 선언합니다
17         // second_trait중앙 성명서의
18         first_trait::first_function insteadof second_trait;
19     }
20 }  
21 
22 $obj = new first_class();
23 
24 // Output: From First Trait
25 $obj->first_function();

위에 있는 게 약간 트레이트인데 좀 기본이에요,여기에서 주의할 점을 총결산한다

 

Trait은 호출 클래스가 상속하는 상위 메서드를 덮어씁니다.
클래스처럼 Trait을 사용할 수 없음 new 인스턴스화
단일 Trait 다중 Trait 가능 구성하다.
단일 클래스에서 여러 개의 T를 사용할 수 있습니다rait
Trait 지원 수식어 (modifier)s), 예를 들어 final, static, abstract
우리는 insteadof 그리고 a를 사용할 수 있다s 연산자 Trait 충돌 해결

 

반응형