zoukankan      html  css  js  c++  java
  • 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():

  • 相关阅读:
    Unable to satisfy the following requirements解决方式
    零基础学python》(第二版)
    mysql 更新数据表的记录
    mysql创建数据库和删除数据库
    正则表达式
    python lambda函数详细解析(面试经常遇到)
    Linux 命令 统计进程数目
    Python 时间戳与时间字符串互相转
    python 安装配置(windows)
    linux 系统 tar 的用法详解
  • 原文地址:https://www.cnblogs.com/canfengyiyue/p/4370388.html
Copyright © 2011-2022 走看看