当前位置:Gxlcms > PHP教程 > PHP中的traits简单使用实例_PHP

PHP中的traits简单使用实例_PHP

时间:2021-07-01 10:21:17 帮助过:10人阅读

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. >

  接下来,我们探究下为什么要用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. }

  但假如又有一个叫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. }

这样就方便多了!

人气教程排行