• php魔术方法


    魔术方法

    PHP所提供的"重载"(overloading)是指动态地"创建"类属性和方法。我们是通过魔术方法(magic methods)来实现的。
    当调用当前环境下未定义或不可见的类属性或方法时,重载方法会被调用。

    1.__get($name)

    class test
    {
        public function __get($name)
        {
            echo $name; //age
        }
    }
    
    $obj = new test();
    
    $obj->age;
    
    

    当调用一个未定义的类属性时,__get()方法将被自动调用,参数是调用的未定义方法的名称.

    2.__set($name, $value)

    class test
    {
        public function __set($name, $value)
        {
            echo $name .'---'. $value;   //age---5
        }
    }
    
    $obj = new test();
    $obj->age = 5;
    

    当给一个未定义的属性赋值的时候,自动调用__set方法,参数是调用的未定义方法的名称和值

    3.__isset($name)

    class test
    {
        public function __isset($name)
        {
            echo $name;
        }
    }
    
    $obj = new test();
    isset($obj->tall);
    

    当一个未定义的属性赋值调用isset的时候,自动调用__isset方法,参数是调用的未定义方法的名称

    4.__unset($name)

    class test
    {
        public function __unset($name)
        {
            echo $name;
        }
    }
    
    $obj = new test();
    unset($obj->tall);
    

    当一个未定义的属性赋值调用__unset的时候,自动调用__unset方法,参数是调用的未定义方法的名称

    5.__call($name, $argument)

    class test
    {
        public function __call($name,  $argument)
        {
            var_dump($name, $argument);  //fun   7
        }
    }
    
    $obj = new test();
    $obj->fun(7);
    

    当调用一个未定义的方法的时候,自动调用__call方法, 参数是调用的函数名和参数

    6.__callStatic($name)

    class test
    {
        public function __callStatic($name,  $argument)
        {
            var_dump($name, $argument);  //fun   7
        }
    }
    
    $obj = new test();
    $obj::fun(7);
    

    当调用一个未定义的静态方法的时候,自动调用__callStatic方法, 参数是调用的函数名和参数

    7.__autoload($className)

    function __autoload($className)
    {
        echo $className;  //test
    }
    
    $obj = new test();
    

    当尝试加载未定义的类,自动调用__autoload方法, 参数是调用的类名

    8.__clone()

    class test
    {
        public function __clone()
        {
           echo "dada";     //dada
        }
    }
    
    $obj = new test();
    $obj1 = clone $obj;
    

    当克隆一个对象的时候,自动调用__clone方法

    9.__toString()

    class test
    {
        public function __toString()
        {
           echo "dada";     //dada
        }
    }
    
    $obj = new test();
    echo $obj;
    

    在将一个对象转化成字符串时自动调用次方法

    10.__invoke()

    class test
    {
        public function __invoke()
        {
           echo "dada";     //dada
        }
    }
    
    $obj = new test();
    $obj();
    

    在将一个对象当作函数调用时,调用次方法

    11.__sleep()

    class test
    {
        public function __sleep()
        {
           echo "dada";
        }
    
    }
    
    $obj = new test();
    serialize($obj);
    

    在将一个对象序列化时

    12.__wakeup()

    class test
    {
        public function __wakeup()
        {
           echo "dada";
        }
    
    }
    
    $obj = new test();
    unserialize($obj);
    

    在将一个对象反序列化时

    13.__set_state()
    调用var_export()导出类时,此静态方法会被调用。

    14.__debugInfo()
    打印所需调试信息

  • 相关阅读:
    charindex使用一个异常记录思考
    真的有命运吗?
    《职道》序言:走向成功从职场细节开始
    迷人的笑容
    导致sql ce数据上传(采用push方法)不成功常见问题
    转篇文章,扫扫盲 《主流数据仓库产品对比分析》
    (转贴)JIRA安装和破解,随便看看吧
    Eclipse快捷键大全(转贴)
    没事在中移动MM商场做了2个应用,分别是运动专家和趣味闹钟
    免费实用微软系统工具集推荐(转)
  • 原文地址:https://www.cnblogs.com/binxyz/p/7441462.html
Copyright © 2020-2023  润新知