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 충돌 해결
'개발 꿀팁 > PHP' 카테고리의 다른 글
php 페이지 인코딩 및 문자 작업 (0) | 2022.09.28 |
---|---|
PHP 미리 정의된 인터페이스의 ArrayAccess (0) | 2022.09.27 |
php CLI 프로그래밍 명령줄 모드 관련 지식 포인트 (0) | 2022.09.26 |
php는 openssl을 사용하여 aes를 암호화하고 복호화한다 (0) | 2022.09.26 |
php 구현 데몬 (0) | 2022.09.26 |