批改状态:合格
老师批语:trait就像是一个游离在外的孤儿, 希望被主人收留 , 这个主人可以类或抽象类,或更大的trait
insteadof替换as改名
as高级用法修改访问控制
<?phptrait trait1{public function eat(){echo '朱老师是一个吃货吗?';}}trait trait2{public function eat(){echo '朱老师不是吃货';}}class Nicola{use trait1,trait2{trait1::eat insteadof trait2;trait2::eat as eaten;}}
as高级用法,可以修改 trait 中成员的访问控制
<?php//traittrait trait1{public function eat(){echo '朱老师是一个吃货吗?';}}trait trait2{public function eat(){echo '朱老师不是吃货';}}class Nicola{//修改访问权限// use trait1 {eat as protected;}//修改别名use trait1 {eat as eat1;}}$nicola = new Nicola;echo $nicola->eat();echo '<hr>';echo $nicola->eat1();
<?php//trait和接口的组合//年终奖抽奖$prices = ['单车', '摩托', '宝马', '法拉利', '直升机', '战斗机'];// 接口interface iKey{// 随机抽奖public static function generateId(int $min, int $max): int;}// trait: 真实实现目的trait tCreateId{public static function generateId(int $min, int $max): int{return mt_rand($min, $max);}}// 工作类class DrawPrize implements iKey{use tCreateId;public static function choujiang(array $prices, int $id){return $prices[$id];}}//员工开始抽奖$id = DrawPrize::generateId(0, 5);$price = DrawPrize::choujiang($prices, $id);printf('恭喜你!你的年终奖品是: <span style="color:red">%s</span>', $price);
Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用 method。Trait 和 Class 组合的语义定义了一种减少复杂性的方式,避免传统多继承和 Mixin 类相关典型问题。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号