zoukankan      html  css  js  c++  java
  • OOP的魔术方法

    1、构造函数:__construct():

    构造函数是类中的一个特殊函数,当我们使用new关键字实例化对象时,相当于调用了类的构造函数。

    function __construct($name){
        $this -> name = $name;
    }

    2、析构函数:__destruct():

    ①析构函数在对象被销毁释放之前自动调用;
    ②析构函数不能带有任何的参数;
    ③析构函数常用于对象使用完以后,释放资源,关闭资源等。

    function __destruct(){
        echo "over!";
    }

    3、 __set($key,$value):

    给类私有属性赋值时自动调用,调用是给方法传递两个参数:需要设置的属性名、属性值

             function __set($key,$value){
                        if($key=='name'){
                            $this->$key=$value."(这是__set设置的文字!)";
                            return;
                        }
                    }

    4、 __get($key):

    给获取类私有属性时自动调用,调用是给方法传递一个参数:需要获取的属性名

               function __get($key){
                        return $this->$key;
                    }            

    5、 __isset($key):

    外部使用isset()函数检测私有属性时,自动调用。
     >>>类外部使用isset();检测私有属性,默认检测不到(false)
     >>>所以,我们可以使用__isset()函数,在自动调用时,返回内部检测结果

    function __isset($key){
      return isset($this->$key);
    }

     当外部使用isset($对象名->私有属性);检测时,将自动调用上述__isset()返回的结果!

    6、 __unset($key):

    外部使用unset()函数删除私有属性时,自动调用;

    function __unset($key){
       unset($this->$key);
    }

     当外部使用unset($对象名->私有属性);删除属性时,自动将属性名传给__unset(),并交由这个魔术方法处理

    7、__clone:

     ① 当使用clone关键字,克隆对象时,自动调用clone函数
     ② __clone()函数类似于克隆是使用的构造函数,可以给新克隆对象赋初值
     ③ 克隆函数里面的$this指的是新克隆的对象

      class Person{
            public $name;
            public $age;
            function __construct($name,$age){
                $this->name=$name;
                $this->age=$age;
            }
            function __clone(){$this->name="李5";
            }
            
        }
        $zhangsan=new Person("张三",14);
        $lisi=clone $zhangsan;

    8、__tostring()

     当使用echo等输出语句,直接打印对象时,调用 echo $zhangsan;那么, 可以指定__tostring()方法的返回值,返回值需要是字符串。
     则使用echo函数打印时,将会打印出__tostring()函数返回的字符串

    function __tostring(){
      return "hahaha";
    }
    echo $zhangsan;

    9、__call()

     调用类中未定义或未公开的方法时,会自动执行__call()方法,自动执行时,会给call方法传递两个参数:
    ① 调用的方法名
    ② (数组)调用的方法的参数列表

         function __call($funcName,$funcParams){
                echo "{$funcName}<br>";
                print_r($funcParams);
            }

    10、__autoload()

    ① 这是唯一一个不在类中使用的魔术方法
    ② 当实例化一个不存在的类时,自动调用这个魔术方法
    ③ 调用时,会自动给__autoload()传递一个参数:实例化的类名
    所以,可以实现 使用这个方法,自动加载类文件的功能:

    function __autoload($className){
      include strtolower($className).".class.php"
    }
    $zhangdan=new Person("战三"); 
    //本文件没有Person类,会自动执行__autoload加载person.class.php文件

    11、__sleep():

    ① 当执行对象串行化(将对象通过一系列操作,转化为字符串的过程,称为串行化)的时候,会自动执行__sleep()函数;
    ② __sleep()函数要求返回一个数组,数组中的值,就是可以串行化的属性, 不在数组中的属性,不能被串行化。

    function __sleep(){
      return array("name","age");
    }

    12、__wakeup()

    ① 当反串行化对象时,自动调用__wakeup()方法;
    ② 自动调用时,用于给反串行化产生的新对象的属性,进行重新赋值;

    function __wakeup(){
      $this->name="李四";
    }
  • 相关阅读:
    hdu 5723 Abandoned country 最小生成树 期望
    OpenJ_POJ C16G Challenge Your Template 迪杰斯特拉
    OpenJ_POJ C16D Extracurricular Sports 打表找规律
    OpenJ_POJ C16B Robot Game 打表找规律
    CCCC 成都信息工程大学游记
    UVALive 6893 The Big Painting hash
    UVALive 6889 City Park 并查集
    UVALive 6888 Ricochet Robots bfs
    UVALive 6886 Golf Bot FFT
    UVALive 6885 Flowery Trails 最短路
  • 原文地址:https://www.cnblogs.com/pandapang/p/6986907.html
Copyright © 2011-2022 走看看