php _trait,php Trait的使用
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的使用相关推荐
- 2021年大数据常用语言Scala(三十一):scala面向对象 特质(trait)
目录 特质(trait) 作为接口使用 定义具体的方法 定义具体方法和抽象方法 定义具体的字段和抽象的字段 实例对象混入trait trait调用链 trait的构造机制 trait继承class 特 ...
- SCALA当的trait
不是特别懂,但感觉和RUBY当中的MIX-IN功能有几分相似,这又扯到了多重继承及JAVA当中的接口虚拟类了.. package com.hengheng.scalaclass UseTrait {} ...
- 10玩rust_有趣的 Rust 类型系统: Trait
也许你已经学习了标准库提供的 String 类型,这是一个 UTF-8 编码的可增长字符串.该类型的结构为: pub struct String {vec: Vec<u8>, } UTF- ...
- php 接口使用场景,接口使用场景、trait基本功能
接口使用场景 单接口 接口可以突破PHP类的继承限制,允许多继承,形成了多层级的接口 用抽象类来部分实现一个接口 接口是实现多态的重要手段<?php interface Animal { con ...
- scala学习手记34 - trait方法的延迟绑定
trait的方法的延迟绑定就是先混入的trait的方法会后调用.这一点从上一节的实例中也可以看出来. 下面再来看一个类似的例子: abstract class Writer {def write(me ...
- scala class和object,trait的区别
2019独角兽企业重金招聘Python工程师标准>>> Scala类 class Counter {private var value = 0 // 必须初始化字段def incre ...
- Scala Trait详解
为什么80%的码农都做不了架构师?>>> 除了从父类集成代码外,Scala中的类还允许从一个或者多个traits中导入代码. 对于Java程序员来说理解traits的最好方法就 ...
- Spark基础-scala学习(三、Trait)
面向对象编程之Trait trait基础知识 将trait作为接口使用 在trait中定义具体方法 在trait中定义具体字段 在trait中定义抽象字段 trait高级知识 为实例对象混入trait ...
- 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 ...
最新文章
- python3 next()_Python3 File next() 方法 - Python 3 基础教程
- iPhone nano 被取消是因为乔布斯看到了风向?
- JavaScript入门经典(第4版)
- pytorch 1.9.0 backward函数解释以及报错(RuntimeError: grad can be implicitly created only for scalar outputs)
- Git 之一 起源、安装、配置
- [vue] 你有自己用vue写过UI组件库吗?
- nginx的源代码分析--间接回调机制的使用和类比
- Servlet与JSP项目实战 — 博客系统(上)
- 在FTP服务器上搜索指定文件
- python爬取千图网高清图
- 使用Cloudflare API动态解析域名IP
- n维空间的欧氏距离公式_n维欧氏空间中球的体积公式与表面积公式之间的微分关系(论文资料).pdf...
- python爬虫——百度文本审核技术
- 微信公众平台的STRUTS
- 部署Python的框架下的web app的详细教程
- 2022年总结关于网络安全工程师职业发展方向和职业前景
- Android事件传递简单分析
- 网络状态码302和303的区别究竟是啥?面试官最满意这种回答
- 微分算法 非侵入式负荷识别_非侵入式负荷监测的识别方法和关键技术
- 李建忠老师-设计模式