PHP的接口类(interface)和抽象类(abstract)的区别
- <?php
- /**
- * 接口类:interface
- * 其实他们的作用很简单,当有很多人一起开发一个项目时,可能都会去调用别人写的一些类,
- * 那你就会问,我怎么知道他的某个功能的实现方法是怎么命名的呢,这个时候php接口类就起到作用了,
- * 当我们定义了一个接口类时,它里面的方式是下面的子类必须实现的。
- */
- interface Shop
- {
- public function buy($gid);
- public function sell($gid);
- public function view($gid);
- }
- /**
- * Interface Shop
- * 声明一个shop接口类,定义了三个方法:买(buy),卖(sell),看(view),
- * 那么继承此类的所有子类都必须实现这3个方法,少一个都不行,如果子类没有实现这些话,就无法运行。
- * 实际上接口类说白了,就是一个类的模板,一个类的规定,
- * 如果你继承此类这类,你就必须遵循我的规定,少一个都不行,但是具体怎么做,我不管,那是你的事
- *
- * 结论 :接口类就是一个类的领导者,指明方向,子类必须完成它指定方法。
- */
- 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.'的商品');
- }
- }
- $shop = new BaseShop();
- echo $shop->buy(123).PHP_EOL;
- echo $shop->sell(456).PHP_EOL;
- echo $shop->view(789).PHP_EOL.PHP_EOL;
- /**
- * --------------------------------------------------------------------------------
- */
- /**
- * 抽象类:abstract
- * 其实抽象类和接口类有一部分很像,记得在哪里看见这样一句话,抽象类就把类 相似的部分抽出来,
- * 这句看上去很搞笑,其实它说出了抽象类的真理,抽象类的作用是,当你发现你的很多类里面用很多方法你不断的在重复写,那你就可以考虑使用抽象类了,
- * 你可能会说“我不是可以重写一个类每个公共类我个实例化一个这个公共类,调用相同的方法就可以了”,
- * 这里是可以,实际上抽象类做的工作也就是这个,不过他省去了你实例化的这个步骤,让你就像直接调用本类方法一样方便,而且你还可以重载这个方法。
- */
- abstract class ShopCart
- {
- public function buy($gid)
- {
- echo('你购买了ID为'.$gid.'的商品');
- }
- public function sell($gid)
- {
- echo('你销售了ID为'.$gid.'的商品');
- }
- public function view($gid)
- {
- echo('你查看了ID为'.$gid.'的商品');
- }
- }
- /**
- * 这里是一个例子,想上面一样我定义了一个商店类,抽出了它所有像的部分,买(buy),卖(sell),看(view),
- * 并且抽象类里都实现了这些方法,那么继承它的子类就自动获得了这些方法,子类就做它自己独特的东西,介绍代码的重复,提高复用性。
- *
- * 结论:抽象类就是一个类的服务提供商,拥有众多服务,非必须使用,当需要的时候调用即可,如果你觉得提供服务的不满足,你可以自己来做。
- */
- class newShop extends ShopCart
- {
- var $itme_id = null;
- public function __construct($id)
- {
- $this->itme_id = $id;
- }
- public function sell2()
- {
- $this->sell($this->itme_id);
- }
- public function down($item)
- {
- echo('你下架了ID为'.$item.'的商品');
- }
- }
- $newShop = new newShop(100);
- echo $newShop->buy(123).PHP_EOL;
- echo $newShop->sell(456).PHP_EOL;
- echo $newShop->view(789).PHP_EOL;
- echo $newShop->sell2().PHP_EOL;
- echo $newShop->down(222).PHP_EOL;
PHP的接口类(interface)和抽象类(abstract)的区别的更多相关文章
- PHP接口类interface的正确使用方法
对于那些初学PHP语言的人来说,对于PHP的接口类也许了解的还不是很深入,接下来我们就来具体讲述PHP接口类interface的使用方法. 如何正确运用PHP XMLReader解析XML文档 深入解 ...
- PHP接口类interface使用方法
PHP同大多数的面向对象语言一样,并不支持多重继承.少数支持多重继承的语言中最著名的就是C++和Smalltalk.如果需要实现多重继承功能,在PHP中,可以通过接口,它是PHP解决多重继承问题的方法 ...
- PHP接口(interface)和抽象类(abstract)
interface 定义了一个接口类,它里面的方法其子类必须实现.接口是类的一个模板,其子类必须实现接口中定义的所有方法. interface User{ function getHeight ...
- C++虚函数virtual,纯虚函数pure virtual和Java抽象函数abstract,接口interface与抽象类abstract class的比较
由于C++和Java都是面向对象的编程语言,它们的多态性就分别靠虚函数和抽象函数来实现. C++的虚函数可以在子类中重写,调用是根据实际的对象来判别的,而不是通过指针类型(普通函数的调用是根据当前指针 ...
- c++ 如何编写接口类(interface)
接口类简介: 接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要由具体的类去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法. 用c++实现接口类时需要 ...
- C# 接口(interface) 抽象类(abstract)
类代码: interface Employee { void ShowEmp(); } abstract class EmployeeInPostion: Employee { public abst ...
- Python学习日记(二十五) 接口类、抽象类、多态
接口类 继承有两种用途:继承基类的方法,并且做出自己的改变或扩展(代码重用)和声明某个子类兼容于某基类,定义一个接口类interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子 ...
- php面向对象重的抽象类,接口类与静态
static 静态 <?php class ren { public $name; public static $sex; static function shao() { echo " ...
- python之路----继承的抽象类和接口类
抽象类与接口类 接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数 ...
随机推荐
- 读书笔记-实用单元测试(英文版) Pragmatic Unit Testing in C# with NUnit
读书笔记-实用单元测试(英文版) Pragmatic Unit Testing in C# with NUnit Author: Andrew Hunt ,David Thomas with Matt ...
- 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 ...
- 多线程12_张孝祥 java5读写锁技术的妙用
package locks; import java.util.Random; import java.util.concurrent.locks.ReentrantReadWriteLock; /* ...
- week 与 strong区别 精辟的解释
转:http://stackoverflow.com/questions/9262535/explanation-of-strong-and-weak-storage-in-ios5 觉得讲的很容易理 ...
- iOS开发之git学习
本人是参考廖雪峰的git学习的.他写的非常详细,我在这里就是把我学习中的总结以及碰到的坑写出来. /* 初始化git仓库:git init */ /* 添加文件到git仓库 */ 分两步: 第一步:追 ...
- OC-类
1.关于头文件 #include <stdio.h> #import <Foundation/Foundation.h> 区别:#import指令导入更快更有效率.#i ...
- css3之3D翻牌效果
最近一直在学css3,发现他真的是越来越牛逼.现在的css3已经不在是以前的css了,它能做出的功能效果是我们没法想象的了.它可以实现flash,可以制作一些js能做出来的效果,还可以写出ps做出 ...
- python 通过ntlm验证下载文件
最近使用python实现一个小工具,需要从网站下载文件,下载时服务端需要进行ntlm验证,否则返回401错误响应.经研究 requests库配合 requests-ntlm 可以解决这个问题. ntl ...
- 对简单的正则表达式的理解V1.0
[^<]* 我得理解也是基本来自官方的解释 [] 我理解是它其中的内容,是指内容哦, 内容是可以选择的 字符 集合 ,比如说 @"<div style="color: ...
- 修改默认的undo_retention参数设置
昨天,一个朋友的数据库数据被误操作删除掉了,请求我帮忙进行恢复. 数据库版本是Oracle10g Release 2的,我首先想到的是使用Flashback Query进行闪回恢复,不幸的是ORA-0 ...