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+javascript的日历控件
Nov 19 PHP
php使用ob_start()实现图片存入变量的方法
Nov 14 PHP
PHP中SESSION的注销与清除
Apr 16 PHP
PHP中如何防止外部恶意提交调用ajax接口
Apr 11 PHP
PHP创建/删除/复制文件夹、文件
May 03 PHP
PHP获取客户端及服务器端IP的封装类
Jul 21 PHP
中高级PHP程序员应该掌握哪些技术?
Sep 23 PHP
php利用嵌套数组拼接与解析json的方法
Feb 07 PHP
php实现购物车产品删除功能(2)
Jul 23 PHP
PHP网页安全认证的实例详解
Sep 28 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
Jun 13 PHP
php无限极分类实现方法分析
Jul 04 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
ubuntu 编译安装php 5.3.3+memcache的方法
2010/08/05 PHP
写php分页时出现的Fatal error的解决方法
2011/04/18 PHP
基于empty函数的判断详解
2013/06/17 PHP
php实现通用的从数据库表读取数据到数组的函数实例
2015/03/21 PHP
CodeIgniter基于Email类发邮件的方法
2016/03/29 PHP
获取当前网页document.url location.href区别总结
2008/05/10 Javascript
W3C Group的JavaScript1.8 新特性介绍
2009/05/19 Javascript
深入理解javaScript中的事件驱动
2013/05/21 Javascript
jquery实现显示已选用户
2014/07/21 Javascript
tuzhu_req.js 实现仿百度图片首页效果
2015/08/11 Javascript
完美实现八种js焦点轮播图(下篇)
2020/04/20 Javascript
详解jquery easyui之datagrid使用参考
2016/12/05 Javascript
Angularjs通过指令监听ng-repeat渲染完成后执行脚本的方法
2016/12/31 Javascript
jQuery插件echarts实现的多柱子柱状图效果示例【附demo源码下载】
2017/03/04 Javascript
AngularJS service之select下拉菜单效果
2017/07/28 Javascript
js和jQuery以及easyui实现对下拉框的指定赋值方法
2018/01/23 jQuery
vue.js中npm安装教程图解
2018/04/10 Javascript
JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析
2018/07/26 Javascript
如何优雅地在Node应用中进行错误异常处理
2019/11/25 Javascript
JavaScript实现前端倒计时效果
2021/02/09 Javascript
Python使用urllib2模块实现断点续传下载的方法
2015/06/17 Python
Python中的条件判断语句基础学习教程
2016/02/07 Python
linux安装Python3.4.2的操作方法
2018/09/28 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
2018/12/20 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
2020/06/08 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
2020/07/09 Python
WoolOvers爱尔兰:羊绒、羊毛和棉针织品
2017/01/04 全球购物
英国最大的在线床超市:Bed Star
2019/01/24 全球购物
大学在校生求职信范文
2013/11/21 职场文书
建筑经济管理专业求职信分享
2014/01/06 职场文书
维修工先进事迹
2014/05/29 职场文书
新教师培训心得体会
2014/09/02 职场文书
公司副总经理岗位职责
2014/10/01 职场文书
党的群众路线对照检查材料思想汇报(学校)
2014/10/04 职场文书
小学总务工作总结
2015/08/13 职场文书
Java异常体系非正常停止和分类
2022/06/14 Java/Android