• 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="李四";
    }
  • 相关阅读:
    MySQL查看表占用空间大小(转)
    Nginx搭建flv视频点播服务器
    Nginx SPDY Pagespeed模块编译——加速网站载入
    RAD,V模型
    java运算符的优先级
    union和union all的区别
    java数据的5种存储位置(转)
    java对象的初始化过程和创建对象的几种方式
    java异常的原理以及应用
    缓冲与缓存的概念(转)
  • 原文地址:https://www.cnblogs.com/pandapang/p/6986907.html
Copyright © 2020-2023  润新知