微信扫一扫打赏支持

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  ?>

 

 

 

 

 

 
posted @ 2018-08-05 22:25  范仁义  阅读(375)  评论(0编辑  收藏  举报