PHP 5.4의 특성은 새로 도입된 기능입니다. 중국어로 정확하게 번역하는 방법은 잘 모르겠습니다. 실제 목적은 상황에 따라 다중 상속을 사용하는 것이지만 PHP에는 다중 상속이 없기 때문에 그런 것이 고안되었습니다.
특성은 다양한 클래스에서 호출할 수 있는 메서드 집합으로 이해될 수 있지만 특성은 클래스가 아닙니다! 인스턴스화할 수 없습니다. 먼저 구문을 살펴보기 위해 예를 들어보겠습니다.
<?php trait myTrait{ function traitMethod1(){} function traitMethod2(){} } //然后是调用这个traits,语法为: class myClass{ use myTrait; } //这样就可以通过use myTraits,调用Traits中的方法了,比如: $obj = new myClass(); $obj-> traitMethod1 (); $obj-> traitMethod2 (); >
다음으로 특성이 사용되는 이유를 살펴보겠습니다. 예를 들어 비즈니스와 개인이라는 두 가지 클래스가 모두 주소 속성을 가지고 있습니다. 전통적인 접근 방식은 두 클래스 모두 클라이언트와 같은 공통 특성을 갖는 상위 클래스를 추상화하는 것입니다. 다음 코드와 같이 클라이언트 클래스의 액세스 속성인 address, business 및 personal을 각각 상속하도록 설정합니다.
// 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属性 }
이것이 훨씬 더 편리합니다!