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. Java的几个有用小Util函数(日期处理和http)

    /**      * 依据日期返回当前日期是一年的第几天      * @param date      * @return      */     public static int orderDa ...

  2. js实现复选框的操作-------Day41

    不知道之前的一篇为什么一直处于审核阶段.难道有哪个词语是敏感词被河蟹了? 无论了,又一次写了这篇,也算是加深记忆吧. 首先要写的是今天在进行表格数据操作时用到的对复选框checkbox的全选和全不选, ...

  3. C#文件拖放至窗口的ListView控件获取文件类型

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  4. CentOS用rpm升级glibc

    CentOS用rpm升级glibc #! /bin/sh # update glibc to 2.23 for CentOS 6 wget http://cbs.centos.org/kojifile ...

  5. POJ - 3847 Moving to Nuremberg 动归

    POJ - 3847 Moving to Nuremberg 题意:一张无向有权图,包括边权和点权,求一点,使得到其他点的点权*边权之和最小 思路: #pragma comment(linker, & ...

  6. C++中explicit关键字作用

    explicit是c++中不太常用的一个关键字,其作用是用于修饰构造函数,告诉编译器定义对象时不做隐式转换. 举例说明: include <iostream> include <st ...

  7. double和decimal的ToString("#.##")方法使用的是四舍五入;

    顺带提一下: 1. double和decimal的ToString("#.##")方法使用的是四舍五入: 2. 静态类System.Math下的Round(decimal d, i ...

  8. Conventions and patterns for multi-platform development

    For Developers‎ > ‎Design Documents‎ > ‎ Conventions and patterns for multi-platform developme ...

  9. 服务器无法远程管理客户端”计算机配置"解决方法

    1.确认是否可ping 通 如无法ping通, 在入门规则中找到“文件和打印机共享(回显请求-ICMPv4-In)”,设定为启用(配置文件为:域) 2. 打开139端口 1.2在防火墙中设置如下:

  10. vue+ webpack中的animate.css实现的执行多个连续的动画

    1.安装 npm install animate.css 2.使用方法 入口文件App中进行引入 import animate from 'animate.css' 3.多个连续的动画 实现的效果:实 ...