PHP5.4.0부터 PHP는 trait
라는 코드 재사용 방법을 구현했습니다. trait
。
众所周知,PHP中是单继承的,trait是为类似PHP的单继承语言而准备得一种代码复用机制。trait为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用method。trait和class组合的语义定义了一种减少复杂性的方式,避免传统多继承问题。
trait
和class
相似,但仅仅在用细粒度和一致的方式来组合功能。无法通过trait自身来实例化。它为传统继承增加了水平特性的组合;也就是说,应用的几个class之间不需要继承。
推荐PHP视频教程:https://www.php.cn/course/list/29/type/2.html
1、简单的例子
首先我们举个例子来介绍trait,和类定义相似,但使用关键字trait定义。在类中使用use组合。
<?php trait T{ public function t1(){ return 't1'; } public function t2(){ return 't2'; } } class Demo{ use T; public function test(){ return 'test'; }多个 } $demo = new Demo; echo $demo->t1(),'</br>'; echo $demo->test();
输出结果:
t1
test
2、多个trait冲突解决
如果使用多个trait,但是出现了方法名相同,这就出现了冲突,就要手动指定使用哪个trait的方法,使用insteadof
关键字实现。
<?php trait T{ public function t1(){ return 't1'; } public function t2(){ return 't2'; } } trait T2{ public function t1(){ return 't3'; } } class Demo{ use T,T2{ //使用T的m1方法 T::t1 insteadof T2; } public function test(){ return 'test'; } } $demo = new Demo; echo $demo->t1(),'</br>'; echo $demo->test();
输出结果:
t1
test
在冲突的时候,也可以使用use定义方法别名解决冲突,例子如下:
<?php trait T{ public function t1(){ return 't1'; } public function t2(){ return 't2'; } } trait T2{ public function t1(){ return 't3'; } } class Demo{ use T,T2{ //使用T的m1方法 T::t1 insteadof T2; T2::t1 as new_t1; } public function test(){ return 'test'; } } $demo = new Demo; echo $demo->t1(),'</br>'; echo $demo->new_t1(),'</br>'; echo $demo->test();
输出结果:
t1
t3
test
3、改变访问权限
也可以使用use
trait
는 class
와 유사하지만 기능을 세밀하고 일관된 방식으로만 결합합니다. 특성 자체를 통해 인스턴스화할 수 없습니다. 이는 전통적인 상속에 수평적 기능의 조합을 추가합니다. 즉, 애플리케이션의 여러 클래스 간에 상속이 필요하지 않습니다. 추천 PHP 비디오 튜토리얼: https://www.php.cn/ course/list/29/type/2.html
1. 간단한 예먼저 클래스 정의와 유사하지만 키워드 특성 정의를 사용하는 특성을 소개하는 예를 제공합니다. 수업에서는 조합을 사용하세요.
<?php trait T{ public function t1(){ return 't1'; } public function t2(){ return 't2'; } } class Demo{ use T{ t2 as protected; } public function test(){ return 'test'; } } $demo = new Demo; echo $demo->t1(),'</br>'; echo $demo->t2(),'</br>'; echo $demo->test();
insideof
키워드를 사용하여 사용할 특성 메서드를 수동으로 지정해야 합니다. 🎜rrreee🎜출력 결과: 🎜🎜t1🎜🎜test🎜🎜충돌이 발생하는 경우 메소드 별칭을 정의하여 충돌을 해결할 수도 있습니다. 예는 다음과 같습니다. 🎜rrreee🎜출력 결과: 🎜🎜t1🎜🎜 t3🎜🎜test🎜🎜3. 액세스 권한 변경🎜🎜🎜 use
키워드를 사용하여 메소드의 액세스 권한을 변경할 수도 있습니다. 🎜rrreee🎜출력 결과: 🎜🎜🎜🎜🎜위 지식은 일반적으로 사용되는 몇 가지 기능을 소개합니다. 자세한 내용은 공식 매뉴얼을 참조하세요: 🎜🎜🎜https://www.php.net/manual/zh/언어.oop5 .traits.php 🎜🎜🎜🎜PHP와 관련된 더 많은 질문을 보려면 PHP 중국어 웹사이트를 방문하세요: 🎜https://www.php.cn/🎜🎜🎜감사합니다! 🎜위 내용은 PHP 특성에 대한 심층 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!