接口是对多重继承的一种变相实现, Traits可以被视为一种加强型的接口.

 
先来看如下代码

trait Hello
{
private $name = 'chenqionghe';
public function sayHello()
{
echo 'hello ';
}
}
trait World
{
public $age = '18';
public function sayWorld()
{
echo 'world ! ';
}
}
class HandsonBoy
{
use Hello,World;
public function say()
{
echo 'i am '.$this->name;
}
}
$boy = new HandSonBoy();
$boy->sayHello();
$boy->sayWorld();
echo $boy->say();

上面代码的运行结果如下

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAR0AAAApCAIAAACHlGojAAACbElEQVR4nO2YMU/DMBCF/a8Z2Ss2VsTAhFiQYISJkYW1EjCwMDAiMcDEVCmq7cud8+Im1Vd9qprUOb+782ucprev325sP38ent8vbp82l3en59cnZ1cnZ1en59eby/uL26eH5/ft509PPQAzkV6/fgFAS7p5fAEALenj+w8AtOArAD34CkAPvgLQg68A9OArAD34CkAPvgLQg68A9OArAD34CkAPvgLQU/VVSimlmOvS7uU8f7CcHXr8gkN5LacOfZTMN8tyKlmWZ0tvS1gYbcbMx/Qct6/6dGTWfJdTyYI2uW58tRbWq3z5+vHV1PSXlpewAgtnyfrHfVV8GkmDlzPb4nkjTnFkTVUeZ3hYS8GYaI7nq1DY0bwadO4NDvXXLuZoC5yDPXqGl/j1dybw7L6XT36+eGicd15Ym92jJ2+DPV0x35EKxv/daRvpr4Azr2h/a+Ptuvn77tFTa65Hf08C+8D8d6j2U+GJFs2/2VfO7Jr7MZ+v8mo7K+CcMdrfUZ87yxiNEzWwvT770Oir6V30NCD/Nn+343TwVbjiwX2gUf/5fDVlvNxXH/XNXkh/T/BVo572inffB67dVyr9PRH4yrkcp6/j6H7Ajln8am8v4apgcKfR31e1mkxc3w3tmBI/v2W1rc8+WMtumEbtsJa853wtjiHJqKmh0Bhc7Hra3Q+dqpyds+f1XLJ3+fCDP1Rbf+3DKS0YjZ9f27Y+e3L4OyYcGfKlXPTVwlmBRFgRM90lDn7/CQs+uAKA4wNfAejBVwB68BWAHnwFoAdfAejBVwB68BWAHnwFoAdfAejBVwB68BWAHnwFoOcfzWR9r6LCeEgAAAAASUVORK5CYII=" alt="" />

这里的HandsonBoy同时实现了两个traits,从而使其可以分别调用两个Traits里的代码段.从代码就可以看出,traits和接口很像,不同的是traits是可以导入代码的接口.
从某种意义来说,traits和接口都是对"多重继承"的一种变相实现.

PHP中的加强型接口Traits的更多相关文章

  1. WebApi接口 - 如何在应用中调用webapi接口

    很高兴能再次和大家分享webapi接口的相关文章,本篇将要讲解的是如何在应用中调用webapi接口:对于大部分做内部管理系统及类似系统的朋友来说很少会去调用别人的接口,因此可能在这方面存在一些困惑,希 ...

  2. Java 中的集合接口——List、Set、Map

    Java 中的集合接口——List.Set.Map 什么叫集合:集合就是Java API所提供的一系列类的实例,可以用于动态存放多个对象.这跟我们学过的数组差不多,那为什么我们还要学集合,我们看看数组 ...

  3. C#中对IDisposable接口的理解

    http://blog.sina.com.cn/s/blog_8abeac5b01019u19.html C#中对IDisposable接口的理解 本人最近接触一个项目,在这个项目里面看到很多类实现了 ...

  4. Java中的内部接口

    什么是内部接口 内部接口也称为嵌套接口,即在一个接口内部定义另一个接口.举个例子,Entry接口定义在Map接口里面,如下代码: public interface Map { interface En ...

  5. C#中抽象类和接口

    下面是我做的测试: using System; using System.Collections.Generic; using System.Linq; using System.Text; usin ...

  6. ODI中的临时接口

    在ODI 11g及后续的版本中,针对复杂的ETL处理,可分解为多个步骤,在中间步骤中使用临时接口,而不用建立相应的物理表,ODI会在处理过程中自动创建和删除这些中间表,从而降低ETL处理复杂度:同时, ...

  7. java 子接口中定义与父接口相同的方法

    今天碰到一个很有意思的问题,在java中如果子接口中定义了与父接口中已经有的方法会发生什么事情呢?比如: interface IRunnable extends Runnable{ void run( ...

  8. 如何通过图片在 HTTPS 网站中获取 HTTP 接口数据

    <script> (function() { var Decode=function(b){var e;e=[];var a=b.width,c=b.height,d=document.c ...

  9. 转:二十一、详细解析Java中抽象类和接口的区别

    转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...

随机推荐

  1. es6剩余参数

    function show(a,b,...args){ console.log(a) console.log(b) console.log(args) } show(10,20,30,30,36)

  2. java模板设计模式

    1.概述 模板设计模式定义:定义一个操作中的算法骨架,将步骤延迟到子类中. 模板设计模式是一种行为设计模式,一般是准备一个抽象类,将部分逻辑以具体方法或者具体的构造函数实现,然后声明一些抽象方法,这样 ...

  3. java中的接口与继承,接口的例子讲解

    extends 继承类:implements 实现接口. 简单说: 1.extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承, 2.JAVA中不支持多重继 ...

  4. 初学者必看的文章:在VM12中安装 RedHat RHEL7.2  系统的详细步骤:看我如何操纵RHEL系统

    一.开始安装 1)新建虚拟机 RHEL7.2 2)成功引导系统--开机出现此画面 Install Red Hat EnterpriseLinux 7.2  安装RHLE7.2 操作系统 Test th ...

  5. cvb源码分析,resful规范,drf,drf序列化组件,95

    1 CBV的源码分析 -Class Base View(基于类的视图) -Function Base View(基于函数的视图) -def as_view 类方法 -def view:类方法内部,闭包 ...

  6. 07arguments对象.html

    07arguments对象.html <!DOCTYPE html> <html lang="en"> <head> <meta char ...

  7. python学习,excel操作之xlrd模块常用操作

    import xlrd ##工作表## #打开excel f = xlrd.open_workbook("test.xlsx") file = f.sheet_by_name(&q ...

  8. 【Solidity】学习(1)

    string string类型不可以直接通过length读取字符串长度,也不可以直接通过下标直接访问数据元素 使用的方法是:强制类型转换为bytes 其中," " 和‘ ’都可以表 ...

  9. Solidity: ParserError: Expected pragma, import directive or contract/interface/library definition.

    第一行忘记加分号 pragma solidity ^0.4.0;

  10. Ajax获取Json多个集合并同时遍历

    Ajax获取Json多个集合并同时遍历: 方法一.:将多个集合放入MAP集合. 后台:Servlet @Override protected void doPost(HttpServletReques ...