博客列表 >php中的trait与接口

php中的trait与接口

老陈
老陈原创
2020年04月30日 22:19:31838浏览

1、接口

1.1接口基本语法

  1. //接口中不可以定义属性,可以定义常量
  2. interface Aname
  3. {
  4. // 接口常量
  5. const USER_NAME = '中国';
  6. }
  7. //接口中定义的方法不能有方法体
  8. interface Afun
  9. {
  10. //接口方法
  11. public function fun();
  12. }
  13. //接口可以用extends继承一个或多个接口
  14. // 接口实现多继承
  15. interface Bname extends Aname, Afun
  16. {
  17. public function fun1();
  18. }
  19. //继承接口的类必须实现接口中定义的所有方法,并且类也可以实现多个接口
  20. class User implements Bname
  21. {//实现Aname接口中的 fun()方法
  22. public function fun(){
  23. }
  24. //实现Bname接口中的 fun1()方法
  25. public function fun1(){
  26. }
  27. }

1.2抽象类部分实现一个接口

  1. // 用抽象类来部分实现一个接口
  2. interface VipUser{
  3. //会员等级
  4. public function membership();
  5. //折扣
  6. public function discount();
  7. }
  8. // 用抽象类只实现会员等级这个方法
  9. abstract class User1 implements VipUser{
  10. protected $k='钻石卡';
  11. public function membership(){
  12. return $this->k;
  13. }
  14. }
  15. // 工作类: 实现折扣方法
  16. class User2 extends User1{
  17. protected $z='7折';
  18. public function discount(){
  19. return $this->z;
  20. }
  21. }
  22. $user = new User2();
  23. //通过调用抽象类中的membership()方法获得会员级别
  24. echo $user->membership();
  25. //根据会员级别打折
  26. echo $user->discount();

1.3接口实现多态

  1. //接口实现多态
  2. interface VipUser{
  3. //会员等级
  4. public function membership();
  5. //折扣
  6. public function discount();
  7. //商场名称
  8. public function marketName();
  9. }
  10. //通过商场名称,对顾客的会员等级进行打折
  11. class User1 implements VipUser
  12. {
  13. protected $name='京东商场';
  14. protected $k='钻石卡';
  15. protected $z='打7.5折';
  16. public function marketName(){
  17. return $this->name;
  18. }
  19. public function membership(){
  20. return $this->k;
  21. }
  22. public function discount(){
  23. return $this->z;
  24. }
  25. }
  26. class User2 implements VipUser{
  27. protected $name='天猫商场';
  28. protected $k='钻石卡';
  29. protected $z='打8折';
  30. public function marketName(){
  31. return $this->name;
  32. }
  33. public function membership(){
  34. return $this->k;
  35. }
  36. public function discount(){
  37. return $this->z;
  38. }
  39. }
  40. //通过方法参数,接受了接口实现类对象
  41. class User{
  42. public function name( VipUser $obj){
  43. return $obj->marketName();
  44. }
  45. public function vip( VipUser $obj){
  46. return $obj->membership();
  47. }
  48. public function zhekou( VipUser $obj){
  49. return $obj->discount();
  50. }
  51. }
  52. $user1 = new User1();
  53. $user =new User();
  54. echo $user->name($user1);
  55. echo $user->vip($user1);
  56. echo $user->zhekou($user1);
  57. echo '<hr>';
  58. $user2 = new User2();
  59. echo $user->name($user2);
  60. echo $user->vip($user2);
  61. echo $user->zhekou($user2);

2、Trait

  1. // triat是一个特殊类,与抽象类,接口一样不能实例化,只能嵌入到宿主类中使用。
  2. // 通过在类中使用use关键字,声明要组合的Trait名称,trait里面可以使用:静态成员,抽象成员,普通成员.不能使用常量。
  3. // Trait内的属性会和调用它的类内的同名的属性冲突,优先顺序:当前类成员 > trait类成员 > 基类成员
  4. // 一个类可以组合多个Trait,通过逗号相隔,trait不能在接口中使用。
  5. trait myTrait {
  6. public function demo() {
  7. echo 'triat是一个特殊类<br>';
  8. }
  9. }
  10. class Dad {
  11. use myTrait;
  12. public function demo1() {
  13. echo '我是一个父类<br>';
  14. }
  15. }
  16. class Body extends Dad {
  17. public function demo1() {
  18. echo '我是一个子类<br>';
  19. }
  20. }
  21. $body = new Body();
  22. $body->demo1();
  23. $body->demo1();
  24. $body->demo();

总结:一看就会,一做就废。勤加练习,深入理解。加油!!!

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议