zoukankan      html  css  js  c++  java
  • 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  ?>
     
  • 相关阅读:
    【MyBatis】Inappropriate OGNL expression
    【java】前补零
    【js】前补零
    【Java】导出excel.xlsx
    【插件】fileinput
    【前端】WebSocket is already in CLOSING or CLOSED state?
    【HTML】input标签添加提示内容
    学习问题记录 -- 对象和引用
    八数码难题
    Java 逻辑运算符 & 与 &&的区别
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9427619.html
Copyright © 2011-2022 走看看