• 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明确销毁对象或脚本结束时被调用;

  • 相关阅读:
    springboot事物和事物回滚
    MyBatis Sql语句中的转义字符
    使用 vagrant新建Linux虚拟机
    Centos 6.7 安装mongodb
    阿里云windows server 2012 TIME_WAIT CLOSE_WAIT
    使用Eclipse打jar包 包含依赖jar包
    linux crontab定时器
    mysql 存储过程学习笔记
    oracle windows 新建用户授权 导出导入bmp文件
    解决hash冲突的方法
  • 原文地址:https://www.cnblogs.com/imnzq/p/6554527.html
Copyright © 2020-2023  润新知