zoukankan      html  css  js  c++  java
  • 抽象类,接口,魔术方法

    抽象类

      关键字:abstract

      含有抽象方法,(抽象方法必须包含在抽象类里,但抽象类不一定含有抽象方法)。

      抽象方法:未被实现的方法,(加 abstract   ,子类继承必须实现该方法)。

    abstract class Usb{
       public function load(){
          echo "usb is loading";
       }
       abstract public function unload();//抽象方法
    }
    class Upan extends Usb{
        public function unload(){//子类中必须实现父类的抽象方法,否则报错
            echo "usb is unloading";
        }
    }

    接口

      关键字:interface

      只含有抽象方法,不能含有普通方法 (接口中的方法都是抽象方法,所以不用写abstract)

      继承用implements

    //接口
    interface Usb1{
       public function load();
    }
    //接口扩展
    interface Usb2 extends Usb1{//接口也可以继承其他的接口
       public function run();
    }
    class Upan1 implements Usb2{
        public function load(){
            echo "usb is load";
        }
        public function run(){
            echo "usb is run";
        }
    }

    魔术方法:

      __construct  构造方法

      __destruct  析构方法

      __call    当调用不存在或无权访问的方法时,会自动调用该方法

        class Parents{
            //call()必须带两个参数,第一个为调用的不存在的方法名,第二个为方法里的参数 数组。
            public function __call($i,$j){
                echo '不存在'.$i;
                var_dump($j);
            }
        }
        $p1 = new Parents();
        $p1->b('abc');

      

      __get    当调用无权访问的属性时,自动调用该方法

        必须带一个参数,为不存在的属性名

      __set    类中某属性,对象无权操作(即不能设置值)时,自动调用该方法

        必须带两个参数,分别为无权操作的属性名,设置的值。

      __isset   当用isset()判断一个属性或方法存在与否时,自动触发__isset()

        必带一个参数,为变量名

        class Parents{
            private $a;
            public function __isset($i){
                echo'无权判断变量是否存在'.$i;            
            }
        }
        $p1 = new Parents();
        $p2=isset($p1->a);

      __unset    当用unset()删除一个属性或方法时,自动触发__unset()

        必带一个参数,为变量名

      __toString   调用这个类时会执行这个函数,return 输出这个类的说明。

  • 相关阅读:
    Java后端面试题大汇总,冲刺金三银四
    面试官:小伙子,Mybatis的本质和原理说一下
    面试官问:大量的 TIME_WAIT 状态 TCP 连接,对业务有什么影响?怎么处理?
    便捷搭建 Zookeeper 服务器的方法,好用,收藏~
    10 个冷门但又非常实用的 Docker 使用技巧
    mitmproxy 抓包工具(1)
    基于alpine创建Scrapy镜像
    强大的输入框-应用快速启动uTools
    Interceptor、Filter、Servlet的区别
    利用三层判断sql数据库中编码是否已经存在(个人拙作,不喜勿喷)
  • 原文地址:https://www.cnblogs.com/SSs1995/p/9350519.html
Copyright © 2011-2022 走看看