• php中的魔术方法总结


    //声明一个类MagicTest

    class MagicTest{

        protected $arr = new array();

    //__set()和__get()

        public function __set($key,$value){

             $arr[$key] = $value;   

        }

        public function __get($key){

             return this->$arr[key];

        }

        public function __isset($name){
            echo "__isset invoked ";
            return false;
        }

        public function __unset($name){
            echo "unsetting property " . $name;
        }

    //__call()和__callStatic()

        public function __call($name, $arguments){

            echo "calling ".$name."with parameters: ".implode(',',$arguments);

        }

        public static function __callStatic($name,$arguments){

             echo "calling static  function: ".$name."with parameters: ".implode(',',$arguments);

        }

    //__tostring()和__invoke()

        public function __tostring(){

        }

        public function __invoke($name){  

        }

    }

    $obj = new MagicTest();

    $obj->val = test;//__set($key,$value)被调用

    echo $obj->val;//__get()被调用

    isset($obj->value);

    empty($obj->value);//isset($name)被调用

    unset($obj->value);//unset($name)被调用

    $obj->runtest(param1,param2);//__call($name,$arguments)被调用

    MagicTest::runtest(param1,param2,param3); //__callStatic($name,$arguments)被调用

    echo $obj; //tostring()被调用

    $obj(param);    //invoke($name)被调用

    $obj2 = clone $obj;//__clone被调用

    魔术方法之属性重载
    1. 在给不可访问属性赋值时,__set() 会被调用。
     2. 读取不可访问属性的值时,__get() 会被调用。
     3. 当对不可访问属性调用 isset() 和empty()时,__isset() 会被调用。
     4. 当对不可访问属性调用 unset() 时,__unset() 会被调用

    __set();

    __get();

     魔术方法之方法重载
     1. 当对象访问不存在的方法名称时,__call()方法会被自动调用
     2. 当对象访问不存在的静态方法名称时,__callStatic()方法会被自动调用

    __call();

    __callStatic();

     魔术方法
     1. 当对象被当做String使用时,__tostring()会被自动调用
     2. 当对象被当成方法调用时,__invoke()会被自动调用

    __tostring()

    __invoke()

     魔术方法之__clone():

  • 相关阅读:
    [堆栈]Linux 中的各种栈:进程栈 线程栈 内核栈 中断栈
    [TI-DSP]sysbios的swi
    [库函数]动态库和静态库优缺点比较
    [S32K]GPIO使用
    [S32K]FreeRTOS使用
    [IC]浅谈嵌入式MCU软件开发之中断优先级与中断嵌套
    [S32K144]多通道ADC使用
    三天搭建博客,包括文章迁移
    网站优化的艺术与科学之实战
    网站优化的艺术与科学之工具和基础知识
  • 原文地址:https://www.cnblogs.com/canfengyiyue/p/4370388.html
Copyright © 2020-2023  润新知