PHP 5.4의 Traits는 새로 도입된 기능인데 어떻게 중국어로 정확하게 번역해야 할지 모르겠습니다. 실제 목적은 상황에 따라 다중 상속을 사용하는 것이지만 PHP에는 다중 상속이 없기 때문에 그런 것이 고안되었습니다.
특성은 다양한 클래스에서 호출할 수 있는 메서드 집합으로 이해될 수 있지만 특성은 클래스가 아닙니다! 인스턴스화할 수 없습니다. 먼저 구문을 살펴보기 위해 예를 들어보겠습니다.
<?php trait myTrait{ function traitMethod1(){} function traitMethod2(){} } //然后是调用这个traits,语法为: class myClass{ use myTrait; } //这样就可以通过use myTraits,调用Traits中的方法了,比如: $obj = new myClass(); $obj-> traitMethod1 (); $obj-> traitMethod2 ();
다음으로 특성이 사용되는 이유를 살펴보겠습니다. 예를 들어 비즈니스(비즈니스 사람)와 개인(개인)이라는 두 가지 클래스가 있습니다. 모두 주소 속성을 가집니다. 다음과 같이 두 클래스 모두 클라이언트와 같은 공통 특성을 갖는 상위 클래스를 추상화하고 클라이언트 클래스의 액세스 속성인 주소, 비즈니스 및 개인을 각각 상속하도록 설정하는 것입니다. code:
// Class Client class Client { private $address; public getAddress() { return $this->address; } public setAddress($address) { $this->address = $address; } } class Business extends Client{ //这里可以使用address属性 } // Class Individual class Individual extends Client{ //这里可以使用address属性 }
그러나 동일한 주소 속성에 액세스해야 하는 order라는 다른 클래스가 있는 경우에는 어떻게 될까요? 주문 클래스는 OOP 원칙을 준수하지 않으므로 클라이언트 클래스를 상속할 수 없습니다. 이때 특성이 유용합니다. 특성을 정의하여 이러한 공용 속성을 정의할 수 있습니다.
// Trait Address trait Address{ private $address; public getAddress() { eturn $this->address; } public setAddress($address) { $this->address = $address; } } // Class Business class Business{ use Address; // 这里可以使用address属性 } // Class Individual class Individual{ use Address; //这里可以使用address属性 } // Class Order class Order{ use Address; //这里可以使用address属性 }