> 백엔드 개발 > PHP 튜토리얼 > PHP 코드 재사용에 대한 간단한 튜토리얼

PHP 코드 재사용에 대한 간단한 튜토리얼

小云云
풀어 주다: 2023-03-17 15:12:01
원래의
1939명이 탐색했습니다.

PHP 5.4.0부터 PHP는 Trait이라는 코드 재사용 방법을 구현합니다.

Traits는 PHP와 같은 단일 상속 언어를 위해 준비된 코드 재사용 메커니즘입니다. 특성 단일 상속 언어의 제한을 줄이고 개발자에게 다양한 계층 내의 독립 클래스에서 메서드 세트를 재사용할 수 있는 자유를 제공합니다. 특성 클래스 구성의 의미는 복잡성을 줄이고 기존 다중 상속 및 믹스인과 관련된 일반적인 문제를 방지하는 방법을 정의합니다.

사용이 간편함

<?phptrait Test
{    public function echoHello()
    {        echo &#39;Hello Trait&#39;;
    }
}class Base{    public function index()
    {        echo &#39;index&#39;;
    }
}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 &#39;Hello Trait&#39;;    }}class Base
 {    use Test;    public function echoHello()  
  {        echo &#39;Hello Base&#39;;    }}class One extends Base
  {    use Test;    public function echoHello()    
  {        echo &#39;Hello One&#39;;    }}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 &#39;Hello &#39;;
    }
}trait TestTwo
{    public function echoWord()
    {        echo &#39;word !&#39;;
    }
}class One{    use Test,TestTwo;
}
$one  = new One();echo $one->echoHello();echo $one->echoWord();
로그인 후 복사

결과 출력은 Hello word!입니다.

두 개의 Traits에 동일한 이름의 메서드를 삽입하는 경우 충돌이 명시적으로 해결되지 않으면 치명적인 오류가 발생합니다.

<?phptrait Test
{    public function echoHello()
    {        echo &#39;Hello Test&#39;;
    }    public function echoWord()
    {        echo &#39;word Test&#39;;
    }
}trait TestTwo
{    public function echoHello()
    {        echo &#39;Hello TestTwo &#39;;
    }    public function echoWord()
    {        echo &#39;word TestTwo&#39;;
    }
}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 &#39;Hello&#39;;
    }    public function echoWord()
    {        echo &#39;word&#39;;
    }
}trait TestTwo
{    public function echoHello()
    {        echo &#39;Hello TestTwo &#39;;
    }    public function echoWord()
    {        echo &#39;word TestTwo&#39;;
    }
}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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿