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 相关文章推荐
Extended CHM PHP 语法手册之 DIY
Oct 09 PHP
一个简单的自动发送邮件系统(三)
Oct 09 PHP
php获取后台Job管理的实现代码
Jun 10 PHP
测试PHP连接MYSQL成功与否的代码
Aug 16 PHP
PHP生成sitemap.xml地图函数
Nov 13 PHP
Smarty模板学习笔记之Smarty简介
May 20 PHP
php伪静态之APACHE篇
Jun 02 PHP
php中http与https跨域共享session的解决方法
Dec 20 PHP
从wamp到xampp的升级之路
Apr 08 PHP
php中ob函数缓冲机制深入理解
Aug 03 PHP
Symfony核心类概述
Mar 17 PHP
thinkPHP模板算术运算相关函数用法分析
Jul 12 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的开合式多级菜单程序
2006/10/09 PHP
PHP个人网站架设连环讲(四)
2006/10/09 PHP
PHP下几种删除目录的方法总结
2007/08/19 PHP
JS小功能(onmouseover实现选择月份)实例代码
2013/11/28 Javascript
ie9 提示'console' 未定义问题的解决方法
2014/03/20 Javascript
JavaScript实现点击单选按钮改变输入框中文本域内容的方法
2015/08/12 Javascript
JavaScript实现的背景自动变色代码
2015/10/17 Javascript
深入浅析JS Function()构造函数
2016/08/22 Javascript
jQuery的 $.ajax防止重复提交的两种方法(推荐)
2016/10/14 Javascript
vue组件(全局,局部,动态加载组件)
2018/09/02 Javascript
Vue项目中ESlint规范示例代码
2019/07/04 Javascript
js代码实现轮播图
2020/05/04 Javascript
vue-quill-editor 自定义工具栏和自定义图片上传路径操作
2020/08/03 Javascript
python创建线程示例
2014/05/06 Python
python3 pillow生成简单验证码图片的示例
2017/09/19 Python
tensorflow实现简单的卷积神经网络
2018/05/24 Python
Python 从列表中取值和取索引的方法
2018/12/25 Python
Python 微信之获取好友昵称并制作wordcloud的实例
2019/02/21 Python
python BlockingScheduler定时任务及其他方式的实现
2019/09/19 Python
Django中的DateTimeField和DateField实现
2021/02/24 Python
html5指南-1.html5全局属性(html5 global attributes)深入理解
2013/01/07 HTML / CSS
html5中canvas图表实现柱状图的示例
2017/11/13 HTML / CSS
简单的辞职信范文
2014/01/18 职场文书
法学个人求职信范文
2014/01/27 职场文书
超市重阳节活动方案
2014/02/10 职场文书
转让协议书范本
2014/04/15 职场文书
房地产推广策划方案
2014/05/19 职场文书
党员目标管理责任书
2014/07/25 职场文书
总经理岗位职责说明书
2014/07/30 职场文书
玩手机检讨书1000字
2014/10/20 职场文书
竞聘报告优秀范文
2014/11/06 职场文书
演讲稿之开卷有益
2019/08/07 职场文书
python使用matplotlib绘制图片时x轴的刻度处理
2021/08/30 Python
我收到了德劲DE1107
2022/04/05 无线电
kubernetes集群搭建Zabbix监控平台的详细过程
2022/07/07 Servers
CSS 鼠标点击拖拽效果的实现代码
2022/12/24 HTML / CSS