>  기사  >  백엔드 개발  >  PHP 특성의 기능은 무엇입니까?

PHP 특성의 기능은 무엇입니까?

coldplay.xixi
coldplay.xixi원래의
2020-07-01 14:25:043841검색

php 특성은 php와 같은 단일 상속 언어용으로 설계되었습니다. 이는 개발자가 단일 상속으로 인한 제한을 줄이기 위해 다양한 상속 시스템의 여러 클래스 간에 일련의 메서드를 쉽게 공유할 수 있도록 설계되었습니다.

PHP 특성의 기능은 무엇입니까?

Traits는 PHP와 같은 단일 상속 언어용으로 설계되었습니다. 이는 개발자가 단일 상속으로 인한 제한을 줄이기 위해 다양한 상속 시스템의 여러 클래스 간에 일련의 메서드를 쉽게 공유할 수 있도록 설계되었습니다. 특성과 클래스의 조합은 다중 상속으로 인해 발생하는 일련의 문제를 방지합니다. Traits是针对php这样的单继承语言设计的。旨在让开发者很方便的在不同继承体系的多个类之间公用一系列方法,以减少单继承带来的局限性。Traits和class的结合,避免了多继承带来的一些列问题。

使用

首先看下官方文档给出的例子:

<?php
trait ezcReflectionReturnInfo {
    function getReturnType() { /*1*/ }
    function getReturnDescription() { /*2*/ }
}
class ezcReflectionMethod extends ReflectionMethod {
    use ezcReflectionReturnInfo;
    /* ... */
}
class ezcReflectionFunction extends ReflectionFunction {
    use ezcReflectionReturnInfo;
    /* ... */
}
?>

从上面的例子可以看出,特性集ezcReflectionReturnInfo包含了两个方法:getReturnTypegetReturnDescription,而下面的两个子类分别继承自不同的父类,却可以通过use ezcReflectionReturnInfo

사용

공식 문서에 제공된 예제를 먼저 살펴보세요:

<?php
trait A {
    public function smallTalk() {
        echo &#39;a&#39;;
    }
    public function bigTalk() {
        echo &#39;A&#39;;
    }
}
trait B {
    public function smallTalk() {
        echo &#39;b&#39;;
    }
    public function bigTalk() {
        echo &#39;B&#39;;
    }
}
class Talker {
    use A, B {
        B::smallTalk insteadof A;
        A::bigTalk insteadof B;
    }
}
위의 예제에서 볼 수 있듯이 기능 세트 ezcReflectionReturnInfo에는 두 가지 메서드가 포함되어 있습니다: getReturnTypegetReturnDescription. 다음 두 하위 클래스는 서로 다른 상위 클래스에서 상속되지만 ezcReflectionReturnInfo 사용을 통해 이 두 메서드를 재사용할 수 있습니다. 간단하고 편리합니다.

관련 학습 권장 사항: 초보부터 숙련까지 PHP 프로그래밍

  • Notes

  • 하위 클래스, 상위 클래스 및 사용 특성에 동일한 이름을 가진 메서드가 있는 경우 우선순위는 이 세 가지 메소드의 경우: 하위 클래스 > tratis > 상위 클래스
  • 동시에 여러 특성을 사용할 수 있지만 동일한 이름의 특성을 사용할 수는 없습니다. 특성을 사용하면 지정된 A 방법을 사용할 수 있습니다. 특정 전통에서 유래합니다. 예:
    class Aliased_Talker {
        use A, B {
            B::smallTalk insteadof A;
            A::bigTalk insteadof B;
            B::bigTalk as talk;
        }
    }
  • 메소드는 별칭을 설정하기 위해 as를 사용할 수 있지만 이 클래스에서만 유효합니다.
    class MyClass2 {
        use HelloWorld { sayHello as private myPrivateHello; }
    }
  • as를 사용할 때 메소드의 가시성을 변경할 수도 있습니다.
    <?php
    trait Hello {
        public function sayHello() {
            echo &#39;Hello &#39;;
        }
    }
    trait World {
        public function sayWorld() {
            echo &#39;World!&#39;;
        }
    }
    trait HelloWorld {
        use Hello, World;
    }
  • 특성은 중첩될 수 있습니다. 예를 들어 A는 B를 사용할 수 있습니다.
    rrreee
  • 특성은 추상 메서드를 정의할 수 있습니다. 마찬가지로 특성을 사용하는 클래스도 이러한 추상 메서드를 구현해야 합니다.
  • 특성은 일반 변수, 정적 변수 및 메서드를 정의할 수 있습니다.

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

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