PHP中的traits简单使用实例


Posted in PHP onMay 13, 2015

PHP 5.4中的traits,是新引入的特性,中文还真不知道如何准确翻译好。其实际的目的,是为了有的场合想用多继承,但PHP又没多继承,于是就发明了这样的一个东西。
       Traits可以理解为一组能被不同的类都能调用到的方法集合,但Traits不是类!不能被实例化。先来例子看下语法:

<?php
trait myTrait{
  function traitMethod1(){}
  function traitMethod2(){}

}

//然后是调用这个traits,语法为:
class myClass{
  use myTrait;
}

//这样就可以通过use myTraits,调用Traits中的方法了,比如:
$obj = new myClass();
$obj-> traitMethod1 ();
$obj-> traitMethod2 (); 
>

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

// Class Client 
class Client { 
  private $address; 
  public getAddress() { 
    return $this->address; 
  }    
  public setAddress($address) { 
    $this->address = $address;  
  } 
} 
   
class Business extends Client{ 
  //这里可以使用address属性 
} 

// Class Individual 
class Individual extends Client{ 
//这里可以使用address属性 
}

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

// Trait Address
trait Address{
  private $address;
  public getAddress() {
    eturn $this->address;
  }
  public setAddress($address) {
    $this->address = $address;
  }
}
// Class Business
class Business{
  use Address;
  // 这里可以使用address属性
}
// Class Individual
class Individual{
  use Address;
  //这里可以使用address属性
}
// Class Order
class Order{
  use Address;
  //这里可以使用address属性
}

这样就方便多了!

PHP 相关文章推荐
PHP读取目录下所有文件的代码
Jan 07 PHP
PHP 操作文件的一些FAQ总结
Feb 12 PHP
PHP 分页类(模仿google)-面试题目解答
Sep 13 PHP
PHP 巧用数组降低程序的时间复杂度
Jan 01 PHP
zend optimizer在wamp的基础上安装图文教程
Oct 26 PHP
ThinkPHP实现跨模块调用操作方法概述
Jun 20 PHP
php判断linux下程序问题实例
Jul 09 PHP
如何使用纯PHP实现定时器任务(Timer)
Jul 31 PHP
PHP面向对象程序设计实例分析
Jan 26 PHP
详解PHP处理字符串类似indexof的方法函数
Jun 11 PHP
Laravel框架分页实现方法分析
Jun 12 PHP
php远程请求CURL实例教程(爬虫、保存登录状态)
Dec 10 PHP
PHP中的traits实现代码复用使用实例
May 13 #PHP
浅谈本地WAMP环境的搭建
May 13 #PHP
PHP脚本监控Nginx 502错误并自动重启php-fpm
May 13 #PHP
简单解决新浪SAE无法上传文件的问题
May 13 #PHP
PHP file_get_contents函数读取远程数据超时的解决方法
May 13 #PHP
正确的PHP匹配UTF-8中文的正则表达式
May 13 #PHP
如何在HTML 中嵌入 PHP 代码
May 13 #PHP
You might like
如何做到多笔资料的同步
2006/10/09 PHP
PHP设置图片文件上传大小的具体实现方法
2013/10/11 PHP
在Mac OS上自行编译安装Apache服务器和PHP解释器
2015/12/24 PHP
Laravel4中的Validator验证扩展用法详解
2016/07/26 PHP
PHP多个图片压缩成ZIP的方法
2020/08/18 PHP
laravel框架实现去掉URL中index.php的方法
2019/10/12 PHP
javascript中的有名函数和无名函数
2007/10/17 Javascript
JavaScript高级程序设计 读书笔记之十 本地对象Date日期
2012/02/27 Javascript
基于jquery和svg实现超炫酷的动画特效
2014/12/09 Javascript
举例详解AngularJS中ngShow和ngHide的使用方法
2015/06/19 Javascript
React-native桥接Android原生开发详解
2018/01/17 Javascript
每个 JavaScript 工程师都应懂的33个概念
2018/10/22 Javascript
vue项目每30秒刷新1次接口的实现方法
2018/12/04 Javascript
[49:15]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第二场 1月19日
2021/03/11 DOTA
python连接sql server乱码的解决方法
2013/01/28 Python
使用Python脚本操作MongoDB的教程
2015/04/16 Python
Python中unittest模块做UT(单元测试)使用实例
2015/06/12 Python
python3制作捧腹网段子页爬虫
2017/02/12 Python
python TCP Socket的粘包和分包的处理详解
2018/02/09 Python
Python中一行和多行import模块问题
2018/04/01 Python
Empty test suite.(PyCharm程序运行错误的解决方法)
2018/11/30 Python
django ManyToManyField多对多关系的实例详解
2019/08/09 Python
解决运行出现'dict' object has no attribute 'has_key'问题
2020/07/15 Python
德国圣伯纳德草药屋:Kräuterhaus Sanct Bernhard(有中文站)
2018/08/05 全球购物
Yahoo的PHP面试题
2014/05/26 面试题
业务副厂长岗位职责
2014/01/03 职场文书
幼儿园安全生产月活动总结
2014/07/05 职场文书
纪念九一八事变演讲稿:勿忘国耻
2014/09/14 职场文书
团代会开幕词
2015/01/28 职场文书
幼儿园父亲节活动总结
2015/02/12 职场文书
哈姆雷特读书笔记
2015/06/29 职场文书
公司联欢会主持词
2015/07/04 职场文书
运动会致辞稿
2015/07/29 职场文书
应届毕业生的自我评价
2019/06/21 职场文书
redis通过6379端口无法连接服务器(redis-server.exe闪退)
2021/05/08 Redis
Vue通过懒加载提升页面响应速度
2021/05/10 Vue.js