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-accelerator网站加速PHP缓冲的方法
Jul 30 PHP
php Hex RGB颜色值互换的使用
May 10 PHP
php将gd生成的图片缓存到memcache的小例子
Jun 05 PHP
ThinkPHP3.1新特性之内容解析输出详解
Jun 19 PHP
smarty模板引擎基础知识入门
Mar 30 PHP
php实现上传图片文件代码
Jul 19 PHP
Symfony2 session用法实例分析
Feb 04 PHP
PHP判断数组是否为空的常用方法(五种方法)
Feb 08 PHP
ThinkPHP实现生成和校验验证码功能
Apr 28 PHP
Laravel中Facade的加载过程与原理详解
Sep 22 PHP
php中curl和soap方式请求服务超时问题的解决
Jun 11 PHP
让你的PHP,APACHE,NGINX支持大文件上传
Mar 09 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
实现dedecms全站URL静态化改造的代码
2007/03/29 PHP
PHP图片验证码制作实现分享(全)
2012/05/10 PHP
在PHP中使用X-SendFile头让文件下载更快
2014/06/01 PHP
浅谈PHP中JSON数据操作
2015/07/01 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
2018/05/31 PHP
JavaScript Prototype对象
2009/01/07 Javascript
javascript 清除输入框中的数据
2009/04/13 Javascript
测试你的JS的掌握程度的代码
2009/12/09 Javascript
javascript学习笔记(三)BOM和DOM详解
2014/09/30 Javascript
JavaScript实现的一个倒计时的类
2015/03/12 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(二)
2016/02/16 Javascript
KnockoutJS 3.X API 第四章之数据控制流with绑定
2016/10/10 Javascript
AngularJS控制器controller给模型数据赋初始值的方法
2017/01/04 Javascript
详解AngularJS ng-class样式切换
2017/06/27 Javascript
vue 页面加载进度条组件实例
2018/02/05 Javascript
JavaScript如何对图片进行黑白化
2018/04/10 Javascript
JS面试题大坑之隐式类型转换实例代码
2018/10/14 Javascript
JavaScript实现数字前补“0”的五种方法示例
2019/01/03 Javascript
JS数组求和的常用方法总结【5种方法】
2019/01/14 Javascript
一文搞懂ES6中的Map和Set
2019/05/20 Javascript
webpack HappyPack实战详解
2019/10/08 Javascript
[00:35]可解锁地面特效
2018/12/20 DOTA
使用go和python递归删除.ds store文件的方法
2014/01/22 Python
python调用java模块SmartXLS和jpype修改excel文件的方法
2015/04/28 Python
Python类定义和类继承详解
2015/05/08 Python
python中循环语句while用法实例
2015/05/16 Python
Python实现代码统计工具(终极篇)
2016/07/04 Python
Python语言描述KNN算法与Kd树
2017/12/13 Python
Keras Convolution1D与Convolution2D区别说明
2020/05/22 Python
Python tkinter之ComboBox(下拉框)的使用简介
2021/02/05 Python
main 函数执行以前,还会执行什么代码
2013/04/17 面试题
敬老模范事迹
2014/05/21 职场文书
2014年图书室工作总结
2014/12/09 职场文书
2019学生会干事辞职信
2019/06/27 职场文书
导游词之西湖雷峰塔
2019/09/18 职场文书
Vue实现导入Excel功能步骤详解
2021/07/03 Vue.js