开发者社区> 桃子红了呐> 正文

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属性不会调用到魔法方法,
配置中的一些变量,则会调用到魔法方法。

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



本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/5411403.html,如需转载请自行联系原作者


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Centos php 扩展方式安装gd库的方法
Centos php 扩展方式安装gd库的方法
63 0
基于PHP方法,微信公众号小程序获取code,access_token,openid,用户信息
基于PHP方法,微信公众号小程序获取code,access_token,openid,用户信息
24 0
PHP 中获取远程文件的三种方法
PHP 中获取远程文件的三种方法
40 0
PHP 判断数组是否为空的方法
PHP 判断数组是否为空的方法
20 0
php中的几种四舍五入取整、向上取整、向下取整、小数截取方法
php中的几种四舍五入取整、向上取整、向下取整、小数截取方法
66 0
ajax前端传多维数组到php后台,关联数组转json到后台方法
ajax前端传多维数组到php后台,关联数组转json到后台方法
18 0
PHP 获取服务器详细信息的原生方法
PHP 获取服务器详细信息的原生方法
26 0
php保留小数点3种方法,number_format,round和sprintf区分
php保留小数点3种方法,number_format,round和sprintf区分
61 0
php生成器的send方法详解,php yield send
php生成器的send方法详解,php yield send
52 0
php-获取图片的3中方法
php-获取图片的3中方法
47 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
PHP安全开发_从白帽角度做安全
立即下载
PHP在机器学习上的应用及云深度学习平台的架构设计与实现
立即下载
PHP与APM_技术内幕和最佳实践
立即下载