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程序中的常见漏洞进行攻击(下)
Oct 09 PHP
Php+SqlServer实现分页显示
Oct 09 PHP
php数组函数序列之asort() - 对数组的元素值进行升序排序,保持索引关系
Nov 02 PHP
SESSION存放在数据库用法实例
Aug 08 PHP
PHP简单判断字符串是否包含另一个字符串的方法
Mar 25 PHP
Laravel路由设定和子路由设定实例分析
Mar 30 PHP
php使用ffmpeg获取视频信息并截图的实现方法
May 03 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
Apr 05 PHP
php及codeigniter使用session-cookie的方法(详解)
Apr 06 PHP
PHP实现的简单组词算法示例
Apr 10 PHP
PHP设计模式之装饰器模式定义与用法简单示例
Aug 13 PHP
Yii2框架自定义验证规则操作示例
Feb 08 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
php数组函数序列之array_keys() - 获取数组键名
2011/10/30 PHP
如何给phpcms v9增加类似于phpcms 2008中的关键词表
2013/07/01 PHP
php实现图片缩放功能类
2013/12/18 PHP
php时间函数用法分析
2016/05/28 PHP
PHP实现随机生成水印图片功能
2017/03/22 PHP
解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
2019/10/11 PHP
PHP isset empty函数相关面试题及解析
2020/12/11 PHP
IE和FireFox(FF)中js和css的不同
2009/04/13 Javascript
用nodejs写的一个简单项目打包工具
2013/05/11 NodeJs
Javascript中Event属性搜集整理
2013/09/17 Javascript
理解JavaScript事件对象
2016/01/25 Javascript
JS给按钮添加跳转功能类似a标签
2017/05/30 Javascript
jQuery niceScroll滚动条错位问题的解决方法
2018/02/03 jQuery
js实现鼠标切换图片(无定时器)
2021/01/27 Javascript
[05:53]完美世界携手游戏风云打造 卡尔工作室观战系统篇
2013/04/22 DOTA
[01:36]极致酷炫!TI9典藏宝瓶+撼地者至宝展示
2019/06/11 DOTA
使用Python编写提取日志中的中文的脚本的方法
2015/04/30 Python
python运行时间的几种方法
2016/06/17 Python
Python编程之微信推送模板消息功能示例
2017/08/21 Python
Flask数据库迁移简单介绍
2017/10/24 Python
Python实现中一次读取多个值的方法
2018/04/22 Python
python破解zip加密文件的方法
2018/05/31 Python
Python实现获取汉字偏旁部首的方法示例【测试可用】
2018/12/18 Python
python学习--使用QQ邮箱发送邮件代码实例
2019/04/16 Python
pandas基于时间序列的固定时间间隔求均值的方法
2019/07/04 Python
CSS3制作炫酷的自定义发光文字
2016/03/28 HTML / CSS
Haglöfs瑞典官方网站:haglofs火柴棍,欧洲顶级户外品牌
2018/10/18 全球购物
Lucene推荐的分页方式是什么?
2015/12/07 面试题
档案管理员岗位职责
2013/12/01 职场文书
物理课外活动总结
2014/08/27 职场文书
十岁生日答谢词
2015/01/05 职场文书
总经理检讨书范文
2015/02/16 职场文书
学生病假条怎么写
2015/08/17 职场文书
Python学习之异常中的finally使用详解
2022/03/16 Python
Spring Boot项目传参校验的最佳实践指南
2022/04/05 Java/Android
PHP正则表达式之RCEService回溯
2022/04/11 PHP