当前位置: 首页 > news >正文

php课程 12-41 多态是什么

php课程 12-41 多态是什么

一、总结

一句话总结:一种请求,多种响应(根据参数类型和数量)

 

1、function useUsb(Usb $usb){}这句话是什么意思?

判断$usb参数是否实现了Usb接口

 

 

2、多态是什么(详细一点)?

多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。
多态的作用:消除类型之间的耦合关系。
现实中,关于多态的例子不胜枚举。比方说按下 F1 键这个动作,如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;如果当前在 Word 下弹出的就是 Word 帮助;在 Windows 下弹出的就是 Windows 帮助和支持。同一个事件发生在不同的对象上会产生不同的结果。

 

3、多态在php中的用处是什么?

在函数的参数前面指定实现的接口(约束父类(判断继承的父类)),function useUsb(Usb $usb){},用以针对不同的参数类型做不同的操作

 

 

4、php魔术方法有哪些?

1.__construct
2.__destruct
3.__toString
4.__call
5.__get
6.__set
7.__isset
8.__unset

 

5、php魔术方法的结构的共同特征是什么?

前面是双下划线__,

 

6、php面向对象魔术方法__toString()有什么用?

相当于给类增加说明,可以echo(echo本来是不能输出对象的)出对象的简短信息(写在__toString()中)

 

7、php面向对象魔术方法__call()的作用是什么?

用户在调用类中不存在的方法的时候自动调用__call()
比如类中没有stop()方法,你调用它,这个时候会严重错误,但是如果你在类中声明call方法,可以给用户提示这个方法不存在

 

 

二、php多态

1、相关知识

多态:
#函数可以根据类的父类或祖先不同而表现出不现的形态或结果.
function useUsb(Usb $usb){
    $usb->start();
    $usb->run();
    $usb->stop();
}

 

2、代码

多态的实例(解决产品山寨问题,判断是否实现了标准(接口))

 1 <?php 
 2 // 国际标准组织
 3 interface Usb{
 4     function start();
 5     function run();
 6     function stop();
 7 }
 8 
 9 // 小金生产的U盘
10 class Upan implements Usb{
11     function start(){
12         echo "<h3>usb start</h3>";
13     }
14 
15     function run(){
16         echo "<h3>usb run</h3>";
17     }
18 
19     function stop(){
20         echo "<h3>usb stop</h3>";
21     }
22 
23     function explode(){
24         echo "<h3>usb explode</h3>";
25     }
26 }
27 
28 // 小吴生产的U盘
29 class Upan2{
30     function start(){
31         echo "<h3>usb start</h3>";
32     }
33 
34     function run(){
35         echo "<h3>usb run</h3>";
36     }
37 
38     function stop(){
39         echo "<h3>usb stop</h3>";
40     }
41 
42     function explode(){
43         echo "<h3>usb explode</h3>";
44     }
45 }
46 
47 $obj=new Upan();
48 
49 $obj2=new Upan2();
50 
51 //使用Usb设备的产品(lenovo笔记本)
52 //多态介入区分符合标准的Usb产品
53 
54 function useUsb(Usb $usb){
55     $usb->start();
56     $usb->run();
57     $usb->stop();
58 }
59 
60 useUsb($obj2);
61  ?>

 

 

 

三、php魔术方法

1、相关知识


魔术方法:
1.__construct
2.__destruct
3.__toString
4.__call
5.__get
6.__set
7.__isset
8.__unset

 

 

2、代码

 

__toString给类增加一个说明

 1 <?php 
 2 // 小吴生产的U盘
 3 class Upan{
 4     function start(){
 5         echo "<h3>usb start</h3>";
 6     }
 7 
 8     function __toString(){
 9         return '这是个U盘使用的类!';
10     }
11 }
12 
13 $obj=new Upan();
14 echo $obj;
15  ?>

 

 

__call调用调中不存在的方法时自动调用

 1 <?php 
 2 // 小吴生产的U盘
 3 class Upan{
 4     function start(){
 5         echo "<h3>usb start</h3>";
 6     }
 7 
 8     function __call($i,$j){
 9         echo '您调用的'.$i.'方法不存在,请走开!';
10     }
11 }
12 
13 $obj=new Upan();
14 $obj->stop(1,2,3);
15  ?>

 

 

 

 

 

 

转载于:https://www.cnblogs.com/Renyi-Fan/p/9427619.html

相关文章:

  • 设计模式快速学习(三)单例模式
  • hadoop实操篇:hadoop基础教程汇总
  • python2.7用socks和socket设置代理
  • 关于VS2017编译UE4项目,输出窗口有乱码的解决方案
  • Java全栈程序员之01:做个Linux下的程序猿
  • 如何靠谱地查到Tomcat的版本
  • Maven根据pom文件中的Profile标签动态配置编译选项
  • openlayers+geoserver+wms实现空间查询,属性查询
  • 关于 HandlerMethodArgumentResolver 类 以及 WebArgumentResolver 类 自定义解析参数
  • vue.js有什么用,是用来做什么的(整理)
  • Redis字符串类型内部编码剖析
  • HAPkendoUI的Excle导出
  • js 和 css动画
  • [IOI2007 D1T1]Miners 矿工配餐
  • 10.监视SQL Server性能
  • gitlab-ci配置详解(一)
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • React-Native - 收藏集 - 掘金
  • REST架构的思考
  • RxJS: 简单入门
  • SAP云平台里Global Account和Sub Account的关系
  • SpiderData 2019年2月13日 DApp数据排行榜
  • Unix命令
  • vue自定义指令实现v-tap插件
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 老板让我十分钟上手nx-admin
  • 使用common-codec进行md5加密
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 网页视频流m3u8/ts视频下载
  • 小试R空间处理新库sf
  • 写给高年级小学生看的《Bash 指南》
  • 用 Swift 编写面向协议的视图
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • k8s使用glusterfs实现动态持久化存储
  • PostgreSQL之连接数修改
  • ​渐进式Web应用PWA的未来
  • ​决定德拉瓦州地区版图的关键历史事件
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #QT项目实战(天气预报)
  • (06)Hive——正则表达式
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (转)iOS字体
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .equals()到底是什么意思?
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .NET 设计模式初探
  • .net开发时的诡异问题,button的onclick事件无效
  • .NET中两种OCR方式对比
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?