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(),打印所需调试信息

  • 相关阅读:
    初始FreeMake
    C#三层架构
    文件上传
    Jquery动画效果(混合)
    反射机制
    Java使用Sockt进行通信(2)
    Java使用Socket进行通信
    JavaScript基础
    Java的继承
    事物>视图>索引>备份和恢复
  • 原文地址:https://www.cnblogs.com/syqlwyx/p/11926753.html
Copyright © 2011-2022 走看看