zoukankan      html  css  js  c++  java
  • php面向对象中的魔术方法

      原创,转载请注明出处

      在 PHP 中以两个下划线开头的方法,__construct(), __destruct (), __call(), __callStatic(),__get(), __set(), __isset(), __unset (), __sleep(), __wakeup(), __toString(), __set_state,() __clone() __autoload()等,被称为"魔术方法"(Magic methods)。注意:这些方法在类中定义

    下面举一个例子:

    class Magic
    {
        public $var = 'test';
    
        private $msg;//详细信息
        private $test ="测试私有属性";
    
        //构造函数,在创建对象的时候被调用
        function __construct()
        {
            echo '__construct called'.PHP_EOL;
            echo "构造函数,在创建对象的时候被调用";
        }
        //析构函数,某个对象在被删除,或者被销毁,调用exit()后,脚本关闭时被调用
        public function __destruct(){
            echo "析构函数,某个对象在被删除,或者被销毁,调用exit()后,脚本关闭时被调用";
        }
        //当给一个不可访问或者不存在的属赋值时候被调用
        public function __set($name,$value){
            echo "__set()当给一个不可访问或者不存在的属性赋值时候被调用,调用的属性为:".$name."要赋值为:".$value;
        }
        //读取不可访问或者不存在属性时被调用
        public  function __get($name){
            return $this->test = "这个是私有属性不能访问赋值后的值";
            echo "__get()读取不可访问或者不存在属性时被调用;要读取的属性为:".$name;
        }
        //调用不可访问或不存在的方法是被调用
        public function __call($name,$arguments){
            echo $name."--".implode(",",$arguments);
            $this->msg = "_call()方法,调用的方法名为:".$name."调用时候传递的参数是一个数组为".$arguments."调用不可访问或不存在的方法是被调用";
            print_r($this->msg) ;
        }
        //调用不可访问或不存在的静态方法是被调用
        static public function __callStatic($name,$arguments){
            $this->msg = "__callStatic()调用名为:".$name."调用时候传递的参数为一个数组为:".$arguments."调用不可访问或不存在的静态方法是被调用";
            print_r($this->msg);
        }
        //调用不可访问或者不存在的属性调用isset()或者empty()时被调用
        public function __isset($name){
            echo "__isset()调用不可访问或者不存在的属性调用isset()或者empty()时候被调用";
        }
    
    
    }
    $obj = new Magic();
    $obj->not_exist_property = test; //__set()被调echo $m->not_exist_property;//__get()被调用
    $obj->not_exist_property;
    echo $obj->test;

    __get,__set

    1. 从一个难以访问的属性读取数据的时候 __get() 方法被调用 
    2. 向一个难以访问的属性赋值的时候 __set() 方法被调用 
    3. 难以访问包括:(1)私有属性,(2)没有初始化的属性 
    4. __isset() __unset() 也类似

    __call,__callStatic

    __call调用不可访问或不存在的方法时被调用
    __callStatic调用不可访问或不存在的静态方法时被调用

    __construct,__destruct

    __constuct构建对象的时被调用;
    __destruct明确销毁对象或脚本结束时被调用;

  • 相关阅读:
    Nginx+uWsgi+Django+Python+MongoDB+mySQL服务器搭建
    Scott Guthrie's Blog on ASP.NET
    NPOI 读写excel
    用C#开发了一个Android 浏览器APP
    Windows 8 应用开发技术资源
    微软发布Sample Browser for Windows 8版:5000示例代码,"触手可及"
    依赖注入
    DIY 一套正版、免费、强大的 Visual Studio 2012 IDE
    基于JQuery EasyUI、Web Api的 ASP.NET MVC 代码生成插件
    深度剖析Byteart Retail案例:AOP 异常处理与缓存
  • 原文地址:https://www.cnblogs.com/imnzq/p/6554527.html
Copyright © 2011-2022 走看看