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的库,结果发现很多东西
Dec 31 PHP
php获取地址栏信息的代码
Oct 08 PHP
php网站来路获取代码(针对搜索引擎)
Jun 08 PHP
基于curl数据采集之单页面采集函数get_html的使用
Apr 28 PHP
CI框架(ajax分页,全选,反选,不选,批量删除)完整代码详解
Nov 01 PHP
php 解决扫描二维码下载跳转问题
Jan 13 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
Feb 05 PHP
kindeditor 加入七牛云上传的实例讲解
Nov 12 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
Jun 10 PHP
php字符串过滤strip_tags()函数用法实例分析
Jun 24 PHP
解决laravel查询构造器中的别名问题
Oct 17 PHP
关于PHP数组迭代器的使用方法实例
Nov 17 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
在Zeus Web Server中安装PHP语言支持
2006/10/09 PHP
使用php判断服务器是否支持Gzip压缩功能
2013/09/24 PHP
php实现搜索类封装示例
2016/03/31 PHP
Yii多表联合查询操作详解
2016/06/02 PHP
thinkphp5框架路由原理与用法详解
2020/02/11 PHP
收藏一些不常用,但是有用的代码
2007/03/12 Javascript
用JS操作FRAME中的IFRAME及其内容的实现代码
2008/07/26 Javascript
jQuery中:header选择器用法实例
2014/12/29 Javascript
JavaScript获取指定元素位置的方法
2015/04/08 Javascript
浅谈JavaScript对象的创建方式
2016/06/13 Javascript
浅析Nodejs npm常用命令
2016/06/14 NodeJs
JavaScript操作文件_动力节点Java学院整理
2017/06/30 Javascript
jQuery实现动态加载(按需加载)javascript文件的方法分析
2019/05/31 jQuery
JS中==、===你分清楚了吗
2020/03/04 Javascript
Javascript 模拟mvc实现点餐程序案例详解
2020/12/24 Javascript
[01:23]2014DOTA2国际邀请赛 球迷无处不在Ti现场世界杯受关注
2014/07/10 DOTA
基于Python如何使用AIML搭建聊天机器人
2016/01/27 Python
PyCharm使用教程之搭建Python开发环境
2016/06/07 Python
Python 基础教程之str和repr的详解
2017/08/20 Python
Python3实现腾讯云OCR识别
2018/11/27 Python
Python minidom模块用法示例【DOM写入和解析XML】
2019/03/25 Python
Python计算一个点到所有点的欧式距离实现方法
2019/07/04 Python
Python使用random模块生成随机数操作实例详解
2019/09/17 Python
Python线程指南分享
2019/11/19 Python
Python利用for循环打印星号三角形的案例
2020/04/12 Python
python实现学生成绩测评系统
2020/06/22 Python
Django用户认证系统如何实现自定义
2020/11/12 Python
HTML5 canvas画图并保存成图片的jcanvas插件
2014/01/17 HTML / CSS
Cult Gaia官网:美国生活方式品牌
2019/08/16 全球购物
荷兰睡眠专家:Beter Bed
2020/11/23 全球购物
最热门的自我评价
2013/12/30 职场文书
分家协议书
2014/04/21 职场文书
奥巴马竞选演讲稿
2014/05/15 职场文书
运动会表扬稿
2015/01/16 职场文书
导游词之上海东方明珠塔
2019/09/25 职场文书
开机音效回归! Windows 11重新引入开机铃声
2021/11/21 数码科技