浅析php中抽象类和接口的概念以及区别


Posted in PHP onJune 27, 2013
//抽象类的定义:
abstract class ku{  //定义一个抽象类
  abstract function kx();
  ......
}
function aa extends ku{
  //实现抽象类的方法
  function kx(){
    echo 'sdsf';
  }
}
//使用方法
$aa=new aa;
$aa->kx();
//1.定义一些方法,子类必须完全实现这个抽象中所有的方法
//2.不能从抽象类创建对象,它的意义在于被扩展
//3.抽象类通常具有抽象方法,方法中没有大括号
//4.抽象方法不必实现具体的功能,由子类来完成
//5.在子类实现抽象类的方法时,其子类的可见性必须大于或等于抽象方法的定义
//6.抽象类的方法可以有参数,也可以为空
//7.如果抽象方法有参数,那么子类的实现也必须有相同的参数个数
//////////////////////////////接口类的定义:
interface Shop{
      public   function buy($gid);
      public   function sell($gid);
      abstract function view($gid);
}
//如果要使用接口,必须定义接口类中的所以方法少一个都不可以(abstract除外)。
//这样如果在一个大项目中不管别人怎么去做下面的方法,但是他必须实现本接口中的所有方法才可以!
//例:实现上面的接口的一种方法
class BaseShop implements Shop{
   public function buy($gid){
      echo '你购买了ID为 :' . $gid . '的商品';
   }
   public function sell($gid){
      echo '你购卖ID为 :' . $gid . '的商品';
   }
   public function view($gid){
      echo '你浏览了ID为 :' . $gid . '的商品';
   }
}
//接口的多重继承示例:
<?php
interface staff_i1{ //接口1
  function setID();
  function getID();
}
interface staff_i2{ //接口2
  function setName();
  function getName();
}
class staff implements staff_i1,staff_i2{
  private $id;
  private $name;
  function setID($id){
    $this->id = $id;
  }
  function getID(){
    return $this->id;
  }
  function setName($name){
    $this->name = $name;
  }
  function getName(){
    return $this->name;
  }
  function otherFunc(){ //这是一个接口中不存在的方法
    echo “Test”;
  }
}
?>

他们的不同点:
1。抽象类中可以有非抽象的方法而接口中只能够有抽象的方法!
2。一个类可以继承多个接口,而一个类只能继承一个抽象类!
3。接口的使用方式通过implements关键字进行,抽象类则是通过继承extends关键字进行!
PHP 相关文章推荐
PHP 七大优势分析
Jun 23 PHP
PHP备份/还原MySQL数据库的代码
Jan 06 PHP
destoon切换城市后实现logo旁边显示地区名称的方法
Aug 21 PHP
php中stdClass的用法分析
Feb 27 PHP
PHP常用的小程序代码段
Nov 14 PHP
PHP ADODB生成下拉列表框功能示例
May 29 PHP
PHP JWT初识及其简单示例
Oct 10 PHP
PHP中单例模式的使用场景与使用方法讲解
Mar 18 PHP
Swoole 5将移除自动添加Event::wait()特性详解
Jul 10 PHP
PHP面向对象程序设计中的self、static、parent关键字用法分析
Aug 14 PHP
PHP底层运行机制与工作原理详解
Jul 31 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
Mar 09 PHP
领悟php接口中interface存在的意义
Jun 27 #PHP
CURL状态码列表(详细)
Jun 27 #PHP
解析linux下安装memcacheq(mcq)全过程笔记
Jun 27 #PHP
php删除字符串末尾子字符,删除开始字符,删除两端字符(实现代码)
Jun 27 #PHP
深入解析phpCB批量转换的代码示例
Jun 27 #PHP
使用PHP获取汉字的拼音(全部与首字母)
Jun 27 #PHP
Memcached常用命令以及使用说明详解
Jun 27 #PHP
You might like
PHP+MYSQL的文章管理系统(二)
2006/10/09 PHP
关于使用key/value数据库redis和TTSERVER的心得体会
2013/06/28 PHP
利用“多说”制作留言板、评论系统
2015/07/14 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
jQuery 开天辟地入门篇一
2009/12/09 Javascript
jQuery中parents()和parent()的区别分析
2014/10/28 Javascript
node.js中的buffer.write方法使用说明
2014/12/10 Javascript
Jquery Easyui分割按钮组件SplitButton使用详解(17)
2016/12/18 Javascript
使用jquery给新生的th绑定hover事件的实例
2017/02/10 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
2017/04/01 jQuery
AngularJS+bootstrap实现动态选择商品功能示例
2017/05/17 Javascript
vue.js项目中实用的小技巧汇总
2017/11/29 Javascript
vue3.0自定义指令(drectives)知识点总结
2020/12/27 Vue.js
Python调用C/C++动态链接库的方法详解
2014/07/22 Python
Python爬取Coursera课程资源的详细过程
2014/11/04 Python
python简单判断序列是否为空的方法
2015/06/30 Python
Python函数的周期性执行实现方法
2016/08/13 Python
python+pandas生成指定日期和重采样的方法
2018/04/11 Python
PyQt5实现拖放功能
2018/04/25 Python
Python使用爬虫爬取静态网页图片的方法详解
2018/06/05 Python
Python重新加载模块的实现方法
2018/10/16 Python
python实现定时压缩指定文件夹发送邮件
2020/12/22 Python
python的scipy实现插值的示例代码
2019/11/12 Python
tensorflow如何继续训练之前保存的模型实例
2020/01/21 Python
Python新手如何理解循环加载模块
2020/05/29 Python
Pycharm中配置远程Docker运行环境的教程图解
2020/06/11 Python
网络、C以及其他硬件方面的面试题
2016/08/23 面试题
购房意向书
2014/04/01 职场文书
应聘会计求职信
2014/06/11 职场文书
邓小平理论心得体会
2014/09/09 职场文书
CSS3鼠标悬浮过渡缩放效果
2021/04/17 HTML / CSS
Feign调用传输文件异常的解决
2021/06/24 Java/Android
面试提问mysql一张表到底能存多少数据
2022/03/13 MySQL
试用1103暨1103、1101同门大比武 [ DAIWEI ]
2022/04/05 无线电
netty 实现tomcat的示例代码
2022/06/05 Servers
前端使用svg图片改色实现示例
2022/07/23 HTML / CSS