Blogger Information
Blog 36
fans 1
comment 0
visits 29752
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP接口与trait
Jason
Original
654 people have browsed it

php接口与trait的使用

简单的继承,只能实现单继承,如果想要多继承的话,就必须使用interface(接口),通过多个接口的继承,来达到目的,通过这个案例来了解一下。

接口技术

接口技术主要用来实现,三大特性中的多态,那多态是什么呢?
多态最直接的定义就是让具有继承关系的不同类对象,可以对相同名称的成员函数调用,产生不同的反应结果

  • 接口的声明只需要在类名前面加上interface;
  • 接口里面的方法全部都是抽象方法,且方法必须为public;
  • 类可以实现多个接口(也就是实现多继承);
  • 接口也可以继承

实例:

  1. // 这里一个接口,里面有三个抽线方法,接口可以理解为一种抽象类,因为里面的类默认就是抽象的,变量也是抽象的
  2. interface iShopping
  3. {
  4. const money = '5000';
  5. public function buyPhone($type);
  6. public function buyComputer($type);
  7. }
  8. interface iGoshopping
  9. {
  10. const distance = '50';
  11. public function goWalk($time);
  12. public function goTaix($money);
  13. }
  14. // 实现类
  15. class User implements iShopping,iGoshopping
  16. // 可以看到User继承了两个类,就间接的实现了多继承,
  17. // 但注意必须将接口的方法全部实现,少一个都不行
  18. {
  19. public function goWalk($time)
  20. {
  21. if($time > 2):
  22. echo '走不过去'.'<br>';
  23. else:
  24. echo '能走过去'.'<br>';
  25. endif;
  26. }
  27. public function goTaix($money)
  28. {
  29. if($money > 50):
  30. echo '太贵了,打不起车'.'<br>';
  31. else:
  32. echo '可以打车'.'<br>';
  33. endif;
  34. }
  35. public function buyPhone($type)
  36. {
  37. echo '可以买'. $type.'<br>';
  38. }
  39. public function buyComputer($type)
  40. {
  41. echo '可以买的电脑'.$type.'<br>';
  42. }
  43. }
  44. $user = new User;
  45. $user -> goWalk(5);
  46. $user -> goTaix(20);
  47. $user -> buyComputer('华为');
  48. $user -> buyPhone('小米');

输出:

  1. 走不过去
  2. 可以打车
  3. 可以买的电脑华为
  4. 可以买小米

trait的使用

1.php中trait是什么?

看上去有点像类又像接口,既有类的常规属性,又有抽象的方法,其实都不是,trait可以看作是类的部分是按,可以引用到现有的多个PHP类中,起作用只有两个:表明类可以做什么;提供模块化实现。Trait是一种代码复用技术,为PHP的单继承限制提供一套灵活的代码复用机制。

2.trait的使用场景:

当有一个方法需要在很多的类中使用时,该怎么处理?
通常一般的处理方式是,写一个基础类,在基类中实现这个方法,然后所有类都继承这个基类。
这是一种处理方法,单不是最好的处理方式。通常采用继承的情况是:几个类具有很大的相似性。比如人作为一个基类,学生、工人、等继承‘人’ 这个基类来扩展。

由此,trait的作用就出来了,trait可以在多个类中使用

4.trait的使用

示例:

  1. // trait实例
  2. // trait的代码复用,与优先级
  3. trait iFruit
  4. {
  5. // 常规属性
  6. protected $fruit = 'banana';
  7. public function getFruit()
  8. {
  9. return '名称'.$this->fruit.'<br>';
  10. }
  11. // 静态
  12. public static $weight = '1.9';
  13. public static function getWeith()
  14. {
  15. return '重量'.self::$weight.'<br>';
  16. }
  17. // 抽象
  18. // 抽象静态属性
  19. public static $source;
  20. // 抽象静态方法
  21. abstract public static function getSource();
  22. }
  23. class Dad
  24. {
  25. public static function getWeith()
  26. {
  27. return '父类中的方法'.__METHOD__.'<br>';
  28. }
  29. }
  30. class Banana extends Dad
  31. {
  32. // 可以看到子类继承了父类,但是trait中的同名方法将父类中同名方法重写了
  33. // 继承关系:子类 > trait > 父类
  34. // trait的功能之一,代码复用
  35. use iFruit;
  36. public static function getSource()
  37. {
  38. return '产地'.self::$source;
  39. }
  40. public function print()
  41. {
  42. echo $this->getFruit(). self::getWeith() .self::getSource();
  43. }
  44. }
  45. banana::$source = '泰国';
  46. $banana = new Banana();
  47. $banana -> print();

输出:

  1. 名称banana
  2. 重量1.9
  3. 产地泰国

总结

接口可以实现多继承,也实现面向对象中的多态,就是对相同名称的函数的调用,而产生不同结果,trait提供了代码复用技术,在一些需要重复使用的方法或属性,我们就可以用trait把他们做好,在子类中引用就行,总的来说面向对象编程主要就围绕着两方面在讲,三个特性,封装,继承,多态,设计与实现,所有的技术都可以总结到这个上面,这可能就是代码的艺术,不仅仅是代码,让代码变得更加灵活多变。

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:不要被接口, trait,抽象类等吓住, 其实都是类, 只不过比较特殊而已, 就像是一个国家的少数民族, 本质仍是国家成员一部分
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