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、代码

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

 <?php
// 国际标准组织
interface Usb{
function start();
function run();
function stop();
} // 小金生产的U盘
class Upan implements Usb{
function start(){
echo "<h3>usb start</h3>";
} function run(){
echo "<h3>usb run</h3>";
} function stop(){
echo "<h3>usb stop</h3>";
} function explode(){
echo "<h3>usb explode</h3>";
}
} // 小吴生产的U盘
class Upan2{
function start(){
echo "<h3>usb start</h3>";
} function run(){
echo "<h3>usb run</h3>";
} function stop(){
echo "<h3>usb stop</h3>";
} function explode(){
echo "<h3>usb explode</h3>";
}
} $obj=new Upan(); $obj2=new Upan2(); //使用Usb设备的产品(lenovo笔记本)
//多态介入区分符合标准的Usb产品 function useUsb(Usb $usb){
$usb->start();
$usb->run();
$usb->stop();
} useUsb($obj2);
?>

三、php魔术方法

1、相关知识

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

 

2、代码

__toString给类增加一个说明

 <?php
// 小吴生产的U盘
class Upan{
function start(){
echo "<h3>usb start</h3>";
} function __toString(){
return '这是个U盘使用的类!';
}
} $obj=new Upan();
echo $obj;
?>

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

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

php课程 12-41 多态是什么的更多相关文章

  1. mysql数据库优化课程---12、mysql嵌套和链接查询

    mysql数据库优化课程---12.mysql嵌套和链接查询 一.总结 一句话总结:查询user表中存在的所有班级的信息? in distinct mysql> select * from cl ...

  2. laravel基础课程---12、lavarel的ajax操作2(lavarel的ajax使用总结)

    laravel基础课程---12.lavarel的ajax操作2(lavarel的ajax使用总结) 一.总结 一句话总结: 比较简单:就是js请求ajax,然后控制器获取请求参数,返回数据即可 1. ...

  3. 妙味css3课程---1-2、css3中新增的伪类和伪元素有哪些

    妙味css3课程---1-2.css3中新增的伪类和伪元素有哪些 一.总结 一句话总结: 1.div:target{}是什么意思? 比如a标签的锚点链接到div,div:target{}就可以找到这个 ...

  4. bootstrap课程12 滚动监听如何实现(bootstrap方式和自定义方式)

    bootstrap课程12 滚动监听如何实现(bootstrap方式和自定义方式) 一.总结 一句话总结:通过监听滚动的高,判断滚动的高是否大于元素距离顶端的距离 1.如何知道屏幕滚动的高? st=$ ...

  5. thinkphp3.1课程 1-2 thinkphp中入口文件的实质是什么

    thinkphp3.1课程 1-2 thinkphp中入口文件的实质是什么 一.总结 一句话总结:在thinkphp中,我们访问的始终是入口文件,并没有主动去访问任何一个其他文件,只不过在入口文件体内 ...

  6. js课程 1-2 js概念

    js课程 1-2  js概念 一.总结 一句话总结:js标签元素也是js对象,有属性和方法,方法就是事件,属性就是标签属性,可以直接调用. 1.js中如何获取标签对象? getElement获取的是标 ...

  7. php面试题12(多态web服务器共享session的方法:将session存到数据库)($val=&$data[$key];)

    php面试题12(多态web服务器共享session的方法:将session存到数据库)($val=&$data[$key];) 一.总结 1.多态web服务器共享session的方法: ...

  8. Andrew Ng机器学习课程12

    Andrew Ng机器学习课程12 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 引言:主要讲述了batch learning和online learnin ...

  9. 石川es6课程---12、Promise

    石川es6课程---12.Promise 一.总结 一句话总结: 用同步的方式来书写异步代码,让异步书写变的特别简单 用同步的方式来书写异步代码Promise 让异步操作写起来,像在写同步操作的流程, ...

  10. 石川es6课程---1-2、ES6简介

    石川es6课程---1-2.ES6简介 一.总结 一句话总结: 从ECMAScript的历史发展来看,太顺了的时候总会遇到一挫折,比如ecma4 1.ECMAScript 和 JavaScript关系 ...

随机推荐

  1. thymeleaf 教程

    html页面 添加  <html xmlns:th="http://www.thymeleaf.org" > html原有标签都可以用thymeleaf标签替换 1.t ...

  2. EChart报表插件使用笔记(1)

    报表插件Echart java类 package com.spring.controller; import java.io.IOException; import java.util.Arrays; ...

  3. 暑假集训-WHUST 2015 Summer Contest #0.2

    ID Origin Title 10 / 55 Problem A Gym 100625A Administrative Difficulties   4 / 6 Problem B Gym 1006 ...

  4. 如何在 Linux 上安装应用程序

    如何在 Linux 上安装应用程序 编译自:https://opensource.com/article/18/1/how-install-apps-linux作者: Seth Kenlon原创:LC ...

  5. Zabbix钉钉小机器人报警

    1.下载钉钉所需要的脚本golang-zabbix-robot-64,浏览器访问https://www.appgao.com/files/192.html: 图一    脚本下载 2.将脚本路径添加到 ...

  6. 机器学习实践:《Python机器学习实践指南》中文PDF+英文PDF+代码

    机器学习是近年来渐趋热门的一个领域,同时Python 语言经过一段时间的发展也已逐渐成为主流的编程语言之一.<Python机器学习实践指南>结合了机器学习和Python 语言两个热门的领域 ...

  7. 超好用的谷歌浏览器、Sublime Text、Phpstorm、油猴插件合集

    原文:超好用的谷歌浏览器.Sublime Text.Phpstorm.油猴插件合集 - 『精品软件区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.c ...

  8. Hello World (记事本+命令行)

    读完这篇博客.你将对下面几点更有心得: - Java 中的当前路径.类路径等概念 - javac.java 命令的综合使用 - jar 包的创建及引用 创建文件夹准备測试源代码 打包外部依赖 Jar ...

  9. bzoj2938【Poi2000】病毒

    2938: [Poi2000]病毒 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 345  Solved: 176 [Submit][Status][ ...

  10. 正确地在QML应用中使用fontsize

    我们知道我们有时须要显示text文本.可是,在QML应用中.我们应该怎样选择font的大小呢?在今天的这篇文章中,我们将展示在Ubuntu平台中的不同文字的大小.我们能够通过FontUtils来帮我们 ...