PHP 5.4.0부터 PHP는 Trait이라는 코드 재사용 방법을 구현합니다.
Traits는 PHP와 같은 단일 상속 언어를 위해 준비된 코드 재사용 메커니즘입니다. 특성 단일 상속 언어의 제한을 줄이고 개발자에게 다양한 계층 내의 독립 클래스에서 메서드 세트를 재사용할 수 있는 자유를 제공합니다. 특성 클래스 구성의 의미는 복잡성을 줄이고 기존 다중 상속 및 믹스인과 관련된 일반적인 문제를 방지하는 방법을 정의합니다.
사용이 간편함
<?phptrait Test { public function echoHello() { echo 'Hello Trait'; } }class Base{ public function index() { echo 'index'; } }class One extends Base{ use Test; }class Two extends Base{ use Test; } $one = new One(); $two = new Two();echo $one->echoHello();echo $one->index();echo $two->echoHello();
결과 출력 Hello Trait 인덱스 Hello Trait.
기본 클래스에서 상속된 멤버는 Trait에 의해 삽입된 멤버로 재정의됩니다. 우선 순위는 현재 클래스의 멤버가 Trait 메서드를 재정의하고 Traits가 상속된 메서드를 재정의하는 것입니다.
<?php trait Test{ public function echoHello() { echo 'Hello Trait'; }}class Base { use Test; public function echoHello() { echo 'Hello Base'; }}class One extends Base { use Test; public function echoHello() { echo 'Hello One'; }}class Two extends Base { use Test;}$one = new One();$two = new Two();$base = new Base(); echo $one->echoHello();echo $two->echoHello();echo $base->echoHello(); 结果输出 Hello One Hello Trait Hello Base。 ?>
클래스 1의 예는 기본 클래스와 특성 테스트를 다루고 있으며, 이는 현재 클래스의 메서드 우선순위가 이들보다 높다는 것을 나타냅니다.
class 두 가지 예는 기본 클래스를 다루고 있으며 Trait은 상속된 기본 클래스보다 우선순위가 높습니다.
class 기본 예제는 Trait Test를 다루며, 현재 클래스의 메서드 우선순위가 Trait보다 높다는 것을 나타냅니다.
use 문에 여러 특성을 쉼표로 구분하여 나열하면 모두 클래스에 삽입할 수 있습니다.
<?phptrait Test { public function echoHello() { echo 'Hello '; } }trait TestTwo { public function echoWord() { echo 'word !'; } }class One{ use Test,TestTwo; } $one = new One();echo $one->echoHello();echo $one->echoWord();
결과 출력은 Hello word!입니다.
두 개의 Traits에 동일한 이름의 메서드를 삽입하는 경우 충돌이 명시적으로 해결되지 않으면 치명적인 오류가 발생합니다.
<?phptrait Test { public function echoHello() { echo 'Hello Test'; } public function echoWord() { echo 'word Test'; } }trait TestTwo { public function echoHello() { echo 'Hello TestTwo '; } public function echoWord() { echo 'word TestTwo'; } }class One{ use Test, TestTwo { Test::echoHello as echoTest; Test::echoWord insteadof TestTwo; TestTwo::echoHello insteadof Test; } } $one = new One();echo $one->echoTest();echo $one->echoWord();echo $one->echoHello();
출력 결과: Hello 테스트 단어 테스트 Hello TestTwo.
특성 테스트에서 echoHello를 출력하려면 Test::echoHello를 별칭으로 사용하세요.
다른 특성을 제외하려면 대신에 TestTwo 대신 Test::echoWord를 사용하세요. 테스트, 특성 테스트에서 EchoWord를 사용하세요
메소드의 제어 권한을 수정합니다
<?phptrait Test { public function echoHello() { echo 'Hello'; } public function echoWord() { echo 'word'; } }trait TestTwo { public function echoHello() { echo 'Hello TestTwo '; } public function echoWord() { echo 'word TestTwo'; } }class One{ use Test { echoHello as private; } }class Two{ use Test { echoHello as private echoTwo; } } $one = new One(); $two = new Two();echo $two->echoHello();
출력 결과 안녕하세요.
클래스 1에서 as를 사용하여 echoHello를 비공개로 설정하면 클래스 1을 통해 echoHello에 액세스할 수 없습니다.
클래스 2에서 as를 사용하여 먼저 이름을 바꾼 다음 새 명명된 메서드를 private으로 설정하면 원래 Trait의 메서드에 정상적으로 액세스할 수 있습니다.
속성은 클래스처럼 Trait에서 정의할 수도 있습니다. 매우 유용합니다!
위 내용은 Traits의 몇 가지 기본 사용법입니다. 자세한 내용은 공식 매뉴얼을 참조하세요. 다음은 참고할 몇 가지 사항입니다. 요점: 특성은 호출 클래스에서 상속된 상위 클래스 메서드를 재정의합니다. 특성은 클래스와 같은 새 항목을 사용하여 인스턴스화할 수 없습니다. 단일 특성은 여러 특성으로 구성될 수 있습니다. final, static, abstract와 같은 특성 간의 충돌을 해결하기 위해 연산자 대신 및 연산자를 사용할 수 있습니다.
관련 권장 사항:
PHP의 특성 및 적용에 대한 자세한 설명PHP의 특성 재사용 메커니즘 사용에 대한 자세한 설명PHP의 특성 사용에 대한 자세한 설명위 내용은 PHP 코드 재사용에 대한 간단한 튜토리얼의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!