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四种基本排序算法示例
Apr 09 PHP
PHP SOCKET编程详解
May 22 PHP
php简单实现发送带附件的邮件
Jun 10 PHP
利用php输出不同的心形图案
Apr 22 PHP
PHP获取不了React Native Fecth参数的解决办法
Aug 26 PHP
php利用gd库为图片添加水印
Nov 09 PHP
php实现网页端验证码功能
Jul 11 PHP
PHP编程快速实现数组去重的方法详解
Jul 22 PHP
PHP魔术方法之__call与__callStatic使用方法
Jul 23 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
Dec 18 PHP
PHP程序员简单的开展服务治理架构操作详解(一)
May 14 PHP
PHP获取当前时间不准确问题解决方案
Aug 14 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 随机数的产生、页面跳转、件读写、文件重命名、switch语句
2009/08/07 PHP
PHP管理依赖(dependency)关系工具 Composer的自动加载(autoload)
2014/08/18 PHP
php一个解析字符串排列数组的方法
2015/05/12 PHP
PHP实现二维数组按某列进行排序的方法
2016/11/18 PHP
laravel 根据不同组织加载不同视图的实现
2019/10/14 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
Javascript 获取链接(url)参数的方法
2009/02/15 Javascript
Kibo 用于处理键盘事件的Javascript工具库
2011/10/28 Javascript
JS检测输入字符是否包含非法字符的示例代码
2014/02/11 Javascript
jQuery选择器源码解读(六):Sizzle选择器匹配逻辑分析
2015/03/31 Javascript
跟我学习javascript的var预解析与函数声明提升
2015/11/16 Javascript
Jquery Easyui验证组件ValidateBox使用详解(20)
2016/12/18 Javascript
jQuery html表格排序插件tablesorter使用方法详解
2017/02/10 Javascript
基于JS实现仿百度百家主页的轮播图效果
2017/03/06 Javascript
Node.js如何响应Ajax的POST请求并且保存为JSON文件详解
2017/03/10 Javascript
vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)
2018/01/16 Javascript
微信小程序8种数据通信的方式小结
2020/02/03 Javascript
js实现磁性吸附的示例
2020/10/26 Javascript
python通过cookie模拟已登录状态的初步研究
2016/11/09 Python
基于python OpenCV实现动态人脸检测
2018/05/25 Python
python 获取键盘输入,同时有超时的功能示例
2018/11/13 Python
Python实现的简单线性回归算法实例分析
2018/12/26 Python
python实现nao机器人手臂动作控制
2019/04/29 Python
Django实现跨域的2种方法
2019/07/31 Python
基于Django实现日志记录报错信息
2019/12/17 Python
TensorFlow MNIST手写数据集的实现方法
2020/02/05 Python
如何通过python实现IOU计算代码实例
2020/11/02 Python
The Kooples美国官方网站:为情侣提供的法国当代时尚品牌
2019/01/03 全球购物
夜大自我鉴定
2013/10/31 职场文书
努力学习演讲稿
2014/05/10 职场文书
关于保护环境的标语
2014/06/09 职场文书
圣诞节活动策划方案
2014/06/09 职场文书
2015年度学校卫生工作总结
2015/05/12 职场文书
2015秋季小学开学寄语
2015/05/27 职场文书
小鞋子观后感
2015/06/05 职场文书
python使用shell脚本创建kafka连接器
2022/04/29 Python