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+mysql 采用ajax技术的 省 市 地 3级联动无刷新菜单 源码
Dec 16 PHP
抓取YAHOO股票报价的类
May 15 PHP
基于PHP选项与信息函数的使用详解
May 10 PHP
探讨:如何使用PhpDocumentor生成文档
Jun 25 PHP
PHP程序员基本要求和必备技能
May 09 PHP
php的SimpleXML方法读写XML接口文件实例解析
Jun 16 PHP
跟我学Laravel之配置Laravel
Oct 15 PHP
PHP获取当前完整URL地址的函数
Dec 21 PHP
分享一则PHP定义函数代码
Feb 26 PHP
php.ini中的request_order推荐设置
May 10 PHP
Laravel 5+ .env环境配置文件详解
Apr 06 PHP
浅谈如何提高PHP代码的质量
May 28 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
Zerg基本策略
2020/03/14 星际争霸
PHP简洁函数(PHP简单明了函数语法)
2012/06/10 PHP
PHP获取指定日期是星期几的实现方法
2016/11/30 PHP
一些相见恨晚的 JavaScript 技巧
2010/04/25 Javascript
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
最佳JS代码编写的14条技巧
2011/01/09 Javascript
读jQuery之九 一些瑕疵说明
2011/06/21 Javascript
JavaScript自定义事件介绍
2013/08/29 Javascript
javascript中expression的用法整理
2014/05/13 Javascript
js实现点击左右按钮轮播图片效果实例
2015/01/29 Javascript
Jquery中map函数的用法
2016/06/03 Javascript
AngularJs学习第八篇 过滤器filter创建
2016/06/08 Javascript
iOS和Android用同一个二维码实现跳转下载链接的方法
2016/09/28 Javascript
原生js实现查询天气小应用
2016/12/09 Javascript
JavaScript数组去重的6个方法
2017/01/21 Javascript
JS+CSS实现下拉刷新/上拉加载插件
2017/03/31 Javascript
Vue.js仿Metronic高级表格(一)静态设计
2017/04/17 Javascript
微信页面弹出键盘后iframe内容变空白的解决方案
2017/09/20 Javascript
arcgis for js栅格图层叠加(Raster Layer)问题
2017/11/22 Javascript
Phaser.js实现简单的跑酷游戏附源码下载
2018/10/26 Javascript
JS+CSS+HTML实现“代码雨”类似黑客帝国文字下落效果
2020/03/17 Javascript
如何在 Vue 中使用 JSX
2021/02/14 Vue.js
[46:40]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[01:02:32]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第二场 2月26日
2021/03/11 DOTA
java中两个byte数组实现合并的示例
2018/05/09 Python
pandas dataframe的合并实现(append, merge, concat)
2019/06/24 Python
Django发送邮件和itsdangerous模块的配合使用解析
2019/08/10 Python
简单了解python字符串前面加r,u的含义
2019/12/26 Python
完美解决jupyter由于无法import新包的问题
2020/05/26 Python
python中def是做什么的
2020/06/10 Python
python中添加模块导入路径的方法
2021/02/03 Python
image-set实现Retina屏幕下图片显示详细介绍
2012/12/24 HTML / CSS
HTML5 canvas画矩形时出现边框样式不一致的解决方法
2013/10/14 HTML / CSS
廉洁自律承诺书2015
2015/01/22 职场文书
《月球之谜》教学反思
2016/02/20 职场文书
使用redis实现延迟通知功能(Redis过期键通知)
2021/09/04 Redis