PHP OOP 魔术方法

    1、__construct():构造函数,new一个新对象时,自动调用   

[public] function __construct($name=""){
     $this -> name = $name;
 }

    2、__destruct():析构函数,当一个对象被销毁前,自动调用 

 function __destruct(){
     echo "";
}

    3、__get():访问类中私有属性时,自动调用。传递读取的属性名,返回$this->属性名  

function __get($key){
            switch ($key) {
                case 'name':
                    return $this->$key."(这是__get读取时加上的文字)";
                case 'age':
                    return "0".$this->$key;
                default:
                    return $this->$key;
            }
            return $this->$key;
        }

    4、__set():给类的私有属性赋值时,自动调用。传递需要设置的属性名和属性值

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

    5、__isset():使用isset()检测对象私有属性时,自动调用。传递检测的属性名,返回isset($this->属性名)

         function __isset($name){
            if($name=="sex") return;
            return isset($this->$name);
        }    

    6、__unset():使用unset()删除对象私有属性时,自动调用。传递删除的函数名,方法中执行unset($this->属性名)

        function __unset($name){
            if($name=="name"){
                echo "<span style='color:red;'>哈哈哈哈name你删不掉!</span><br>";
                return;
            } 
            unset($this->$name);
        }

    7、__toString():使用echo打印对象时,自动调用。返回想要在打印对象时显示的内容,返回必须是字符串

        function __toString(){
            $str = <<<str
            您要打印的对象属性如下:<br/>
            $name => {$this->name};<br/>
            $age => {$this->age};<br/>
str;
            return $str;
        }        

    8、__call():调用一个类中未定义或未公开的方法时,自动调用。传递被调用的函数名,和参数列表数组

        function __call($funcName,$funcParams){
            echo "您调用的函数:{$funcName},参数列表";
            print_r($funcParams)
        }
    

    9、__clone():当使用clone关键字克隆一个对象时,自动调用。作用是为新克隆的对象进行初始化赋值

        function __clone(){
            $this->name = "李四";
        }

    10、__sleep():对象反序列化时,自动调用。返回一个数组,数组中的值就是可以序列化的属性

        function __sleep(){
            return array("name","age");  //只有name/age两个属性可以串行化
        }

    11、__wakeup():对象反序列化时,自动调用。为反序列化新产生的对象,进行初始化赋值

        function __wakeup(){
            $this->name = "李四";
        }

    12、__autoload():需要在类外部声明函数。当实例化一个未声明的类时,自动调用。传递实例化的类名,可以使用类名自动加载对应的类文件

    function __autoload($className){
        include strtolower($className).".class.php"
    }
原文地址:https://www.cnblogs.com/c-hl/p/6991057.html