当前位置:Gxlcms > PHP教程 > php中接口与抽象类区别及如何定义和继承接口实例代码详解

php中接口与抽象类区别及如何定义和继承接口实例代码详解

时间:2021-07-01 10:21:17 帮助过:12人阅读

抽象类和接口的区别

接口是特殊的抽象类,也可以看做是一个模型的规范。接口与抽象类大致区别如下:

一个子类如果 implements 一个接口,就必须实现接口中的所有方法(不管是否需要);如果是继承一个抽象类,只需要实现需要的方法即可。

如果一个接口中定义的方法名改变了,那么所有实现此接口的子类需要同步更新方法名;而抽象类中如果方法名改变了,其子类对应的方法名将不受影响,只是变成了一个新的方法而已(相对老的方法实现)。

抽象类只能单继承,当一个子类需要实现的功能需要继承自多个父类时,就必须使用接口。

代码示例:

  1. <?php
  2. //简单定义实现接口
  3. interface UserInterface{ //定义user接口
  4. function getname();
  5. }
  6. interface TeacherInterface{ //定义teacher接口
  7. function getLengthofService();
  8. }
  9. class User implements UserInterface{ //实现user接口
  10. private $name="nostop";
  11. public function getName(){
  12. return $this->name;
  13. }
  14. }
  15. class Teacher implements TeacherInterface{ //实现teacher接口
  16. private $age=23;
  17. public function getLengthofService(){
  18. return $this->age;
  19. }
  20. }
  21. $user=new User();
  22. echo $user->getName().'<br />';//nostop
  23. $teacher=new Teacher();
  24. echo $teacher->getLengthofService().'<br />';//23
  25. //继承类实现接口
  26. class GraduResultudent extends User implements TeacherInterface{ //继承User类 实现接口
  27. private $teacher;
  28. public function construct(){ //定义构造函数
  29. $this->teacher=new Teacher(); //实例化Teacher对象
  30. }
  31. public function getLengthOfService(){ //实现TeacherInterface接口的方法
  32. return $this->teacher->getLengthOfService();
  33. }
  34. }
  35. class Result{
  36. public static function getUserName(UserInterface $_user){ //注意:这里面的类型变成接口类型
  37. echo "Name is ".$_user->getName().'<br />';
  38. }
  39. public static function getLengthOfService(TeacherInterface $_teacher){ //注意:这里面的类型变成接口类型
  40. echo "age is ".$_teacher->getLengthOfService();
  41. }
  42. }
  43. $object=new GraduResultudent();
  44. Result::getUserName($object); //Name is nostop
  45. Result::getLengthOfService($object); //age is 23
  46. echo "<br />";
  47. //接口实现用户的折扣
  48. interface People{ //定义接口
  49. function getUserType();
  50. function getCount();
  51. }
  52. class VipUser implements People{ //实现接口
  53. //用户折卡系数
  54. private $discount=0.8;
  55. function getUserType(){
  56. return "VIP用户";
  57. }
  58. function getCount(){
  59. return $this->discount;
  60. }
  61. }
  62. $vip=new VipUser(); //实现化对象
  63. echo $vip->getUserType().'商品价格:'.$vip->getCount()*100; //VIP用户商品价格:80
  64. class Goods{
  65. var $price=100;
  66. var $member;
  67. function run(People $member){ //注意:这里面的参数类型是接口类型
  68. $this->member=$member;
  69. $discount=$this->member->getCount();
  70. $usertype=$this->member->getUserType();
  71. echo $usertype."商品价格:".$this->price*$discount;
  72. }
  73. }
  74. $display=new Goods();
  75. $display->run(new VipUser);//VIP用户商品价格:80
  76. ?>

以上就是php中接口与抽象类区别及如何定义和继承接口实例代码详解的详细内容,更多请关注Gxl网其它相关文章!

人气教程排行