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 相关文章推荐
杏林同学录(三)
Oct 09 PHP
PHP var_dump遍历对象属性的函数与应用代码
Jun 04 PHP
PHP判断远程图片是否存在的几种方法
May 04 PHP
PHP类中的魔术方法(Magic Method)简明总结
Jul 08 PHP
字符串长度函数strlen和mb_strlen的区别示例介绍
Sep 09 PHP
php使用指定字符列表生成随机字符串的方法
Apr 18 PHP
PHP代码优化技巧小结
Sep 29 PHP
php实现文章置顶功能的方法
Oct 20 PHP
Laravel框架模板继承操作示例
Jun 11 PHP
PHP设计模式之观察者模式定义与用法分析
Apr 04 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
Oct 10 PHP
PHP数组array类常见操作示例
May 15 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
phpMyAdmin链接MySql错误 个人解决方案
2009/12/28 PHP
微信公众平台开发关注及取消关注事件的方法
2014/12/23 PHP
Laravel使用swoole实现websocket主动消息推送的方法介绍
2019/10/20 PHP
js 函数的副作用分析
2011/08/23 Javascript
JQuery slideshow的一个小问题(如何发现及解决过程)
2013/02/06 Javascript
深入探讨JavaScript、JQuery屏蔽网页鼠标右键菜单及禁止选择复制
2014/06/10 Javascript
jQuery中dequeue()方法用法实例
2014/12/29 Javascript
jQuery插件HighCharts实现的2D条状图效果示例【附demo源码下载】
2017/03/15 Javascript
es6学习笔记之Async函数的使用示例
2017/05/11 Javascript
基于Vue的ajax公共方法(详解)
2018/01/20 Javascript
React 无状态组件(Stateless Component) 与高阶组件
2018/08/14 Javascript
Vue项目打包编译优化方案
2020/09/16 Javascript
[09:23]国际邀请赛采访专栏:iG战队VK,Tongfu战队Cu
2013/08/05 DOTA
[38:39]完美世界DOTA2联赛循环赛 IO vs GXR BO2第二场 11.04
2020/11/05 DOTA
[03:11]不朽宝藏三外观展示
2020/09/18 DOTA
Python实现给qq邮箱发送邮件的方法
2015/05/28 Python
用python实现对比两张图片的不同
2018/02/05 Python
如何利用python查找电脑文件
2018/04/27 Python
使用python 3实现发送邮件功能
2018/06/15 Python
python之django母板页面的使用
2018/07/03 Python
详解Python sys.argv使用方法
2019/05/10 Python
Python正则表达式匹配日期与时间的方法
2019/07/07 Python
Django自定义模板过滤器和标签的实现方法
2019/08/21 Python
html5实现九宫格抽奖可固定抽中某项奖品
2020/06/15 HTML / CSS
美国波西米亚风格服装品牌:Show Me Your Mumu
2018/01/05 全球购物
物业管理公司实习生自我鉴定
2013/09/19 职场文书
会计主管岗位职责范文
2013/11/08 职场文书
中国央视网签名寄语
2014/01/18 职场文书
生日寄语大全
2014/04/08 职场文书
公司担保书格式范文
2014/05/12 职场文书
个人委托书范本
2014/09/13 职场文书
2015年幼儿教育工作总结
2015/07/24 职场文书
高中生物教学反思
2016/02/20 职场文书
pycharm无法导入lxml的解决办法
2021/03/31 Python
使用CSS3实现按钮悬停闪烁动态特效代码
2021/08/30 HTML / CSS
青岛市的收音机研制与生产
2022/04/07 无线电