接口是对多重继承的一种变相实现, 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. 解决mysql for docker容器报错:Authentication plugin 'caching_sha2_password' cannot be loaded

    为图方便,懒得在mac上安装mysql了,一个是管理不方便,第二个是为了方便多机器同步开发环境.就使用docker安装了. 拉取mysql镜像 docker pull mysql 运行mysql实例 ...

  2. 学习Acegi应用到实际项目中(6)

    在企业应用中,用户的用户名.密码和角色等信息一般存放在RDBMS(关系数据库)中.前面几节我们采用的是InMemoryDaoImpl,即基于内存的存放方式.这节我们将采用RDBMS存储用户信息. Us ...

  3. [转]dd命令、cp命令详解+dd命令、cp命令对比 ---delong

    出处:http://blog.csdn.net/sun_app/article/details/18263299 1.dd命令详解 1)中文man手册dd的解释 NAME       dd - 转换和 ...

  4. H3C 路由策略(人为打环)

    拓扑如上 任务1:去除环路双ospf 引入 造成路由环路一边是 1             一边是10关掉任意lo口都会生成新的路由表 但是路由表指向不对 变成了一个圆 我们可以采用引入路由打上tag ...

  5. xmlhttprequest readyState 属性的五种状态

    关于readystate五个状态总结如下: readyState 状态    状态说明(0)未初始化此阶段确认XMLHttpRequest对象是否创建,并为调用open()方法进行未初始化作好准备.值 ...

  6. 点击a标签的文字后页面的跳转

    1.方法一 (1)js var html=""; html+="<a href=\"#\" onclick=\check('"+id+ ...

  7. 2.Spring 拦截器应用

    首先咱们来了解一下具体的业务场景(这个跟第一篇中的很相似但有不同):具体的业务是这样的,现在系统中有六十多个主档(功能模块),每个主档都有新增.修改.删除功能,当我们在对每个主档做这些操作时需要对其记 ...

  8. ZKWeb网页框架2.1正式发布

    2.1.0更新的内容有 更新引用类库 NHibernate 5.1.0 Npgsql 3.2.7 MySqlConnector 0.37.0 Dapper 1.50.4 Dommel 1.10.1 Z ...

  9. JavaScript变量与数据类型详解

    变量 变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念.变量可以通过变量名访问. 变量的作用就是用于存储值. 语法: 声明变量时,总是以关键字var打头.任何情况下都应该这样做.然后给变 ...

  10. 用CSS解决一个让人头疼的问题

    需求:下面的文字内容分别都写在一个a标签里,现在需要获取到每一行最后一个a标签的竖线,并删除  我首先想到的是用CSS3新增选择器—— :nth-child()来解决,比如 :nth-child(3n ...