객체 지향 프로그래밍에서 상속은 일반적인 재사용 메커니즘입니다. 다중 상속은 여러 상위 클래스에서 서브 클래스를 상속받을 수 있음을 의미합니다. 이 메커니즘은 C ++, 파이썬 등과 같은 많은 프로그래밍 언어에서 널리 사용됩니다. PHP 자체는 직접적인 다중 상속을 지원하지 않지만 다른 방식으로 유사한 영향을 줄 수 있습니다.
PHP는 다중 상속 메커니즘을 직접 제공하지는 않지만, 다중 상속과 유사한 기능은 특성 (특징)을 통해 달성 될 수 있습니다. 특성은 다른 클래스에서 사용하기 위해 메소드를 하나의 클래스로 결합하는 코드 재사용 메커니즘입니다. 이 접근법은 전통적인 다중 상속으로 인한 가능한 문제를 피합니다.
특성 정의는 클래스 정의와 유사하므로 키워드 trait
만 사용하면됩니다.
특성을 사용하기 전에 사용 키워드를 통해 클래스에 포함시켜야합니다.
이 예에서는 MyClass가 Trait1의 모든 메소드를 사용할 수 있도록 사용 Trait1을 통해 MyClass 클래스에 trait1을 포함시킵니다.
전통적인 다중 상속과 비교하여 특성은 다음과 같은 장점을 제공합니다.
여러 클래스가 동일한 방법을 사용해야하는 경우, 특성을 사용하여 이러한 방법을 한 곳에서 정의 할 수 있으므로 각 클래스에서 동일한 방법의 반복 쓰기를 피하고 코드 중복성을 줄일 수 있습니다.
다중 상속은 때때로 너무 깊은 상속 또는 혼란스러운 코드 구조와 같은 문제로 이어질 수 있습니다. 특성을 사용하면 이러한 문제를 피할 수 있으므로 코드 구조가 더 명확하고 유지하기에 편리합니다.
동일한 이름 메소드가 여러 특성으로 나타나면 PHP는 충돌 문제를 해결하는 몇 가지 방법을 제공합니다. 몇 가지 일반적인 솔루션은 다음과 같습니다.
동일한 이름의 메소드가 여러 특성으로 존재하고 사용해야하는 경우 사용 하거나 이름이 변경된 방법을 명시 적으로 지정하는 데 사용할 수 있습니다.
위의 코드에서, 우리는 trait1에서 trait1method 메소드의 사용을 강제로 대신하여 , trait1method 메소드에 AS 에 의해 별칭을 제공한다.
동일한 이름의 메소드가 여러 특성으로 나타나면 제어 문자 (예 : 공개 및 개인 )에 액세스하여 충돌이 없도록하여 이러한 방법을 구별 할 수 있습니다.
한 특성의 방법이 실제로 다른 특성의 방법과 동일하다면, 갈등을 다루거나 별명을 사용하지 않고도 특성 중 하나의 방법을 직접 사용하도록 선택할 수 있습니다.
PHP의 다중 상속은 특성을 통해 시뮬레이션 될 수 있습니다. 특성은 여러 상속으로 인한 문제를 피하면서 코드를 재사용하는 유연한 방법을 제공합니다. 특성을 사용할 때 동일한 이름 방법과 액세스 권한 사이의 충돌을 합리적으로 처리하면 코드를보다 간결하고 명확하며 유지 관리하기가 쉽습니다.