首页 > 开发 > PHP > 正文

PHP中抽象类、接口的区别与选择分析

2024-05-04 22:01:40
字体:大 中 小
来源:转载
供稿:网友

本文实例分析了PHP中抽象类、接口的区别与选择。分享给大家供大家参考,具体如下:

区别:

1、对接口的使用是通过关键字implements。对抽象类的使用是通过关键字extends。当然接口也可以通过关键字extends继承。

2、接口中不可以声明成员变量(包括类静态变量),但是可以声明类常量。抽象类中可以声明各种类型成员变量,实现数据的封装。(另JAVA接口中的成员变量都要声明为public static final类型)

  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.  
  57.   } 
  58. //Vevb.com 
  59. } 
  60.  
  61. $is=new ISon(); 
  62.  
  63. echo IFather::iVar3; 
  64.  
  65. ?> 

3、接口没有构造函数,抽象类可以有构造函数。

4、接口中的方法默认都是public类型的,而抽象类中的方法可以使用private,protected,public来修饰。

5、一个类可以同时实现多个接口,但一个类只能继承于一个抽象类。

抽象类还是接口

1. 如果要创建一个模型,这个模型将由一些紧密相关的对象采用,就可以使用抽象类。如果要创建将由一些不相关对象采用的功能,就使用接口。

2. 如果必须从多个来源继承行为,就使用接口。

3. 如果知道所有类都会共享一个公共的行为实现,就使用抽象类,并在其中实现该行为。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表