什么是Trait?php中Trait的申明和使用技巧分享
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了什么是Trait?php中Trait的申明和使用技巧分享,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3702字,纯文字阅读大概需要6分钟。
内容图文
![什么是Trait?php中Trait的申明和使用技巧分享](/upload/InfoBanner/zyjiaocheng/146/02d2df32bc104fa989e0e17b79ecbf70.jpg)
php 从 5.4版本起开始支持 Trait 特性,和 Class 类很相似,类中一般的特性 Trait 都可以实现。Trait 不是用来替代类的,而是要去 “ 混入” 类中。 Trait 是为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用方法集。 Trait 和类组合的语义是定义了一种方式来减少复杂性,避免传统多继承相关的典型问题。例如,需要同时继承两个抽象类,这是php语言不支持的功能, Trait 就是为了解决这个问题。或者可以理解为在继承类链中隔离了子类继承父类的某些特性,相当于要用父类的特性的时候,如果有 Trait 就优先调用 Trait 的成员。
Trait 的声明
声明类需要使用 class 关键字,声明 Trait 当然也要使用 trait 关键字了, 类有的特性 Trait 一般都有。 Trait 支持 final、static 和 abstract 等修饰词,所以 Trait 也就支持抽象方法的使用、类定义静态方法,当然也可以定义属性。但 Trait 无法如类一样使用 new 实例化,因为 Trait 就是用来混入类中使用的,不能单独使用。如果拿 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 不能通过它自身来实例化对象,必须将其混入类中使用。相当于将 Trait 中的成员复制到类中,在应用类时就像使用自己的成员一样。如果要在类中使用 Trait 。需要通过 use 关键字将 Trait 混入类中。
其代码如下所示:
<?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 关键字,在dome1 类中混入 dome 中的成员。也可以通过 use 关键字一次混入多个 Trait 一起使用。通过逗号分割,在 use 声明列出多个 Trait ,可以都插入到一个类中。需要注意的是,多个 Trait 之间同时使用难免会发生冲突。 php5.4 从语法方面带入了相关的关键字语法 insteadof 。
示例代码如下所示:
<?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 中的成员混入类中,也可以在 Trait 中使用 use 关键字将另一个 Trait 中的成员混入进来。这样就形成了 Trait 之间的嵌套。为了对使用的类施加强制要求, Trait 支持抽象方法的使用。如果在 Trait 中申明需要实现的抽象方法,这样就能使使用它的类必须先实现它,就像继承抽象类,必须实现类中的抽象方法一样。
更详细的使用方式可以参考官方手册。但刚开始学习 Trait 应该了解如下的重点:
1. Trait 会覆盖调用类的父类方法。
2. 从基类继承的成员被 Trait 插入的成员所覆盖。优先顺序是:来自当前类的成员覆盖了 Trait 的方法,而 Trait 则覆盖了被继承的方法。
3. Trait 不能像类一样使用 new 实例化对象。
4. 单个 Trait 可由多个 Trait 组成。
5. 在单个类中,用 use 引入 Trait ,可以引入多个。
6. Trait 支持修饰词,例如 final、static、abstract。
7. 可以使用 insteadof 及 as 操作符解决 Trait之间的冲突。
8. 使用 as 语法还可以用来调整方法的访问控制。
【相关教程推荐】
1. 《php.cn独孤九贱(4)-php视频教程》
2. 视频教程:trait特性的声明与使用技巧:实现代码复用的类方法集合
3. php实战视频教程
以上就是什么是Trait?php中Trait的申明和使用技巧分享的详细内容,更多请关注Gxl网其它相关文章!
内容总结
以上是互联网集市为您收集整理的什么是Trait?php中Trait的申明和使用技巧分享全部内容,希望文章能够帮你解决什么是Trait?php中Trait的申明和使用技巧分享所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。