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) var_dump($s->b) 会有致命的错误
    如果没有__get方法,执行 var_dump($s->e) 会有一个notice,提示没有定义属性 $e
    总结:
    1. 从一个难以访问的属性读取数据的时候 __get() 方法被调用
    2. 向一个难以访问的属性赋值的时候 __set() 方法被调用
    3. 难以访问包括:(1)私有属性,(2)没有初始化的属性
    4. __isset() __unset() 也类似 

  • 相关阅读:
    编程与操作系统
    maven环境快速搭建
    Maven那点事儿(Eclipse版)
    几种简单的负载均衡算法及其Java代码实现
    Java集合中那些类是线程安全的
    自己随手的一些知识点
    设计模式(一)—— 策略模式
    Unity Audio Source Properties
    [转载]Web前端和后端之区分,以及面临的挑战
    TestNG 与 Junit的比较(转)
  • 原文地址:https://www.cnblogs.com/moqiang02/p/4061560.html
Copyright © 2011-2022 走看看