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


Posted in PHP onMarch 29, 2016

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

区别:

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

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

<?php
abstract class Father {
  function meth1() {
    echo "meth1...<br>";
  }
  abstract function meth2();
  public $var1="var1";
  public static $var2="var2";
  const Var3="Var3";
}
class Son extends Father {
  function meth2() {
    echo "meth2 of Son...<br>";
  }
}
$s=new Son();
echo $s->var1."<br>";
echo Father::$var2."<br>";
echo Father::Var3."<br>";
Interface IFather {
  //public $iVar1="iVar1"; 此处接口定义中不能包含成员变量
  //public static $iVar2="iVar2"; 此处接口定义中不能包含静态变量
  const iVar3="iVar3";
  function iMeth1();
}
Class ISon implements IFather {
  function iMeth1() {
    echo "iMeth1...<br>";
  }
}
$is=new ISon();
echo IFather::iVar3;
?>

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

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

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

抽象类还是接口

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

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

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

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
一棵php的类树(支持无限分类)
Oct 09 PHP
如何利用php+mysql保存和输出文件
Oct 09 PHP
自动生成文章摘要的代码[PHP 版本]
Mar 20 PHP
php画图实例
Nov 05 PHP
分享下php5类中三种数据类型的区别
Jan 26 PHP
codeigniter中实现一次性加载多个view的方法
Mar 20 PHP
PHP学习笔记(一):基本语法之标记、空白、和注释
Apr 17 PHP
PHP计算日期相差天数实例分析
Feb 23 PHP
thinkPHP中验证码的简单实现方法
Dec 05 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
Nov 10 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
Mar 27 PHP
PHP实现rar解压读取扩展包小结
Jun 03 PHP
php实现图片缩略图的方法
Mar 29 #PHP
YII动态模型(动态表名)支持分析
Mar 29 #PHP
Yii操作数据库实现动态获取表名的方法
Mar 29 #PHP
Yii数据库缓存实例分析
Mar 29 #PHP
PHP+HTML+JavaScript+Css实现简单爬虫开发
Mar 28 #PHP
Yii框架上传图片用法总结
Mar 28 #PHP
Yii开启片段缓存的方法
Mar 28 #PHP
You might like
PHP 采集心得技巧
2009/05/15 PHP
php设计模式 Chain Of Responsibility (职责链模式)
2011/06/26 PHP
Codeigniter购物车类不能添加中文的解决方法
2014/11/29 PHP
Symfony的安装和配置方法
2016/03/17 PHP
Yii2实现同时搜索多个字段的方法
2016/08/10 PHP
判断客户端浏览器是否安装了Flash插件的多种方法
2010/08/11 Javascript
jQuery EasyUI API 中文文档 - Calendar日历使用
2011/10/19 Javascript
jquery $.each()使用探讨
2013/09/23 Javascript
javascript完美拖拽的实现方法
2013/09/29 Javascript
js函数返回多个返回值的示例代码
2013/11/05 Javascript
js身份证判断方法支持15位和18位
2014/03/18 Javascript
node.js中的fs.chmod方法使用说明
2014/12/18 Javascript
使用AngularJS实现可伸缩的页面切换的方法
2015/06/19 Javascript
JavaScript数组对象实现增加一个返回随机元素的方法
2015/07/27 Javascript
原生js轮播特效
2017/05/18 Javascript
深入浅析Vue.js中 computed和methods不同机制
2018/03/22 Javascript
elementUI select组件使用及注意事项详解
2019/05/29 Javascript
通过实例解析json与jsonp原理及使用方法
2020/09/27 Javascript
html+vue.js 实现漂亮分页功能可兼容IE
2020/11/07 Javascript
[02:16]2018年度CS GO最具人气选手-完美盛典
2018/12/16 DOTA
Python自动调用IE打开某个网站的方法
2015/06/03 Python
Python遍历目录并批量更换文件名和目录名的方法
2016/09/19 Python
详解Python中如何写控制台进度条的整理
2018/03/07 Python
wxPython实现窗口用图片做背景
2018/04/25 Python
利用django-suit模板添加自定义的菜单、页面及设置访问权限
2018/07/13 Python
tensorflow 中对数组元素的操作方法
2018/07/27 Python
python2 与 pyhton3的输入语句写法小结
2018/09/10 Python
python and or用法详解
2019/06/26 Python
Python 日志logging模块用法简单示例
2019/10/18 Python
Python AutoCAD 系统设置的实现方法
2020/04/01 Python
详解Python中第三方库Faker
2020/09/25 Python
Django实现随机图形验证码的示例
2020/10/15 Python
全球最大的跑步用品商店:Road Runner Sports
2016/09/11 全球购物
高中生自我评价个人范文
2013/11/09 职场文书
使用redis实现延迟通知功能(Redis过期键通知)
2021/09/04 Redis
Pygame Time时间控制的具体使用详解
2021/11/17 Python