批改状态:合格
老师批语:trait可以将类中方法,进行更好的归类与整理, 对用户提供一个更加简洁的接口
<?php//1.先写2个trait,使2个trait中有又相同的方法aaatrait Demo1{public function aaa(){return __TRAIT__ . '***' . __METHOD__;}}trait Demo2{public function aaa(){return __TRAIT__ . '---' . __METHOD__;}protected function nnn(){return __TRAIT__ . '+++' . __METHOD__;}}//1.替代,用Demo1中的aaa替换Demo2中的aaaclass Demo3{use Demo1, Demo2{Demo1::aaa insteadof Demo2;}}$demo = new Demo3;echo $demo->aaa() , '<hr>';//2.别名,把Demo2中的aaa取一个别名,客户端访问别名//使用这种方法也必须用第一个Demo1中的aaa替代Demo2中的aaa,否则会出错class Demo4{use Demo1, Demo2{Demo1::aaa insteadof Demo2;Demo2::aaa as bbb;}}$demo = new Demo4;echo $demo->bbb() , '<hr>';//3.用as修改trait中成员的访问控制//把Demo2种的受保护的aaa修改成为公共的的访问属性//用use+as修改trait中的成员的访问控制的时候必须要修改发放的名称class Demo5{use Demo2{nnn as public vvv;}}$demo = new Demo5;echo $demo->vvv() , '<hr>';
<?php//1.先建立一个接口//先判断当天脚本中有没有要建立的接口名称,如果没有再建立if (!interface_exists('iUser')){interface iUser{public function user();}}//2.再建立一个抽象类if (!class_exists('user1')){abstract class user1{abstract protected function name();}}//3.再建立一个trait,并且在trait中实现以上接口和抽象类中的方法if (!trait_exists('user2')){trait user2{public function user(){return '我的名字是';}public function name(){return '程东旭';}}}//4.在建立一个实现类,并且use以上traitif (!class_exists('user3')){class user3{use user2;}}$user = new user3();echo $user->user() . $user->name();
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号