PHP代码的多继承-PHP代码复用新的知识-trait
导读:
1、php中的trait是啥?
看上去既像类又像接口,其实都不是,Trait可以看做类的部分实现,可以混入一个或多个现有的PHP类中,其作用有两个:表明类可以做什么;提供模块化实现。Trait是一种代码复用技术,为PHP的单继承限制提供了一套灵活的代码复用机制。
2、PHP版本要求:
php5.4开始引入trait,其目的就是在于减少代码的重复,增加代码的复用性。
3、trait的使用场景:
试想这样一种情况,当有一个方法需要在很多的类中使用时,该怎么处理?
通常一般的处理方式会是,写一个基础类,在基类中实现这个方法,然后所有类都继承这个基类。
这是一种处理方法,但不是最好的处理方式。通常采用继承的情况是:几个类具有很大的相似性。比如人作为一个基类,学生、工人、等继承“人”这个基类来扩展。
由此,trait的作用就出来了,trait 可以在多个类中使用。
4、trait如何使用:
引用PHP手册中的例子:
例子一
<?php
trait ezcReflectionReturnInfo {
function getReturnType() { /*1*/ }
function getReturnDescription() { /*2*/ }
}
class ezcReflectionMethod extends ReflectionMethod {
use ezcReflectionReturnInfo;
/* ... */
}
class ezcReflectionFunction extends ReflectionFunction {
use ezcReflectionReturnInfo;
/* ... */
}
?>
先声明一个trait;
在类中使用use将该trait引入。
是不是非常简单,需要注意的是trait的优先级。
5、trait的优先级
从基类继承的成员会被 trait 插入的成员所覆盖。优先顺序是来自当前类的成员覆盖了 trait 的方法,而 trait 则覆盖了被继承的方法。
优先级:自身方法>trait的方法>继承的方法(就是这样子的。)
看例子
<?php
trait 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的使用。
<?php
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的单继承限制提供了一套灵活的代码复用机制。
相关推荐
Thinkphp6.0 获取绝对路径总结
Thinkphp6.0 获取绝对路径,改到了App 基础类里面获取,可通过助手函数获取: app()>getRootPath() //获取应用根目录 app()>get…
2022-06-30 16:33:52 | 分类:PHP | 作者:myerob | 阅读:503 | 标签:TP6 路径 | 收藏
php页面最大执行时间 set_time_limit函数不起作用
set_time_limit 不生效或者无效解决方法<?php global $begin; global $end; $begin = microtime(TRUE); try { $dsn …
2022-07-19 08:12:49 | 分类:PHP | 作者:myerob | 阅读:230 | 标签:php 页面 最大执行时间 set_time_limit 函数 | 收藏
THINKPHP 在CLASS内部USE引入其他类时,可以用$this直接条用其中的函数
class AdminController extends BaseController { use \app\common\traits\JumpTrait; /** …
2022-08-20 09:29:52 | 分类:PHP | 作者:myerob | 阅读:67 | 标签:THINKPHP | 收藏
PHP json_decode()报错 json_last_error()判断错误类型及解决方法
PHP json_decode()报错 json_last_error()判断错误类型 解决背景:最近在用curl请求接口获取json数据串的时候,一直出现PHP中json_decode()解析字符串…
2022-10-29 21:45:57 | 分类:PHP | 作者:myerob | 阅读:620 | 标签:PHP json_decode() 报错 json_last_error() 判断错误类型 解决方法 | 收藏
- 阅读榜
- 1. 什么情况下免征教育附加税,地方教育附加税?两附加费优惠政策
- 2. U.FL座 IPEX/IPX接头1代,2代,3代,4代,5代区分对照图
- 3. 概率统计学中95%置信区间的系数1.96怎么得到的?
- 4. 主席令13届第89号《中华人民共和国印花税法》
- 5. linux主机ssh命令来查看某一端口是否开放
- 6. 记录一个非常实用的前端拖拽插件interact.js(JS前端开发)
- 7. PHP全局变量如何在函数体里面使用方法总结
- 8. mounRiver/eclipse报错“Symbol could not be resolved”,但是编译没有问题
- 9. 常用浏览器User-Agent大全(总结)
- 10. 总结14款前端常用的富文本编辑器插件