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、代码
多态的实例(解决产品山寨问题,判断是否实现了标准(接口))
<?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 多态是什么的更多相关文章
- mysql数据库优化课程---12、mysql嵌套和链接查询
mysql数据库优化课程---12.mysql嵌套和链接查询 一.总结 一句话总结:查询user表中存在的所有班级的信息? in distinct mysql> select * from cl ...
- laravel基础课程---12、lavarel的ajax操作2(lavarel的ajax使用总结)
laravel基础课程---12.lavarel的ajax操作2(lavarel的ajax使用总结) 一.总结 一句话总结: 比较简单:就是js请求ajax,然后控制器获取请求参数,返回数据即可 1. ...
- 妙味css3课程---1-2、css3中新增的伪类和伪元素有哪些
妙味css3课程---1-2.css3中新增的伪类和伪元素有哪些 一.总结 一句话总结: 1.div:target{}是什么意思? 比如a标签的锚点链接到div,div:target{}就可以找到这个 ...
- bootstrap课程12 滚动监听如何实现(bootstrap方式和自定义方式)
bootstrap课程12 滚动监听如何实现(bootstrap方式和自定义方式) 一.总结 一句话总结:通过监听滚动的高,判断滚动的高是否大于元素距离顶端的距离 1.如何知道屏幕滚动的高? st=$ ...
- thinkphp3.1课程 1-2 thinkphp中入口文件的实质是什么
thinkphp3.1课程 1-2 thinkphp中入口文件的实质是什么 一.总结 一句话总结:在thinkphp中,我们访问的始终是入口文件,并没有主动去访问任何一个其他文件,只不过在入口文件体内 ...
- js课程 1-2 js概念
js课程 1-2 js概念 一.总结 一句话总结:js标签元素也是js对象,有属性和方法,方法就是事件,属性就是标签属性,可以直接调用. 1.js中如何获取标签对象? getElement获取的是标 ...
- php面试题12(多态web服务器共享session的方法:将session存到数据库)($val=&$data[$key];)
php面试题12(多态web服务器共享session的方法:将session存到数据库)($val=&$data[$key];) 一.总结 1.多态web服务器共享session的方法: ...
- Andrew Ng机器学习课程12
Andrew Ng机器学习课程12 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 引言:主要讲述了batch learning和online learnin ...
- 石川es6课程---12、Promise
石川es6课程---12.Promise 一.总结 一句话总结: 用同步的方式来书写异步代码,让异步书写变的特别简单 用同步的方式来书写异步代码Promise 让异步操作写起来,像在写同步操作的流程, ...
- 石川es6课程---1-2、ES6简介
石川es6课程---1-2.ES6简介 一.总结 一句话总结: 从ECMAScript的历史发展来看,太顺了的时候总会遇到一挫折,比如ecma4 1.ECMAScript 和 JavaScript关系 ...
随机推荐
- 洛谷 P1302 可见矩形
P1302 可见矩形 题目描述 给定平面上n个互不相交(指公共面积为零)的正方形,它们的顶点坐标均为整数.设坐标原点为O(0, 0).对于任一正方形R,如果可以找到R的边上2个不同的点A和B,使三角形 ...
- Project Euler:Problem 58 Spiral primes
Starting with 1 and spiralling anticlockwise in the following way, a square spiral with side length ...
- android 在短信发送界面, 短信发送失败时,提示音不完整,会被中断
1. 当一条SMS到来, 此时SMS是unseen状态, 就会弹出Notification提示用户 2. 但假设处于同一个联系人的界面下, 用户会立马看到这条SMS, 此时这条SMS会被高速的标记为s ...
- Json 序列化以及反序列化的三种方式(二)
1.什么是JSON? Json[javascript对象表示方法],它是一个轻量级的数据交换格式,我们可以很简单的来读取和写它,并且它很容易被计算机转化和生成,它是完全独立于语言的 2.Json支持下 ...
- selenium无法定位元素问题
在用自动化测试工具selenium完成下载任务时,经常会遇到定位不到元素的情况,总结如下: 1.frame/iframe原因定位不到元素: 这个是最常见的原因,首先要理解下frame的实质,frame ...
- selenium 窗口句柄之间的切换
以前使用selenium时都是在单窗口的模式下,本次新增多窗口下的窗口之间切换 from selenium import webdriver from selenium.webdriver.commo ...
- PHP CURL HTTPS POST
PHP CURL HTTPS POST function vpost($url,$data){ // 模拟提交数据函数 $curl = curl_init(); // 启动一个CURL会话 ...
- 树莓派3b+ wifi无线连接
一.配置文件启动wifi 配置 /etc/network/interfaces 文件实现,但在图形界面上并没有wifi图标可以选择,这种方法不够灵活,后面连接其它的wifi都要去修改配置文件 首先打开 ...
- dlmalloc 2.8.6 源代码具体解释(5)
本文章由vector03原创, 转载请注明出处. 邮箱地址: mmzsmm@163.com, 欢迎来信讨论. 3. 分配及实现 本章节介绍dlmalloc的分配算法和实现.由于存在多mspac ...
- 次世代关卡制作流程:使用Unreal Engine 4
大型3D游戏的关卡(或者说副本.战场)的制作有一些难点,主要是: 要求制作人员有很好的空间感.包含总体布局.对象的比例关系:把握不好的话,不单影响美观.更影响玩家的体验: 关卡制作是一个比較综合的工作 ...