zoukankan      html  css  js  c++  java
  • PHP 魔术方法之__set() __get() 方法

    先看看官方文档的解释

    __set() is run when writing data to inaccessible properties.
    __get() is utilized for reading data from inaccessible properties.

    究竟用中文怎么翻译呢? inaccessible :n. 难达到;难接近;无法理解。
    有代码有真相:

    <?php
    error_reporting(E_ALL);
    class stu{
        private $a;
        private $b = 0;
        public $c;
        public $d = 0;
    
        //这里的 private 可以用 protected public 替代
        private function __get($name) {
            return 123;
        }
    
        //这里的 private 也可以用 protected public 替代
        private function __set($name, $value) {
            echo "This is set function";
        }
    }
    
    $s = new stu();
    
    var_dump($s->a);  //output: 123
    var_dump($s->b);  //output: 123
    var_dump($s->c);  //output: null
    var_dump($s->d);  //output: 0
    var_dump($s->e);  //output: 123
    
    $s->a = 3;   //output: This is set function
    $s->c = 3;  //no output
    $s->f = 3;  //output: This is set function
    ?>

    结果:

    如果没有__get 方法,执行 var_dump(s>a)vardump(s->b) 会有致命的错误
    如果没有__get 方法,执行 var_dump(s>e)noticee
    总结:

    • 从一个难以访问的属性读取数据的时候 __get() 方法被调用
    • 向一个难以访问的属性赋值的时候 __set() 方法被调用
    • 难以访问包括:(1)私有属性,(2)没有初

    参考网址:

    http://www.cnblogs.com/glory-jzx/archive/2012/05/23/2514173.html

  • 相关阅读:
    通知协议KVO的用法
    UIImageView用法
    默默的学习!
    多输入参数的方法
    一本书的摘录
    实例、局部、静态变量(java)
    分数相加的例题
    类的继承
    多线程
    单例
  • 原文地址:https://www.cnblogs.com/yldf/p/11900122.html
Copyright © 2011-2022 走看看