博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP之Trait详解
阅读量:4611 次
发布时间:2019-06-09

本文共 1074 字,大约阅读时间需要 3 分钟。

php从以前到现在一直都是单继承的语言,无法同时从两个基类中继承属性和方法,为了解决这个问题,php出了Trait这个特性

用法:通过在类中使用use 关键字,声明要组合的Trait名称,具体的Trait的声明使用Trait关键词,Trait不能实例化

如下代码实例:

drive();echo "
";$cat->eat();echo "
";$cat->bark();?>

 

将会如下输出

 

再测试Trait、基类和本类对同名属性或方法的处理,如下代码

drive();echo "
";$cat->eat();?>

 

所以:Trait中的方法或属性会覆盖 基类中的同名的方法或属性,而本类会覆盖Trait中同名的属性或方法

一个类可以组合多个Trait,通过逗号相隔,如下

use trait1,trait2

当不同的trait中,却有着同名的方法或属性,会产生冲突,可以使用insteadof或 as进行解决,insteadof 是进行替代,而as是给它取别名

如下实例:

eat();echo "
";$cat->drive();echo "
";echo "
";echo "
";$dog = new dog();$dog->eat();echo "
";$dog->drive();echo "
";$dog->eaten();echo "
";$dog->driven();?>

 

输出如下

 

as 还可以修改方法的访问控制

eat();//报错,因为已经把eat改成了保护$cat = new Cat();$cat->eat();//正常运行,不会修改原先的访问控制$cat->eaten();//报错,已经改成了私有的访问控制?>

 

Trait也可以互相组合,还可以使用抽象方法,静态属性,静态方法等,实例如下

getName();echo "
";$animal->eat();echo "
";$animal->drive();echo "
";$animal::say();echo "
";$animal->test();echo "
";$animal->test();?>

 

输出如下

 

 
最常见的应用场景就是将底层的curd用trait封装,然后在控制器中调用即可
 
参考文章:https://zhuanlan.zhihu.com/p/81123521 

转载于:https://www.cnblogs.com/yulongcode/p/11524193.html

你可能感兴趣的文章
数组相关函数
查看>>
Python 和其他编程语言数据类型的比较
查看>>
T2695 桶哥的问题——送桶 题解
查看>>
HTML5 表单
查看>>
Android群英传》读书笔记 (3) 第六章 Android绘图机制与处理技巧 + 第七章 Android动画机制与使用技巧...
查看>>
关于微信公众平台测试号配置失败的问题
查看>>
【NOIP2001】统计单词个数
查看>>
linux常用端口
查看>>
异常处理
查看>>
/proc/uptime详解
查看>>
如何建立合适的索引?
查看>>
acwing 651. 逛画展
查看>>
(待完成)qbxt2019.05 总结12 - 趣味题目 鹰蛋
查看>>
[2018/11/18] Java数据结构(2) 简单排序 冒泡排序 选择排序 插入排序
查看>>
关于WPF程序只运行一个实例的方法
查看>>
图论:点分治
查看>>
mysql
查看>>
C/C++ 知识点---sizeof使用规则及陷阱分析(网摘)
查看>>
java小程序 示例
查看>>
前端开发在线小工具
查看>>