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
我的论坛源代码(九)
Oct 09 PHP
PHP小技巧搜集,每个PHPer都来露一手
Jan 02 PHP
PHP写入WRITE编码为UTF8的文件的实现代码
Jul 07 PHP
Php 构造函数construct的前下划线是双的_
Dec 08 PHP
php中Y2K38的漏洞解决方法实例分析
Sep 22 PHP
php实现简单文件下载的方法
Jan 30 PHP
PHP获取photoshop写入图片文字信息的方法
Mar 31 PHP
PHP开发中AJAX技术的简单应用
Dec 11 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
Laravel路由研究之domain解决多域名问题的方法示例
Apr 04 PHP
Thinkphp 框架扩展之数据库驱动常用方法小结
Apr 23 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简单浏览目录内容的实现代码
2013/06/07 PHP
PHP基于yii框架实现生成ICO图标
2015/11/13 PHP
ZF框架实现发送邮件的方法
2015/12/03 PHP
PHP 断点续传实例详解
2017/11/11 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
addRule在firefox下的兼容写法
2006/11/30 Javascript
使用正则替换变量
2007/05/05 Javascript
IE下js调试工具Companion.JS
2010/10/15 Javascript
HTML5之lang属性与dir属性的详解
2013/06/19 Javascript
Ajax局部更新导致JS事件重复触发问题的解决方法
2014/10/14 Javascript
AngularJS中取消对HTML片段转义的方法例子
2015/01/04 Javascript
AngularJS基础 ng-open 指令简单实例
2016/08/02 Javascript
基于WebUploader的文件上传js插件
2016/08/19 Javascript
基于Bootstrap table组件实现多层表头的实例代码
2017/09/07 Javascript
javascript按钮禁用和启用的效果实例代码
2017/10/29 Javascript
微信小程序前端自定义分享的实现方法
2019/06/13 Javascript
简述ES6新增关键字let与var的区别
2019/08/23 Javascript
手写Vue弹窗Modal的实现代码
2019/09/11 Javascript
Vue基于localStorage存储信息代码实例
2020/11/16 Javascript
在Windows系统上搭建Nginx+Python+MySQL环境的教程
2015/12/25 Python
基于python(urlparse)模板的使用方法总结
2017/10/13 Python
Python 3.7新功能之dataclass装饰器详解
2018/04/21 Python
django 邮件发送模块smtp使用详解
2019/07/22 Python
详解Python3 pandas.merge用法
2019/09/05 Python
Python实现微信表情包炸群功能
2021/01/28 Python
Python爬虫爬取ts碎片视频+验证码登录功能
2021/02/22 Python
英国厨房与餐具用品为主的设计品牌:Joseph Joseph
2018/04/26 全球购物
Crucial英睿达法国官网:内存条及SSD固态硬盘升级
2018/07/13 全球购物
实现向右循环移位
2014/07/31 面试题
护理工作感言
2014/01/16 职场文书
银行行长竞聘演讲稿
2014/04/23 职场文书
教师批评与自我批评总结
2014/10/16 职场文书
2015大学迎新晚会主持词
2015/07/16 职场文书
2019XX公司员工考核管理制度!
2019/08/07 职场文书
如何将JavaScript将数组转为树形结构
2021/06/02 Javascript
Python基于百度API识别并提取图片中文字
2021/06/27 Python