1、php中的trait是啥?

看上去既像类又像接口,其实都不是,Trait可以看做类的部分实现,可以混入一个或多个现有的PHP类中,其作用有两个:表明类可以做什么;提供模块化实现。Trait是一种代码复用技术,为PHP的单继承限制提供了一套灵活的代码复用机制。

2、PHP版本要求:

php5.4开始引入trait,其目的就是在于减少代码的重复,增加代码的复用性。

3、trait的使用场景:

试想这样一种情况,当有一个方法需要在很多的类中使用时,该怎么处理?

通常一般的处理方式会是,写一个基础类,在基类中实现这个方法,然后所有类都继承这个基类。

这是一种处理方法,但不是最好的处理方式。通常采用继承的情况是:几个类具有很大的相似性。比如人作为一个基类,学生、工人、等继承“人”这个基类来扩展。

由此,trait的作用就出来了,trait 可以在多个类中使用。

4、trait如何使用:

引用PHP手册中的例子:

例子一

trait ezcReflectionReturnInfo {

function getReturnType() { /*1*/ }

function getReturnDescription() { /*2*/ }

}

class ezcReflectionMethod extends ReflectionMethod {

use ezcReflectionReturnInfo;

/* ... */

}

class ezcReflectionFunction extends ReflectionFunction {

use ezcReflectionReturnInfo;

/* ... */

}

?>

1、先声明一个trait;

2、在类中使用use将该trait引入。

是不是非常简单(手动逃)?需要注意的是trait的优先级。

5、trait的优先级

(敲黑板)从基类继承的成员会被 trait 插入的成员所覆盖。优先顺序是来自当前类的成员覆盖了 trait 的方法,而 trait 则覆盖了被继承的方法。

优先级:自身方法>trait的方法>继承的方法(就是这样子的。)

看例子

trait HelloWorld {public functionsayHello() {echo ‘Hello World!‘;

}

}classTheWorldIsNotEnough {useHelloWorld;public functionsayHello() {echo ‘Hello Universe!‘;

}

}$o = newTheWorldIsNotEnough();$o->sayHello();//输出是 Hello Universe!

?>

还有一点需要注意的是:多个trait的使用。

trait Hello {

public function sayHello() {

echo ‘Hello ‘;

}

}

trait World {

public function sayWorld() {

echo ‘World‘;

}

}

class MyHelloWorld {

use Hello, World;

public function sayExclamationMark() {

echo ‘!‘;

}

}

$o = new MyHelloWorld();

$o->sayHello();

$o->sayWorld();

$o->sayExclamationMark();

?>

总结:Trait是一种代码复用技术,为PHP的单继承限制提供了一套灵活的代码复用机制。

php _trait,php Trait的使用相关推荐

  1. 2021年大数据常用语言Scala(三十一):scala面向对象 特质(trait)

    目录 特质(trait) 作为接口使用 定义具体的方法 定义具体方法和抽象方法 定义具体的字段和抽象的字段 实例对象混入trait trait调用链 trait的构造机制 trait继承class 特 ...

  2. SCALA当的trait

    不是特别懂,但感觉和RUBY当中的MIX-IN功能有几分相似,这又扯到了多重继承及JAVA当中的接口虚拟类了.. package com.hengheng.scalaclass UseTrait {} ...

  3. 10玩rust_有趣的 Rust 类型系统: Trait

    也许你已经学习了标准库提供的 String 类型,这是一个 UTF-8 编码的可增长字符串.该类型的结构为: pub struct String {vec: Vec<u8>, } UTF- ...

  4. php 接口使用场景,接口使用场景、trait基本功能

    接口使用场景 单接口 接口可以突破PHP类的继承限制,允许多继承,形成了多层级的接口 用抽象类来部分实现一个接口 接口是实现多态的重要手段<?php interface Animal { con ...

  5. scala学习手记34 - trait方法的延迟绑定

    trait的方法的延迟绑定就是先混入的trait的方法会后调用.这一点从上一节的实例中也可以看出来. 下面再来看一个类似的例子: abstract class Writer {def write(me ...

  6. scala class和object,trait的区别

    2019独角兽企业重金招聘Python工程师标准>>> Scala类 class Counter {private var value = 0 // 必须初始化字段def incre ...

  7. Scala Trait详解

    为什么80%的码农都做不了架构师?>>>    除了从父类集成代码外,Scala中的类还允许从一个或者多个traits中导入代码. 对于Java程序员来说理解traits的最好方法就 ...

  8. Spark基础-scala学习(三、Trait)

    面向对象编程之Trait trait基础知识 将trait作为接口使用 在trait中定义具体方法 在trait中定义具体字段 在trait中定义抽象字段 trait高级知识 为实例对象混入trait ...

  9. scala(3):class和object,trait的区别

    2019独角兽企业重金招聘Python工程师标准>>> Scala类 1 2 3 4 5 6 7 8 9 10 11 12 13 class Counter { private va ...

最新文章

  1. python3 next()_Python3 File next() 方法 - Python 3 基础教程
  2. iPhone nano 被取消是因为乔布斯看到了风向?
  3. JavaScript入门经典(第4版)
  4. pytorch 1.9.0 backward函数解释以及报错(RuntimeError: grad can be implicitly created only for scalar outputs)
  5. Git 之一 起源、安装、配置
  6. [vue] 你有自己用vue写过UI组件库吗?
  7. nginx的源代码分析--间接回调机制的使用和类比
  8. Servlet与JSP项目实战 — 博客系统(上)
  9. 在FTP服务器上搜索指定文件
  10. python爬取千图网高清图
  11. 使用Cloudflare API动态解析域名IP
  12. n维空间的欧氏距离公式_n维欧氏空间中球的体积公式与表面积公式之间的微分关系(论文资料).pdf...
  13. python爬虫——百度文本审核技术
  14. 微信公众平台的STRUTS
  15. 部署Python的框架下的web app的详细教程
  16. 2022年总结关于网络安全工程师职业发展方向和职业前景
  17. Android事件传递简单分析
  18. 网络状态码302和303的区别究竟是啥?面试官最满意这种回答
  19. 微分算法 非侵入式负荷识别_非侵入式负荷监测的识别方法和关键技术
  20. 李建忠老师-设计模式

热门文章

  1. 本科生获42万元奖学金!培养拔尖人才,这所高校动真格!
  2. 一条消息未发,粉丝已破千万
  3. 尬出天际!和导师微信聊天大型翻车现场!
  4. 我在网上抢火车票:多加了100元的加速包,却依然买不到票
  5. 岳阳鸿蒙数学培优阶梯训练,鸿蒙应用-呼吸训练app部分练习展示(开始)
  6. 强行更改linux服务器时间,加强Linux服务器安全的20项建议
  7. 6大设计原则之接口隔离原则
  8. Unity3d--跨平台(一)
  9. 阿里云PolarDB开源数据库社区与 Tapdata 联合共建开放数据技术生态
  10. 阿里集团业务驱动的升级 —— 聊一聊Dubbo 3.0 的演进思路