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 杂谈《重构-改善既有代码的设计》之五 简化函数调用
May 07 PHP
PHP循环结构实例讲解
Feb 10 PHP
php对称加密算法示例
May 07 PHP
浅谈Eclipse PDT调试PHP程序
Jun 09 PHP
Yii框架中memcache用法实例
Dec 03 PHP
php中ob_flush函数和flush函数用法分析
Mar 18 PHP
用PHP生成excel文件到指定目录
Jun 22 PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
Apr 12 PHP
Yii使用DeleteAll连表删除出现报错问题的解决方法
Jul 14 PHP
PHP类的特性实例分析
Sep 28 PHP
PHP判断数组是否为空的常用方法(五种方法)
Feb 08 PHP
thinkPHP5框架实现基于ajax的分页功能示例
Jun 12 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版阿里云OSS图片上传类详解
2016/12/01 PHP
PHP 中常量的知识整理
2017/04/14 PHP
一个加密JavaScript的开源工具PACKER2.0.2
2006/11/04 Javascript
JavaScript 撑出页面文字换行
2009/06/15 Javascript
IE6/7/8中Option元素未设value时Select将获取空字符串
2011/04/07 Javascript
jquery插件制作 手风琴Panel效果实现
2012/08/17 Javascript
js实现简单的星级选择器提交效果适用于评论等
2013/10/18 Javascript
XMLHttpRequest处理xml格式的返回数据(示例代码)
2013/11/21 Javascript
jquery实现的淡入淡出下拉菜单效果
2015/08/25 Javascript
jquery实现未经美化的简洁TAB菜单效果
2015/08/28 Javascript
jQuery中$.each()函数的用法引申实例
2016/05/12 Javascript
jquery操作select取值赋值与设置选中实例
2017/02/28 Javascript
video.js使用改变ui过程
2017/03/05 Javascript
Node.js上传文件功能之服务端如何获取文件上传进度
2018/02/05 Javascript
微信小程序form表单组件示例代码
2018/07/15 Javascript
JavaScript模拟实现自由落体效果
2018/08/28 Javascript
全面了解JavaScript的作用域链
2019/04/03 Javascript
js form表单input框限制20个字符,10个汉字代码实例
2019/04/12 Javascript
JS实现提示效果弹出及延迟隐藏的功能
2019/08/26 Javascript
解决vue初始化项目时,一直卡在Project description上的问题
2019/10/31 Javascript
Nodejs + sequelize 实现增删改查操作
2020/11/07 NodeJs
[01:38]完美世界高校联赛决赛花絮
2018/12/02 DOTA
python清除字符串里非字母字符的方法
2015/07/02 Python
浅析python参数的知识点
2018/12/10 Python
浅谈python函数调用返回两个或多个变量的方法
2019/01/23 Python
pygame实现五子棋游戏
2019/10/29 Python
Python txt文件如何转换成字典
2020/11/03 Python
CSS3实现各种图形的示例代码
2016/10/19 HTML / CSS
阿里巴巴Oracle DBA笔试题答案-备份恢复类
2013/11/20 面试题
幼儿园消防安全制度
2014/01/26 职场文书
建议书怎么写
2014/03/12 职场文书
大学生年度个人总结
2015/02/15 职场文书
吧主申请感言怎么写
2015/08/03 职场文书
感恩教师节主题班会
2015/08/12 职场文书
《传颂之物 虚伪的假面》BD发售宣传CM公开
2022/04/04 日漫
MySQL添加索引特点及优化问题
2022/07/23 MySQL