Blogger Information
Blog 11
fans 0
comment 0
visits 7582
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
php中的trait与接口
老陈
Original
844 people have browsed it

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();

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

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:有一种会, 叫看上去会了, 这是第一步, 离了老师指导 写不出来, 是因为还没有接触到实际项目
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post