PHP的traits使用示例

前端之家收集整理的这篇文章主要介绍了PHP的traits使用示例前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧!

PHP 5.4中的traits,是新引入的特性,中文还真不知道如何准确翻译好。其实际的目的,是为了有的场合想用多继承,但PHP又没多继承,于是就发明了这样的一个东西。

Traits可以理解为一组能被不同的类都能调用到的方法集合,但Traits不是类!不能被实例化。

先来例子看下语法:

  1. <?PHP
  2. trait myTrait{
  3. function traitMethod1(){}
  4. function traitMethod2(){}
  5. }
  6. //然后是调用这个traits,语法为:
  7. class myClass{
  8. use myTrait;
  9. }
  10. //这样就可以通过use myTraits,调用Traits中的方法了,比如:
  11. $obj = new myClass();
  12. $obj-> traitMethod1 ();
  13. $obj-> traitMethod2 ();
  14. # End www.jb51.cc

 

  接下来,我们探究下为什么要用traits,举个例子,比如有两个类,分别为business(商务者)和Individual(个人),它们都有地址的属性,传统的做法是,再抽象出一个这两个类都共同有特性的父类,比如client,在client类中设置访问属性address,business和individual分别继承之,如下代码

  1. // Class Client
  2. class Client {
  3. private $address;
  4. public getAddress() {
  5. return $this->address;
  6. }
  7. public setAddress($address) {
  8. $this->address = $address;
  9. }
  10. }
  11. class Business extends Client{
  12. //这里可以使用address属性
  13. }
  14. // Class Individual
  15. class Individual extends Client{
  16. //这里可以使用address属性
  17. }
  18. # End www.jb51.cc

  但假如又有一个叫order类的,需要访问同样的地址属性,那怎么办呢?order类是没办法继承client类的,因为这个不符合OOP的原则。这个时候traits就派上用场了,可以定义一个traits,用来定义这些公共属性

  1. // Trait Address
  2. trait Address{
  3. private $address;
  4. public getAddress() {
  5. eturn $this->address;
  6. }
  7. public setAddress($address) {
  8. $this->address = $address;
  9. }
  10. }
  11. // Class Business
  12. class Business{
  13. use Address;
  14. // 这里可以使用address属性
  15. }
  16. // Class Individual
  17. class Individual{
  18. use Address;
  19. //这里可以使用address属性
  20. }
  21. // Class Order
  22. class Order{
  23. use Address;
  24. //这里可以使用address属性
  25. }
  26. # End www.jb51.cc

这样就方便多了!

猜你在找的PHP相关文章