首页 > 开发 > PHP > 正文

PHP中的traits简单使用实例

2024-05-04 23:35:16
字体:
来源:转载
供稿:网友

这篇文章主要介绍了PHP中的traits简单使用实例,本文着重讲解traits的语法、traits有什么作用、什么情况下使用traits,需要的朋友可以参考下

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

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

 

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

接下来,我们探究下为什么要用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.  
  12. class Business extends Client{  
  13. //这里可以使用address属性  
  14. }  
  15.  
  16. // Class Individual  
  17. class Individual extends Client{  
  18. //这里可以使用address属性  
  19. }  

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

 

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

这样就方便多了!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表