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版(4)
Oct 09 PHP
基于xcache的配置与使用详解
Jun 18 PHP
访问编码后的中文URL返回404错误的解决方法
Aug 20 PHP
PHP中的替代语法介绍
Jan 09 PHP
php图像处理类实例
Jul 28 PHP
PHP实现递归复制整个文件夹的类实例
Aug 03 PHP
php 无限级分类 获取顶级分类ID
Mar 13 PHP
php实现xml与json之间的相互转换功能实例
Jul 07 PHP
PHP二进制与字符串之间的相互转换教程
Oct 14 PHP
PHP中类的自动加载的方法
Mar 17 PHP
ThinkPHP中create()方法自动验证实例
Apr 26 PHP
php格式文件打开的四种方法
Feb 24 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
用Socket发送电子邮件
2006/10/09 PHP
php实现文件编码批量转换
2014/03/10 PHP
php ci框架中加载css和js文件失败的原因及解决方法
2014/07/29 PHP
必须收藏的php实用代码片段
2016/02/02 PHP
PHP 二维array转换json的实例讲解
2018/08/21 PHP
微信公众平台开发教程②微信端分享功能图文详解
2019/04/10 PHP
js刷新框架子页面的七种方法代码
2008/11/20 Javascript
Jquery Ajax请求代码(2)
2011/01/07 Javascript
用js实现控件的隐藏及style.visibility的使用
2013/06/14 Javascript
用Js实现的动态增加表格示例自己写的
2013/10/21 Javascript
JS通过分析userAgent属性来判断浏览器的类型及版本
2014/03/28 Javascript
解释&amp;&amp;和||在javascript中的另类用法
2014/07/28 Javascript
js脚本实现数据去重
2014/11/27 Javascript
简介AngularJS中使用factory和service的方法
2015/06/17 Javascript
JavaScript中的Reflect对象详解(ES6新特性)
2016/07/22 Javascript
整理关于Bootstrap表单的慕课笔记
2017/03/29 Javascript
微信小程序开发中的疑问解答汇总
2017/07/03 Javascript
Vue.js中的图片引用路径的方式
2017/07/28 Javascript
js canvas实现简单的图像扩散效果
2020/06/28 Javascript
JavaScript 复制对象与Object.assign方法无法实现深复制
2018/11/02 Javascript
利用d3.js力导布局绘制资源拓扑图实例教程
2019/01/08 Javascript
[06:45]DOTA2-DPC中国联赛 正赛 Magma vs LBZS 选手采访
2021/03/11 DOTA
python文件操作整理汇总
2014/10/21 Python
Python中使用hashlib模块处理算法的教程
2015/04/28 Python
Python2与python3中 for 循环语句基础与实例分析
2017/11/20 Python
python 平衡二叉树实现代码示例
2018/07/07 Python
Python 获取div标签中的文字实例
2018/12/20 Python
详解python中各种文件打开模式
2020/01/19 Python
日本整理专家Marie Kondo的官方在线商店:KonMari
2020/06/29 全球购物
Python面试题:如何用Python来发送邮件
2016/03/15 面试题
元旦联欢会感言
2014/03/04 职场文书
辞职书格式样本
2015/02/26 职场文书
2019银行竞聘书
2019/06/21 职场文书
Python数据分析之绘图和可视化详解
2021/06/02 Python
Python中seaborn库之countplot的数据可视化使用
2021/06/11 Python
Java基于Dijkstra算法实现校园导游程序
2022/03/17 Java/Android