zoukankan      html  css  js  c++  java
  • 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()
    打印所需调试信息

  • 相关阅读:
    java工具类之按对象中某属性排序
    使用 CSS3 实现超炫的 Loading(加载)动画效果
    chrome使用技巧(看了定不让你失望)
    暗影精灵2pro——使用一年多后电池鼓包,传说中的更新BIOS问题(惠普15ax-226tx)
    【转载】 阿里面试后的问题总结
    temporal credit assignment in reinforcement learning 【强化学习 经典论文】
    【转载】 “强化学习之父”萨顿:预测学习马上要火,AI将帮我们理解人类意识
    【PPT】 Least squares temporal difference learning
    【转载】 TensorflowOnSpark:1)Standalone集群初体验
    【转载】 pytorch笔记:06)requires_grad和volatile
  • 原文地址:https://www.cnblogs.com/binxyz/p/7441462.html
Copyright © 2011-2022 走看看