1. <?php
  2.  
  3. /**
  4. * 接口类:interface
  5. * 其实他们的作用很简单,当有很多人一起开发一个项目时,可能都会去调用别人写的一些类,
  6. * 那你就会问,我怎么知道他的某个功能的实现方法是怎么命名的呢,这个时候php接口类就起到作用了,
  7. * 当我们定义了一个接口类时,它里面的方式是下面的子类必须实现的。
  8. */
  9.  
  10. interface Shop
  11. {
  12.  
  13. public function buy($gid);
  14.  
  15. public function sell($gid);
  16.  
  17. public function view($gid);
  18. }
  19.  
  20. /**
  21. * Interface Shop
  22. * 声明一个shop接口类,定义了三个方法:买(buy),卖(sell),看(view),
  23. * 那么继承此类的所有子类都必须实现这3个方法,少一个都不行,如果子类没有实现这些话,就无法运行。
  24. * 实际上接口类说白了,就是一个类的模板,一个类的规定,
  25. * 如果你继承此类这类,你就必须遵循我的规定,少一个都不行,但是具体怎么做,我不管,那是你的事
  26. *
  27. * 结论 :接口类就是一个类的领导者,指明方向,子类必须完成它指定方法。
  28. */
  29.  
  30. class BaseShop implements Shop
  31. {
  32. public function buy($gid)
  33. {
  34. echo('你购买了ID为'.$gid.'的商品');
  35. }
  36.  
  37. public function sell($gid)
  38. {
  39. echo('你销售了ID为'.$gid.'的商品');
  40. }
  41.  
  42. public function view($gid)
  43. {
  44. echo('你查看了ID为'.$gid.'的商品');
  45. }
  46. }
  47.  
  48. $shop = new BaseShop();
  49. echo $shop->buy(123).PHP_EOL;
  50. echo $shop->sell(456).PHP_EOL;
  51. echo $shop->view(789).PHP_EOL.PHP_EOL;
  52.  
  53. /**
  54. * --------------------------------------------------------------------------------
  55. */
  56.  
  57. /**
  58. * 抽象类:abstract
  59. * 其实抽象类和接口类有一部分很像,记得在哪里看见这样一句话,抽象类就把类 相似的部分抽出来,
  60. * 这句看上去很搞笑,其实它说出了抽象类的真理,抽象类的作用是,当你发现你的很多类里面用很多方法你不断的在重复写,那你就可以考虑使用抽象类了,
  61. * 你可能会说“我不是可以重写一个类每个公共类我个实例化一个这个公共类,调用相同的方法就可以了”,
  62. * 这里是可以,实际上抽象类做的工作也就是这个,不过他省去了你实例化的这个步骤,让你就像直接调用本类方法一样方便,而且你还可以重载这个方法。
  63. */
  64. abstract class ShopCart
  65. {
  66. public function buy($gid)
  67. {
  68. echo('你购买了ID为'.$gid.'的商品');
  69. }
  70.  
  71. public function sell($gid)
  72. {
  73. echo('你销售了ID为'.$gid.'的商品');
  74. }
  75.  
  76. public function view($gid)
  77. {
  78. echo('你查看了ID为'.$gid.'的商品');
  79. }
  80. }
  81.  
  82. /**
  83. * 这里是一个例子,想上面一样我定义了一个商店类,抽出了它所有像的部分,买(buy),卖(sell),看(view),
  84. * 并且抽象类里都实现了这些方法,那么继承它的子类就自动获得了这些方法,子类就做它自己独特的东西,介绍代码的重复,提高复用性。
  85. *
  86. * 结论:抽象类就是一个类的服务提供商,拥有众多服务,非必须使用,当需要的时候调用即可,如果你觉得提供服务的不满足,你可以自己来做。
  87. */
  88. class newShop extends ShopCart
  89. {
  90. var $itme_id = null;
  91.  
  92. public function __construct($id)
  93. {
  94. $this->itme_id = $id;
  95. }
  96.  
  97. public function sell2()
  98. {
  99. $this->sell($this->itme_id);
  100. }
  101.  
  102. public function down($item)
  103. {
  104. echo('你下架了ID为'.$item.'的商品');
  105. }
  106. }
  107.  
  108. $newShop = new newShop(100);
  109. echo $newShop->buy(123).PHP_EOL;
  110. echo $newShop->sell(456).PHP_EOL;
  111. echo $newShop->view(789).PHP_EOL;
  112. echo $newShop->sell2().PHP_EOL;
  113. echo $newShop->down(222).PHP_EOL;

  

PHP的接口类(interface)和抽象类(abstract)的区别的更多相关文章

  1. PHP接口类interface的正确使用方法

    对于那些初学PHP语言的人来说,对于PHP的接口类也许了解的还不是很深入,接下来我们就来具体讲述PHP接口类interface的使用方法. 如何正确运用PHP XMLReader解析XML文档 深入解 ...

  2. PHP接口类interface使用方法

    PHP同大多数的面向对象语言一样,并不支持多重继承.少数支持多重继承的语言中最著名的就是C++和Smalltalk.如果需要实现多重继承功能,在PHP中,可以通过接口,它是PHP解决多重继承问题的方法 ...

  3. PHP接口(interface)和抽象类(abstract)

    interface 定义了一个接口类,它里面的方法其子类必须实现.接口是类的一个模板,其子类必须实现接口中定义的所有方法. interface User{     function getHeight ...

  4. C++虚函数virtual,纯虚函数pure virtual和Java抽象函数abstract,接口interface与抽象类abstract class的比较

    由于C++和Java都是面向对象的编程语言,它们的多态性就分别靠虚函数和抽象函数来实现. C++的虚函数可以在子类中重写,调用是根据实际的对象来判别的,而不是通过指针类型(普通函数的调用是根据当前指针 ...

  5. c++ 如何编写接口类(interface)

    接口类简介: 接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要由具体的类去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法. 用c++实现接口类时需要 ...

  6. C# 接口(interface) 抽象类(abstract)

    类代码: interface Employee { void ShowEmp(); } abstract class EmployeeInPostion: Employee { public abst ...

  7. Python学习日记(二十五) 接口类、抽象类、多态

    接口类 继承有两种用途:继承基类的方法,并且做出自己的改变或扩展(代码重用)和声明某个子类兼容于某基类,定义一个接口类interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子 ...

  8. php面向对象重的抽象类,接口类与静态

    static 静态 <?php class ren { public $name; public static $sex; static function shao() { echo " ...

  9. python之路----继承的抽象类和接口类

    抽象类与接口类 接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数 ...

随机推荐

  1. 读书笔记-实用单元测试(英文版) Pragmatic Unit Testing in C# with NUnit

    读书笔记-实用单元测试(英文版) Pragmatic Unit Testing in C# with NUnit Author: Andrew Hunt ,David Thomas with Matt ...

  2. Oracle GoldenGate配置异构数据库数据传输(oracle到sqlserer)的dml操作(带pump进程)

    实验环境:os01:Red Hat Enterprise Linux Server release 5.1 (32位)db01:oracle 10.2.0.1.0 os02:Windows 7 (32 ...

  3. 多线程12_张孝祥 java5读写锁技术的妙用

    package locks; import java.util.Random; import java.util.concurrent.locks.ReentrantReadWriteLock; /* ...

  4. week 与 strong区别 精辟的解释

    转:http://stackoverflow.com/questions/9262535/explanation-of-strong-and-weak-storage-in-ios5 觉得讲的很容易理 ...

  5. iOS开发之git学习

    本人是参考廖雪峰的git学习的.他写的非常详细,我在这里就是把我学习中的总结以及碰到的坑写出来. /* 初始化git仓库:git init */ /* 添加文件到git仓库 */ 分两步: 第一步:追 ...

  6. OC-类

    1.关于头文件 #include <stdio.h>     #import <Foundation/Foundation.h> 区别:#import指令导入更快更有效率.#i ...

  7. css3之3D翻牌效果

      最近一直在学css3,发现他真的是越来越牛逼.现在的css3已经不在是以前的css了,它能做出的功能效果是我们没法想象的了.它可以实现flash,可以制作一些js能做出来的效果,还可以写出ps做出 ...

  8. python 通过ntlm验证下载文件

    最近使用python实现一个小工具,需要从网站下载文件,下载时服务端需要进行ntlm验证,否则返回401错误响应.经研究 requests库配合 requests-ntlm 可以解决这个问题. ntl ...

  9. 对简单的正则表达式的理解V1.0

    [^<]* 我得理解也是基本来自官方的解释 [] 我理解是它其中的内容,是指内容哦, 内容是可以选择的 字符 集合 ,比如说  @"<div style="color: ...

  10. 修改默认的undo_retention参数设置

    昨天,一个朋友的数据库数据被误操作删除掉了,请求我帮忙进行恢复. 数据库版本是Oracle10g Release 2的,我首先想到的是使用Flashback Query进行闪回恢复,不幸的是ORA-0 ...