php学习笔记 面向对象中[接口]与[多态性]的应用


Posted in PHP onJune 16, 2011
<?php 
/* 接口技术 
* 
* 接口是一种特殊的抽象类,抽象类又是一种特殊的类 
* 
* 接口和抽象类是一样的作用 
* 
* 因为在PHP是单继承的,如果使用抽象类,子类实现抽象类就不能再去继承其他的类了 
* 
* 如果既想实现一些规范,又想继承其他类。就要使用接口。 
* 
* 接口和抽象类的对比 
* 
* 1.作用相同,都不能创建对象,都需要子类去实现 
* 
* 2.接口的声明和抽象类不一样 
* 
* 3.接口被实现方式不一样 
* 
* 4.接口中的所有方法必须是抽象方法,只能声明抽象方法(不用使用abstract修饰) 
* 
* 5.接口中的成员属性,只能声明常量,不能声明变量 
* 
* 6.接口中的成员访问权限,都必须是public,抽象类中最低的权限protected 
* 
* 声明接口: interface 接口名{ }; 
* 
* 7.使用一个类去实现接口,不是使用extends,而是使用implements关键字 
* 
* 如果子类是重写父接口中抽象方法,则使用implements(实现),类--接口,抽象类--接口 使用implements,接口--接口 使用extends(继承) 
* 
* 可以使用抽象类去实现接口中的部分方法 
* 如果想让子类可以创建对象,则必须实现接口中的所有方法 
* 可以定义一个接口去继承另一个接口 
* 一个类可以去实现多个接口(按多个规范开发子类),使用逗号分隔多个接口名称 
* 一个类可以在继承一个类的同时,去实现一个或多个接口 
* 
* 使用implements的两个目的: 
* 
* 1.可以实现多个接口,而extends词只能继承一个父类 
* 
* 2.没有使用extends词,可以去继承一个类,所以两个可以同时使用 
* 
* 多态:多态是面向对象的三大特性之一 
* 
* “多态”是面向对象设计的重要特性,它展现了动态绑定(dynamic binding)的功能,也称为“同名异式”(Polymorphism)。多态的功能可让软件在开发和维护时,达到充分的延伸性(extension)。事实上,多态最直接的定义就是让具有继承关系的不同类对象,可以对相同名称的成员函数调用,产生不同的反应效果。 
* 
* 
* 
* 
* 
*/ 
//声明接口 
interface Demo{ 
const HOST="localhost"; 
const USER="admin"; 
function fun1();//声明方法不用加abstract,默认就是。权限是public 
function fun2(); 
} 
//接口的继承 
interface Demo2 extends Demo { 
function fun3(); 
function fun4(); 
} 
interface Demo3{ 
function fun5(); 
function fun6(); 
} 
interface Demo4{ 
function fun7(); 
} 
echo Demo::HOST;//可以访问接口中的常量 
class Hello{ 
function fun8(){ 
} 
} 
//子类必须实现接口中的所有方法 
class UTest extends Hello implements Demo2,Demo3,Demo4 { //实现多个接口 
function fun1(){ 
} 
function fun2(){ 
} 
function fun3(){ 
} 
function fun4(){ 
} 
function fun5(){ 
} 
function fun6(){ 
} 
function fun7(){ 
} 
} 
/*-------------------多态---------------*/ 
interface Test{ 
function fun1(); 
function fun2(); 
} 
class One implements Test{ 
function fun1(){ 
echo "aaaaaaaaa"; 
} 
function fun2(){ 
echo "bbbbbbbbbbbb"; 
} 
} 
class Two implements Test{ 
function fun1(){ 
echo "11111111"; 
} 
function fun2(){ 
echo "2222222222"; 
} 
} 
//同一个接口,实现同一个方法,不同对象,输出不同。这就是多态的表现与应用 
$test=new One; 
$test->fun1();//输出一行 a 
$test->fun2();//输出一行 b 
$test=new Two; 
$test->fun1();//输出一行 1 
$test->fun2();//输出一行 2 
?> 
<?php 
/*--------------多态的一个应用实例 模拟USB设备的使用------------------*/ 
//一个USB的接口 
interface USB{ 
function mount();//装载USB的方法 
function work();//USB工作的方法 
function unmount();//卸载USB的方法 
} 
//定义一个USB设备 U盘 
class Upan implements USB{//实现USB接口 
function mount(){ 
echo " U盘 装载成功<br/>"; 
} 
function work(){ 
echo "U盘 开始工作<br/>"; 
} 
function unmount(){ 
echo "U盘 卸载成功<br/>"; 
} 
} 
//定义一个USB设备 USB鼠标 
class Umouse implements USB{//实现USB接口 
function mount(){ 
echo " USB键盘 装载成功<br/>"; 
} 
function work(){ 
echo "USB键盘 开始工作<br/>"; 
} 
function unmount(){ 
echo "USB键盘 卸载成功<br/>"; 
} 
} 
//定义一个电脑类 
class Computer{ 
//使用USB设备的方法 
function useUSB ($usb){//$usb参数表示 使用哪种USB设备 
$usb->mount();//调用设备的 装载方法 
$usb->work();//调用设备的 工作方法 
$usb->unmount();//调用设备的卸载方法 
} 
} 
//定义一个电脑的使用者的类 
class PcUser{ 
//安装USB的方法 
function install(){ 
//首先拿来一台电脑 
$pc=new Computer; 
//拿来一些USB设备 
$up=new Upan;//拿来一个U盘 
$um=new Umouse;//拿来一个USB鼠标 
//把USB设备插入电脑, 使用电脑中使用USB设备的方法 来调用 要插入的设备 
$pc->useUSB($up);//插入U盘 
$pc->useUSB($um);//插入USB鼠标 
} 
} 
//实例化一个电脑用户 
$user=new PcUser; 
$user->install();//安装设备 
/*-------------输出内容-------------- 
U盘 装载成功 
U盘 开始工作 
U盘 卸载成功 
USB键盘 装载成功 
USB键盘 开始工作 
USB键盘 卸载成功 
-----------------------------------*/ 
?>

作者:代号极光
http://www.cnblogs.com/zizhuyuan/archive/2011/06/16/2082262.html
PHP 相关文章推荐
用ODBC的分页显示
Oct 09 PHP
php MySQL与分页效率
Jun 04 PHP
完美实现GIF动画缩略图的php代码
Jan 02 PHP
php和mysql中uft-8中文编码乱码的几种解决办法
Apr 19 PHP
支持中文和其他编码的php截取字符串函数分享(截取中文字符串)
Mar 13 PHP
php smarty truncate UTF8乱码问题解决办法
Jun 13 PHP
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
May 21 PHP
PHP笛卡尔积实现算法示例
Jul 30 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
Jul 24 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
Dec 12 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
Feb 27 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
Mar 26 PHP
php smarty 二级分类代码和模版循环例子
Jun 16 #PHP
Warning: session_destroy() : Trying to destroy uninitialized sessionq错误
Jun 16 #PHP
php中session_unset与session_destroy的区别分析
Jun 16 #PHP
不重新编译PHP为php增加openssl模块的方法
Jun 14 #PHP
php的memcached客户端memcached
Jun 14 #PHP
PHP模块 Memcached功能多于Memcache
Jun 14 #PHP
php模块memcache和memcached区别分析
Jun 14 #PHP
You might like
推荐几款用 Sublime Text 开发 Laravel 所用到的插件
2014/10/30 PHP
WordPress中制作导航菜单的PHP核心方法讲解
2015/12/11 PHP
使用PHP实现微信摇一摇周边红包
2016/01/04 PHP
php脚本运行时的超时机制详解
2016/02/17 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
jQuery 中使用JSON的实现代码
2011/12/01 Javascript
jQuery 翻牌或百叶窗效果(内容三秒自动切换)
2012/06/14 Javascript
深入理解Javascript里的依赖注入
2014/03/19 Javascript
json字符串之间的相互转换示例代码
2014/08/21 Javascript
jQuery替换textarea中换行的方法
2015/06/10 Javascript
JavaScript文本框脚本编写的注意事项
2016/01/25 Javascript
jQuery模拟360浏览器切屏效果幻灯片(附demo源码下载)
2016/01/29 Javascript
详解AngularJS过滤器的使用
2016/03/11 Javascript
AngularJS中实现用户访问的身份认证和表单验证功能
2016/04/21 Javascript
js分页之前端代码实现和请求处理
2017/08/04 Javascript
Vue2.0 实现单选互斥的方法
2018/04/13 Javascript
jQuery获取随机颜色的实例代码
2018/05/21 jQuery
Chart.js 轻量级HTML5图表绘制工具库(知识整理)
2018/05/22 Javascript
Vue2.x Todo之自定义指令实现自动聚焦的方法
2019/01/08 Javascript
JavaScript中判断为整数的多种方式及保留两位小数的方法
2019/09/09 Javascript
Vue 设置axios请求格式为form-data的操作步骤
2019/10/29 Javascript
jQuery与原生JavaScript选择HTML元素集合用法对比分析
2019/11/26 jQuery
浅谈django2.0 ForeignKey参数的变化
2019/08/06 Python
pandas之分组groupby()的使用整理与总结
2020/06/18 Python
Python wordcloud库安装方法总结
2020/12/31 Python
纯CSS3代码实现文字描边
2016/04/25 HTML / CSS
ProForm英国站点:健身房和健身器材网上商店
2019/06/05 全球购物
意大利自行车商店:Cingolani Bike Shop
2019/09/03 全球购物
大学生毕业自我鉴定范文
2013/09/19 职场文书
最新的互联网创业计划书
2014/01/10 职场文书
歌颂祖国演讲稿
2014/05/04 职场文书
2014年作风建设剖析材料
2014/10/23 职场文书
MySQL 8.0 之不可见列的基本操作
2021/05/20 MySQL
redis实现排行榜功能
2021/05/24 Redis
实操Python爬取觅知网素材图片示例
2021/11/27 Python
微信小程序 WeUI扩展组件库的入门教程
2022/04/21 Javascript