请选择 进入手机版 | 继续访问电脑版
收起左侧

php-trait

[复制链接]

552

主题

569

帖子

1万

积分

管理员

站长

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
16427

灌水之王

QQ
发表于 2020-2-3 18:07:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
trait 无法实例化


使用use关键字使用


优先级:
从基类继承的成员会被 trait 插入的成员所覆盖。优先顺序是来自当前类的成员覆盖了 trait 的方法,而 trait 则覆盖了被继承的方法。
本类 》》 trait 》》 基类


多个trait 使用方式
use Hello, World;


冲突:
当use两个trait时 如果这两个trait中有同名方法  就会冲突

就会报错:

翻译如下:
尚未应用Trait方法测试,因为在app\index\controller\Dog上与其他Trait方法存在冲突
如果存在同名方法 则需要使用insteadof  操作符明确指定需要用哪个trait中的方法  insteadof  翻译过来是代替的意思


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


insteadof  实例:

结果:

下面说as 别名的使用:

结果:

同名方法和别名方法都可以访问

使用 as 语法还可以用来调整方法的访问控制。可以同时设置访问权限和别名
使用as调整trait 里面的方法或属性打的访问权限

下图我给trait中的一个方法设置权限为private 后  在子类中调用trait中的test方式时  编辑器就会报错


就会提示Member has private access 成员是专有权限

也可以同时使用 as 设置别名和访问权限


注意的是  权限在签名  别名在后面



组合trait
trait 也能使用trait


trait 支持抽象成员

使用trait的类必需实现该trait中的抽象方法


trait的静态方法和静态属性

结果:

静态成员:如果该类没有销毁,则静态成员一直存在,不会重新创建赋值









我的理解:
先声明一个trait 形式和声明类 一样
只不过关键字不一样
也有属性和方法



QQ:2424004764
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|客户端下载|先锋者IT论坛 ( 湘ICP备16007032号湘公网安备 43030202001052号

GMT+8, 2024-3-29 02:02 , Processed in 0.106879 second(s), 21 queries , File On.

Powered by Discuz! X3.3

© 2017 bbs.fologde.com. Template By Gstudio

快速回复 返回顶部 返回列表