>백엔드 개발 >PHP 튜토리얼 >PHP 5.4의 특성 사용

PHP 5.4의 특성 사용

Joseph Gordon-Levitt
Joseph Gordon-Levitt원래의
2025-02-28 10:15:55218검색
PHP 5.4 의 특성 사용 안내서

Using Traits in PHP 5.4 코어 포인트

PHP 5.4에 도입 된 특성 메커니즘은 독립 상속 계층 클래스 간의 코드 재사용을 허용하여 단일 상속의 한계를 해결하고 코드 복제를 줄일 수 있습니다. 단일 클래스는 여러 특성을 사용할 수 있으며 특성은 다른 특성으로 구성되어 코드를 구성하는 유연하고 모듈 식 방법을 가능하게합니다.

    키워드를 사용하여 동일한 메소드 이름을 가진 특성 간의 충돌을 해결하거나 키워드를 사용하여 메소드 별칭을 생성합니다.
  • 특성은 복합 클래스의 개인 속성 또는 방법에 액세스 할 수 있으며 그 반대도 마찬가지입니다.
  • 객체 지향 프로그래밍의 중요한 목표는 더 나은 구성 및 코드 재사용을 통해 코드 복제를 최소화하는 것입니다. 그러나 PHP에서는 때때로 사용하는 단일 상속 모델의 한계로 인해 어려울 수 있습니다. C 및 Python과 같은 언어를 통해 여러 클래스에서 상속을받을 수 있으며,이 문제는 어느 정도 해결 될 수 있으며, Ruby의 Mixin은 상속을 사용하지 않고 하나 이상의 클래스의 기능을 혼합 할 수 있습니다. 그러나 다수의 상속은 다이아몬드 문제와 같은 문제가 있으며 Mixin은 복잡한 메커니즘입니다. 이 기사에서는 PHP 5.4에 도입 된 새로운 기능인 TRACTS에 대해 논의 할 것입니다. 특성 자체의 개념은 프로그래밍에서 새로운 것이 아니며 Scala 및 Perl과 같은 다른 언어로 사용됩니다. 그들은 계층 구조를 상속하는 다른 클래스를 가진 독립 클래스 사이의 코드를 가로로 재사용 할 수 있습니다.
  • 특성의 외관
  • 특성은 별도로 인스턴스화 할 수없는 추상 클래스와 유사합니다 (인터페이스와 비교할 때 자주). PHP 문서는 특성을 다음과 같이 정의합니다. & gt; 특성의 목적은 개발자가 여러 독립 클래스 (다른 클래스 상속 계층에 존재 함)에서 방법 세트를 자유롭게 재사용 할 수있게함으로써 단일 상속의 일부 제한을 줄이는 것입니다. insteadof 이 예를 고려해 봅시다 : as 두 클래스 모두 싱글 톤을 만드는 것과 같은 일반적인 기능이 필요한 경우 문제가됩니다. PHP는 다중 상속을 지원하지 않기 때문에 각 클래스는 싱글 톤 패턴을 지원하는 필요한 코드를 구현하거나 무의미한 상속 계층이 있어야합니다. 특성은 이러한 유형의 문제에 대한 해결책을 제공합니다.
  • 싱글 톤 특성은 싱글 톤 패턴의 직접 구현으로 구현되며,이 특성을 사용하여 클래스의 객체 (아직 생성되지 않은 경우)를 만들어 반환하는 정적 메소드 . 메소드를 사용하여 이러한 클래스의 객체를 만들어 봅시다.

    <code class="language-php"><?php
    class DbReader extends Mysqli
    {
    }
    
    class FileReader extends SplFileObject
    {
    }</code>
    우리는

    $a의 대상이고 DbReader는 의 대상이지만 이제는 모두 싱글 톤으로 나타납니다. 싱글 톤의 방법은 그것을 사용하는 클래스에 수평으로 주입되었습니다. 특성은 수업에 추가 의미를 부과하지 않습니다. 어느 정도까지, 당신은 그것을 특성의 메소드가 복합 클래스로 복사되는 컴파일러 보조 카피-페이스트 메커니즘으로 생각할 수 있습니다. 개인 클래스에서 개인 클래스에서 $b 속성이있는 를 서브 클래스 만 있으면 속성은 FileReader의 덤프에 표시되지 않습니다. 그러나 특성으로 거기에 있습니다! $instance DbReader 다중 특성 ReflectionClass::export() 지금까지 우리는 한 클래스에서 하나의 특성 만 사용했지만 경우에 따라 여러 특성의 기능을 병합해야 할 수도 있습니다.

    <code class="language-php"><?php
    trait Singleton
    {
        private static $instance;
    
        public static function getInstance() {
            if (!(self::$instance instanceof self)) {
                self::$instance = new self;
            }
            return self::$instance;
        }
    }
    
    class DbReader extends ArrayObject
    {
        use Singleton;
    }
    
    class  FileReader
    {
        use Singleton;
    }</code>
    여기에 우리는 두 가지 특성의 와 입니다. 특성은 "안녕하세요"만 말할 수 있습니다. 클래스에서 및

    를 적용하여 객체 가이 두 특성의 메소드를 갖고 "Hello World"라고 말할 수 있습니다. 특성으로 구성된 특성

    응용 프로그램이 커지면 다른 클래스에서 사용되는 일련의 특성이있을 것입니다. PHP 5.4를 통해 우리는 다른 특성으로 구성된 특성을 가질 수 있으므로 이러한 모든 클래스에서 여러 특성이 아닌 한 특성에 여러 특성 만 포함하면됩니다. 이를 통해 다음과 같이 이전 예제를 다시 작성할 수 있습니다.

    여기서 우리는 특성을 만들고

    <code class="language-php"><?php
    $a = DbReader::getInstance();
    $b = FileReader::getInstance();
    var_dump($a);  //object(DbReader)
    var_dump($b);  //object(FileReader)</code>
    특성을 사용하여 에 포함시켰다. 특성에는 다른 두 가지 특성의 방법이 있기 때문에, 우리 가이 두 가지 특성을 수업에 포함시키는 것과 정확히 동일합니다.

    Hello (공간 제한과 보유 된 핵심 정보로 인해 다음 내용이 간단히 요약됩니다) 우선 순위 순서 : World 특성 메소드는 상위 클래스 메소드보다 우선 순위가 높으며 클래스 메소드는 특성 메소드보다 우선 순위가 높습니다. Hello 충돌 해결 및 별칭 : World MyWorld를 사용하여 사용할 특성 메소드를 선택하고 Hello를 사용하여 충돌을 피하기 위해 메소드 별명을 만듭니다. World 반사 : MyWorld는 ,

    ,

    및 와 같은 클래스에서 특성 정보를 얻는 방법을 제공합니다. 다른 특징 :

    는 결합 된 클래스의 개인 속성과 방법에 액세스 할 수 있으며, 그 반대는 이러한 방법을 구현해야합니다.

    요약 :

    특성은 PHP 5.4에서 소개 된 가장 강력한 기능 중 하나 이며이 기사에서는 거의 모든 기능에 대해 설명합니다. 이를 통해 프로그래머는 동일한 상속 계층에있을 필요가없는 여러 클래스간에 수평으로 코드 스 니펫을 재사용 할 수 있습니다. 그들은 복잡한 의미론보다는 가벼운 코드 재사용 메커니즘을 제공합니다. 특성의 단점이 있지만 애플리케이션 설계를 개선하고 코드 복제를 제거하고 더 건조하게 만듭니다.

    (FAQS 부분은 기사의 길이로 인해 여기서 생략됩니다. 핵심 정보는 위 내용에서 다루었습니다.) .

위 내용은 PHP 5.4의 특성 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.