특성이란 무엇입니까? PHP에서 Trait의 선언 및 사용 팁 공유

伊谢尔伦
풀어 주다: 2023-03-07 19:14:01
원래의
1826명이 탐색했습니다.

특성이란 무엇인가요?

php는 버전 5.4부터 Trait 기능을 지원했습니다. 이는 Class 클래스와 매우 유사하며 클래스의 모든 일반적인 Trait 기능을 구현할 수 있습니다. 특성은 클래스를 대체하는 데 사용되는 것이 아니라 클래스에 "혼합"하는 데 사용됩니다. 특성은 단일 상속 언어의 제한을 줄이고 개발자가 다양한 계층 내의 독립 클래스에서 메서드 세트를 자유롭게 재사용할 수 있도록 설계되었습니다. 특성 및 클래스 구성의 의미는 복잡성을 줄이고 전통적인 다중 상속과 관련된 일반적인 문제를 방지하는 방법을 정의합니다. 예를 들어, 두 개의 추상 클래스를 동시에 상속해야 하는데 이는 PHP 언어에서 지원하지 않는 기능입니다. 특성은 이 문제를 해결하는 것입니다. 또는 상속 클래스 체인은 하위 클래스가 상위 클래스의 특정 특성을 상속받지 않도록 격리하는 것으로 이해할 수 있습니다. 이는 상위 클래스의 특성을 사용할 때 Trait이 있는 경우 Trait의 멤버가 먼저 호출되는 것과 동일합니다. .

특성 선언

클래스를 선언하려면 class 키워드를 사용해야 합니다. 특성을 선언하려면 당연히 다음을 수행해야 합니다. 또한 특성 키워드를 사용하십시오. 특성은 일반적으로 사용 가능합니다. Trait은 final, static, abstract 와 같은 수식자를 지원하므로 Trait은 추상 메서드 사용, 정적 메서드의 클래스 정의도 지원하며 물론 속성도 정의할 수 있습니다. 그러나 Trait은 클래스와 혼합되어 사용되며 단독으로 사용할 수 없기 때문에 클래스처럼 new를 사용하여 인스턴스화할 수 없습니다. Interface와 Trait을 비교해 보면 Trait이 더 편리할 것입니다.

간단한 Trait 선언 코드는 다음과 같습니다.

<?php
//使用 trait 关键字申明一个 Trait,需要php5.4以上的版本
trait dome{
 public $a = true;        //声明成员属性
 static $b = 1;           //使用 static 关键字声明静态变量
 function method1(){
 }      //声明成员方法
 abstract public function method2(); //加入抽象修饰符,说明调用类必须实现它
}
?>
로그인 후 복사


특성의 기본 사용

클래스와 달리 특성은 자체적으로 객체를 인스턴스화할 수 없으며 클래스에 혼합하여 사용해야 합니다. 이는 Trait의 멤버를 클래스에 복사하고 자체 멤버를 사용하는 것처럼 클래스를 사용하는 것과 같습니다. 수업에서 Trait을 사용하고 싶다면. 특성은 use 키워드를 통해 클래스에 혼합되어야 합니다.

코드는 다음과 같습니다.

<?php
//使用 trait 关键字申明一个 Trait,有两个成员方法
trait dome{
 function method1(){
 }      //声明成员方法
 function method2(){
 }      //声明成员方法
}
class dome1{    //申明一个类,类中混入 Trait
 use dome;    //使用 use 关键字在类中使用 dome
}
$obj = new dome1();   //实例化 dome1 对象
$obj->method1();      // 通过 dome1 对象,直接调用混入类 dome1 的成员方法 method1
$obj->method2();      // 通过 dome1 对象,直接调用混入类 dome1 的成员方法 method2
?>
로그인 후 복사

위의 예에서 use 키워드는 Dome의 멤버를 Dome1 클래스에 혼합하는 데 사용됩니다. 여러 특성을 한 번에 혼합하고 use 키워드를 통해 함께 사용할 수도 있습니다. 쉼표로 구분하면 여러 특성을 use 문에 나열할 수 있으며 모두 클래스에 삽입할 수 있습니다. 여러 특성을 동시에 사용하면 필연적으로 충돌이 발생한다는 점에 유의해야 합니다. PHP5.4는 구문 측면에서 대신 관련 키워드 구문 을 제공합니다.

샘플 코드는 다음과 같습니다.

<?php
//使用 trait 关键字申明一个 Trait,有两个成员方法
trait dome1
{
 function fun()
 {
     echo "第一个 Trait 中的 fun 方法";
 }
}
trait dome2   //这里名称相同就会有冲突
{
 function fun()
 {
    echo "第二个 Trait 中的 fun 方法";
 }
}
class dome{
 use dome1,dome2{     // dome2 中申明
   dome1::fun insteadof dome2;  // 申明使用 dome1 中的 fun 替换
 }
}
$obj = new dome();
$obj->fun();       //  输出第一个 Trait 中的 fun 方法
?>
로그인 후 복사

클래스에서 use 키워드를 사용하여 Trait의 멤버를 클래스에 혼합할 수 있을 뿐만 아니라 다른 특성의 멤버에서 특성 키워드 혼합에 사용합니다. 이는 특성 사이에 중첩을 형성합니다. 사용되는 클래스에 대한 요구 사항을 적용하기 위해 Traits는 추상 메서드 사용을 지원합니다. Trait에서 구현해야 하는 추상 메서드를 선언하는 경우 추상 클래스를 상속하는 것처럼 이를 사용하는 클래스에서 이를 먼저 구현하고 클래스에 추상 메서드를 구현해야 합니다.

자세한 사용법은 공식 매뉴얼을 참고해주세요. 하지만 처음 Trait 학습을 시작할 때는 다음 핵심 사항을 이해해야 합니다.

1. Trait은 호출 클래스의 상위 클래스 메서드를 재정의합니다.

2. 기본 클래스에서 상속된 멤버는 Trait에 의해 삽입된 멤버로 재정의됩니다. 우선 순위는 현재 클래스의 멤버가 Trait 메서드를 재정의하고 Traits가 상속된 메서드를 재정의하는 것입니다.

3. 특성은 클래스와 같은 개체를 인스턴스화하는 데 new를 사용할 수 없습니다.

4. 하나의 특성은 여러 특성으로 구성될 수 있습니다.

5. 단일 클래스에서는 특성을 여러 개 소개할 수 있습니다.

6. Trait은 final, static, abstract 등의 수식어를 지원합니다.

7. 대신 및 연산자를 사용하여 특성 간의 충돌을 해결할 수 있습니다.

8. as 구문을 사용하면 메소드의 액세스 제어를 조정할 수도 있습니다.


【관련 튜토리얼 추천】

1. "php.cn Dugu Jiujian (4) - php video Tutorial

2. 비디오 튜토리얼: 특성 특성 선언 및 사용 기술: 코드 재사용을 위한 클래스 메소드 수집

3. >PHP 실용 동영상 튜토리얼

위 내용은 특성이란 무엇입니까? PHP에서 Trait의 선언 및 사용 팁 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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