zoukankan      html  css  js  c++  java
  • PHP魔术方法GET与SET

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

    代码示例:

    <?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() 也类似 

  • 相关阅读:
    Bit Manipulation
    218. The Skyline Problem
    Template : Two Pointers & Hash -> String process
    239. Sliding Window Maximum
    159. Longest Substring with At Most Two Distinct Characters
    3. Longest Substring Without Repeating Characters
    137. Single Number II
    142. Linked List Cycle II
    41. First Missing Positive
    260. Single Number III
  • 原文地址:https://www.cnblogs.com/ZJBEY/p/7225252.html
Copyright © 2011-2022 走看看