php中trait的使用
来源:互联网 发布:软件测试简单吗 编辑:程序博客网 时间:2024/05/17 04:40
php中trait的使用
1、php中的trait是啥?
看上去既像类又像接口,其实都不是,Trait可以看做类的部分实现,可以混入一个或多个现有的PHP类中,其作用有两个:表明类可以做什么;提供模块化实现。Trait是一种代码复用技术,为PHP的单继承限制提供了一套灵活的代码复用机制。
2、PHP版本要求:
php5.4开始引入trait,其目的就是在于减少代码的重复,增加代码的复用性。
3、trait的使用场景:
试想这样一种情况,当有一个方法需要在很多的类中使用时,该怎么处理?
通常一般的处理方式会是,写一个基础类,在基类中实现这个方法,然后所有类都继承这个基类。
这是一种处理方法,但不是最好的处理方式。通常采用继承的情况是:几个类具有很大的相似性。比如人作为一个基类,学生、工人、等继承“人”这个基类来扩展。
由此,trait的作用就出来了,trait 可以在多个类中使用。
4、trait如何使用:
引用PHP手册中的例子:
例子一
<?phptrait 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的方法>继承的方法(就是这样子的。)
看例子
<?phptrait HelloWorld { public function sayHello() { echo 'Hello World!'; }}class TheWorldIsNotEnough { use HelloWorld; public function sayHello() { echo 'Hello Universe!'; }}$o = new TheWorldIsNotEnough();$o->sayHello();//输出是 Hello Universe!?>
还有一点需要注意的是:多个trait的使用。
<?phptrait 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的单继承限制提供了一套灵活的代码复用机制。
附:以上是trait的基本使用,其还有几个比较高级的使用注意点,详细的使用方法可以参见PHP手册,这里给出链接:PHP手册中trait的使用!以上内容中的例子都是来自于该手册。
参考:
1. http://php.net/manual/zh/language.oop5.traits.php
2. http://laravelacademy.org/post/4281.html
3. http://www.jianshu.com/p/47f0cdbe9b2c
- php中trait的使用
- php中trait使用
- Php学习之trait的使用
- PHP中Trait
- PHP中Trait特性
- Scala 中trait的使用(一)
- Scala 中trait的使用(二)
- php的trait特性
- trait的使用心得
- PHP 5.4 的 Trait 特性
- PHP的新特性trait
- PHP 5.4 的 Trait 特性
- PHP 5.4 的 Trait 特性
- 什么是php的性状(Trait)
- php trait
- php trait
- PHP TRAIT
- PHP Trait
- ubuntu16.04下使用matplotlib出现`TypeError: Couldn't find foreign struct converter for 'cairo.Context'`解决
- Swift
- 面向高能物理的大数据管理系统
- Xrecyclerview的使用(上拉刷新,下拉加载)
- bzoj 2456 mode 模拟? 解题报告
- php中trait的使用
- [博弈] Codeforces Gym101190 NEERC2016G. Game on Graph
- 中文分词算法笔记
- 51nod 1318 最大公约数与最小公倍数方程组
- 【Nginx+Keepalived】组建高可用负载平衡Web server集群
- C和C++中标准输入中遇到的问题
- Educational Codeforces Round 28 题解
- 【DFS】NOIP2014Day1T2[联合权值]题解
- 【2014acm西安现场赛】K