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

    看代码:

    
    <?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
    ?>
    

    由代码可以知道,

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

    应用,定义配置变量,

    public $ossClient,$bucket;
    protected $config =   array(
        'maxSize'           =>  -1,    // 上传文件的最大值
        'allowExts'         =>  array(),    // 允许上传的文件后缀 留空不作后缀检查
        'allowTypes'        =>  array(),    // 允许上传的文件类型 留空不做检查    
        'savePath'          =>  '',// 上传文件保存路径
        'saveRule'          =>  'uniqid',// 上传文件命名规则
        'hashType'          =>  'md5_file',// 上传文件Hash规则函数名
        );
    
    public function __get($name){
        if(isset($this->config[$name])) {
            return $this->config[$name];
        }
        return null;
    }
    
    public function __set($name,$value){
        if(isset($this->config[$name])) {
            $this->config[$name]    =   $value;
        }
    }
    
    public function __isset($name){
        return isset($this->config[$name]);
    }
        
    

    上面的public属性不会调用到魔法方法,
    配置中的一些变量,则会调用到魔法方法。

    这种机制对于配置设置还是很有帮助的。

  • 相关阅读:
    休息一会。。。。。。
    iPhone开发之webview 拖动和显示本地图片的几组代码
    Android 防止手机休眠
    Android数据存储SQLite 事务操作
    解决png图片在IE6下的透明问题
    教你如何在博客园放“可运行"代码
    弹出层原理
    右键集成JS文件压缩 YUI Compressor
    原来window.event快达到全浏览器支持了
    QWrap入门指南
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/5411403.html
Copyright © 2011-2022 走看看