十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
小编给大家分享一下PHP中trait的基础语法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
创新互联公司是一家专注于网站设计制作、成都网站设计与策划设计,霍林郭勒网站建设哪家好?创新互联公司做网站,专注于网站建设十多年,网设计领域的专业建站公司;建站业务涵盖:霍林郭勒等地区。霍林郭勒做网站价格咨询:028-86922220类中的某些成员如何才能被其他类使用呢?使用继承的话,这继承链也太长了,php提供了代码复用技术trait。
1.定义:Trait
是为类似 PHP 的单继承语言
而准备的一种代码复用机制。trait可以使得单继承语言
拜托为了复用而不得不继承的尴尬,让面向对象
变得更加纯粹。
2.基础语法:
trait是一种类似class
的关键字。
a,"
"; } public static function getB() { echo self::$b,"
"; } } ?>
trait
是用来实现代码的复用的,不可以被实例化也不可以被继承(不是类)。
3.trait的使用
trait只是一段代码的集合,使用时必须要使用use
进行引用。
a,"
"; } public static function getB() { echo self::$b,"
"; } } class A{ use Eat; public function getC() { echo $this->a,"
"; } } $boy=new A(); $boy->getC(); $boy->getA(); $boy->getB(); ?>
一个类可以使用多个trait。
4.trait使用的问题
a.如果同时引入的多个trait中有同名属性,那么会产生冲突。
a; } } $example=new A3(); ?>
b.如果同时引入的多个trait中有同名方法,那么会产生冲突,有两种方案解决如A3、A4。
"; } } trait A2{ public $b=22; public function eat(){ echo "A2中eat()方法","
"; } } class A3{ use A1,A2{ A1::eat insteadOf A2; //A1中的eat替代A2中的eat } } class A4{ use A1,A2{ A1::eat insteadOf A2;//A1中的eat替代A2中的eat A2::eat as eat2; //A2中的eat取别名eat2 } } $example=new A3(); $example->eat(); $example=new A4(); $example->eat2(); ?>
c.同名覆盖问题:如果类中有与引入的trait同名成员,会有不同处理:
属性:不允许重名,即类中不允许定义与trait中同名的成员属性(静态属性也一样)。
方法:类覆盖trait。
d.继承覆盖问题:如果类中在使用trait
的同时,也是继承自父类,而trait中与父类中有同名方法,那么trait
中将覆盖父类同名方法;如果要访问父类方法,可以在trait同名方法中使用parent
关键字访问父类同名方法。
eat(); ?>
e.trait自己不能访问,只是用来给其他类提供代码复用的,因此允许类在使用trait时更高里面方法的访问控制权:在as
之后,使用目标访问修饰限定符。
eshow(); //eat ?>
f.trait中可以使用抽象方法
,用来规范使用类必须实现对应抽象方法
:使用类要么为抽象类,要么就必须实现抽象方法。
以上是“PHP中trait的基础语法”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!