zoukankan      html  css  js  c++  java
  • 20191125PHP抽象类、接口和魔术方法

    抽象类

    不能被实例化,用于其他类的继承。使用abstract(抽象)。抽象方法一定是抽象类,抽象类不一定有抽象方法。

    接口interface是特殊的抽象类。

    eg:

    <?php
    //抽象类
    abstract class person{
     function run(){
      echo "runing………………";
     }
     abstract function start();
    }
    
    class boys extends person{
        function start(){
            echo "子类的方法start";
        }
    }
    
    $a=new boys();
    $a->run();
    
    //接口的编写
    
    interface student{
        function name();
        function study();
    }
    
    class stu implements student{
        function name(){
            echo "姓名";
        }
        function study(){
            echo "学习";
        }
    }
    
    $b=new stu();
    $b->study();
    ==================================================================
    

    魔术方法克隆__clone()。

    <?php
    //对象克隆和魔术方法__clone
    class person{
        var $name;
        var $age;
        var $count=0;
     function __construct($name,$age){
         $this->name=$name;
         $this->age=$age;
     }
     function __clone(){
         $this->count+=1;
     }
     function run(){
      echo $this->name."runing………………";
     }
    }
    $a=new person("小明",23);
    $a->run();
    echo $a->count;
    $b=clone $a;  //克隆对象
    $b->run();
    echo $b->count;
    $c=new person("小花",22);
    echo $c->count;
    $d=clone $b;
    echo $d->count;

    魔术方法__get() __set()

    <?php
    class person{
        private $name;
        private $age;
        function __set($name,$value){
            $this->$name=$value;
            
        }
        function __get($name){
         return $this->$name;
        }
        
    }
    
    $a=new person();
    $a->name="小明";
    echo $a->name; 

    魔术方法__call()、__tostring()

    <?php
    //__call()、__toString()
    class person{
        function __call($name,$v){
            echo "您调用的方法".$name."不存在";
        }
        function __toString(){
          return "我是person类的信息";
        }
    }
    $a=new person();
    $a->run();
    $a->stop();
    echo $a;

     其他的魔术方法:

    __construct(),类的构造函数
    __destruct(),类的析构函数
    __call(),在对象中调用一个不可访问方法时调用
    __callStatic(),用静态方式中调用一个不可访问方法时调用
    __get(),获得一个类的成员变量时调用
    __set(),设置一个类的成员变量时调用
    __isset(),当对不可访问属性调用isset()或empty()时调用
    __unset(),当对不可访问属性调用unset()时被调用。
    __sleep(),执行serialize()时,先会调用这个函数
    __wakeup(),执行unserialize()时,先会调用这个函数
    __toString(),类被当成字符串时的回应方法
    __invoke(),调用函数的方式调用一个对象时的回应方法
    __set_state(),调用var_export()导出类时,此静态方法会被调用。
    __clone(),当对象复制完成时调用
    __autoload(),尝试加载未定义的类
    __debugInfo(),打印所需调试信息

  • 相关阅读:
    五步搞定Android开发环境部署!
    WebBrowser JS回调delphi的方法 (简单通用)
    Delphi根据方法名调用方法
    Delphi TstringList Stringlist的特殊用法
    delphi 获取webbrowser的cookies给Idhttp用
    HttpHelper类登录淘宝联盟并下载淘宝客订单xls
    我的常用笔记(GetAndroid,ADBDemo,GetSJ,GetTB)
    P1025 数的划分
    P1969 积木大赛
    P2038 无线网络发射器选址
  • 原文地址:https://www.cnblogs.com/syqlwyx/p/11926753.html
Copyright © 2011-2022 走看看