• 【温故知新】php 魔术方法


    <?php
    class Magic{
        private $name;
        
        /**
        *构造方法,在类被实例化时自动调用,一般用于初始化操作
        */
        public function __construct(){
            echo "自动调用 __construct() 方法
    ";
        }
    
        /**
        *析构方法,对象被销毁时自动调用
        */
        public function __destruct(){
            echo "对象被销毁时调用我 
    ";
        }
    
        /**
        *克隆方法,当对象被克隆时,将会自动调用
        */
        public function __clone(){
            echo "对象被克隆时调用 
    ";
        }
    
        /**
        *属性获取方法,当对象要调用一个被保护或不存在的属性时,__get方法就会自动被调用,并传入调用的属性名称
        */
        public function __get($key){
            echo "你所调用的属性不存在或没有权限访问
    ";
        }
    
        /**
        *属性设置方法,当对象设置一个被保护或不存在的属性时,__set会被执行,并传入要
        *设置的属性名称和属性值,注意这里的设置令对象本身没有发生改变,除非更改操作是发生在__set方法内
        */
        public function __set($key,$value){
            echo "你所设置的属性不存在或没有权限访问
    ";
        }
    
    
        /**
        *当用isset判断一个对象是否有这个属性,并且这个属性是被保护或者不存在时被自动执行,并传入判断的属性名称
        **/
        public function __isset($key){
            echo "属性 {$key} 不存在或被保护 
    ";
        }
    
        /**
        *当用unset删除一个对象的保护属性或未存在的属性时,自动被执行
        **/
        public function __unset($key){
            echo "想要删除的属性 {$key} 不存在或被保护 
    ";
        }
    
        /**
        *当对象在调用一个被保护或不存在的方法时,会自动执行,并传入两个参数$method为方法吗,$arguments为该方法的参数数组
        **/
        public function __call($method,$params){
            echo "您所调用的方法{$method}不存在
    ";
        }
    
        /**
        *当调用了类当中某个被保护或不存在的静态方法时,会自动执行,并传入两个参数$method为方法,$arguments为该方法的参数数组
        **/
        public static function __callStatic($method,$params){
            echo "您所调用的静态方法{$method}不存在
    ";
        }
    
        /**
        *用于一个类被当成字符串时应怎样回应
        */
        public function __toString(){
            return "这是一个对象不能直接输出
    ";
        }
    
        /**
        *当尝试以调用函数的方式调用一个对象时
        */
        public function __invoke($k){
            echo "我是一个对象不是一个函数{$k}
    ";
        }
    
        /**
        *对象被序列化之前调用
        **/
        public function __sleep(){
            echo "对象被序列化之前调用
    ";
        }
    
        /**
        *对象被反序列化之前调用
        **/
        public function __wakeup(){
            echo "对象被反序列化之前调用
    ";
        }
    
    }
    
    $magic = new Magic();
    $magic_clone = clone($magic);
    echo $magic->name;
    $magic->name = "hahaha";
    isset($magic->sex);
    unset($magic->sex);
    $magic->setName();
    Magic::setName();
    echo $magic;
    $magic("mayuan");
    $magic_se = serialize($magic);
    unserialize($magic_se);
  • 相关阅读:
    跳出iframe
    leetcode 225. Implement Stack using Queues
    leetcode 206. Reverse Linked List
    leetcode 205. Isomorphic Strings
    leetcode 203. Remove Linked List Elements
    leetcode 198. House Robber
    leetcode 190. Reverse Bits
    leetcode leetcode 783. Minimum Distance Between BST Nodes
    leetcode 202. Happy Number
    leetcode 389. Find the Difference
  • 原文地址:https://www.cnblogs.com/itsuibi/p/11051936.html
Copyright © 2020-2023  润新知