A-A+

浅谈PHP中抽象类,接口的区别

2019年11月04日 PHP技术文章 评论 2 条 阅读 0 views 次

PHP的类和接口基本属于PHP面向对象的范畴了,PHP抽象类和接口概念上比较模糊,在TP系统中,PHP抽象类和接口没有本质的区别,而在原生的PHP中,如果我们要写接口的话是使用关键字 implements,而抽象类我们需要使用extends关键词来进行继承,当然extends关键词同样适用于PHP接口,如果我使用的是TP系统的话,则可以忽略接口的 implements 关键词,把接口直接写在控制器,然后公共文件使用 extends 来进行继承。

第一点的区别就是PHP接口使用的是 implements 关键词,抽象类使用的是 extends关键词,相同点是两者都可以使用extends关键词。

第二点的区别就是在接口不能声明成员变量和静态变量,但是又可以声明类的常量,而在抽象类当中,任何类型都是可以进行声明的,以便于实现数据的封装。

这一点的区别主要体现在原生的PHP中,而在TP系统中,接口里面是完全可以声明成员变量和静态变量,主要是写在控制C层里面,可以自行进行测试。

第三点的区别就是在接口中我们使用的是 public 公开类型,而抽象中使用的则是 private,protected,public 三种类型。

这一点的区别也是在原生的PHP中,在 TP 中,完全是相同的,接口和抽象类都是可以使用 private,protected,public 三种类型的。

第四点的区别一个类同时可以实现多个接口,但是一个类只能继承一个抽象类,这一点没什么好说的,很好理解,在抽象类里面我们可以任意的定义接口,但是这个抽象类只能继承一个其它类,比如公共类。

理解了PHP中的抽象类和接口的概念之后,再次运用起来就简单多了,PHP接口里面可以有多个不相干的对象组成,也就是多个不同的公共方法,而在公共方法中,我们可以调用抽象类,抽象类通常是写在模式里面,这里面主要是紧密相关的对象组成,以便于接口进行调用,如果有公共的函数或者方法,通常我们也都写在抽象类里面。

自己关于对PHP中抽象类以及接口的一些理解,PHP中面向对象的知识还有许多,一直在使用 TP 系统,对于原生的 PHP 面向对象和些陌生了,今天再来温飞一下,下面分享一个简单的关于接口,抽象类区别的小实例:

  1. <?php  
  2.   
  3. abstract class Father {  
  4.   
  5.   function meth1() {  
  6.   
  7.     echo "meth1...<br>";  
  8.   
  9.   }  
  10.   
  11.   abstract function meth2();  
  12.   
  13.   public $var1="var1";  
  14.   
  15.   public static $var2="var2";  
  16.   
  17.   const Var3="Var3";  
  18.   
  19. }  
  20.   
  21. class Son extends Father {  
  22.   
  23.   function meth2() {  
  24.   
  25.     echo "meth2 of Son...<br>";  
  26.   
  27.   }  
  28.   
  29. }  
  30.   
  31. $s=new Son();  
  32.   
  33. echo $s->var1."<br>";  
  34.   
  35. echo Father::$var2."<br>";  
  36.   
  37. echo Father::Var3."<br>";  
  38.   
  39. Interface IFather {  
  40.   
  41.   //public $iVar1="iVar1"; 此处接口定义中不能包含成员变量  
  42.   
  43.   //public static $iVar2="iVar2"; 此处接口定义中不能包含静态变量  
  44.   
  45.   const iVar3="iVar3";  
  46.   
  47.   function iMeth1();  
  48.   
  49. }  
  50.   
  51. Class ISon implements IFather {  
  52.   
  53.   function iMeth1() {  
  54.   
  55.     echo "iMeth1...<br>";  
  56. //www.xiariboke.net  
  57.   }  
  58.   
  59. }  
  60.   
  61. $is=new ISon();  
  62.   
  63. echo IFather::iVar3;  
  64.   
  65. ?>  
标签:

2 条留言  访客:2 条  博主:0 条

  1. 自考心得

    牛牛牛!跟着博主能学习到好多东西!

  2. 姜辰

    大佬啊!

给我留言