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

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,如需转载请自行联系原作者


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

相关文章
树莓派4b入手(上篇)
不就是一台微型计算机. 恰好10.28作为🎂送给自己. 反正也就我☝️人. 树莓派需要资源: 电源(+电源线请选择5V 3A的电源+USB TypeC的数据线), 安装了树莓派系统的SD卡, 外壳 额外资源: 键鼠套装, 用于连接的显示屏的屏和线 机型选择: 最新的4b, 低配版1G
7 0
iOS Mac本地搭建Apache服务器
iOS Mac本地搭建Apache服务器
6 0
一把王者的时间,我就学会了Nginx
Nginx("engine x") 是一个高性能的 HTTP 和反向代理服务器,特点是占有内存少,并发能力强,事实上 nginx 的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用 nginx 网站用户有:百度、京东、新浪、网易、腾讯、 淘宝等。
5 0
中文文案排版指北
統一中文文案、排版的相關用法,降低团队成员之间的沟通成本,增強網站气质。 Other languages:
4 0
史上最全的文档地址列表
周末花了两天时间收集了几百个网站的文档地址,类型从前端到后端全部覆盖了,还有一些热门的技术,也添加进来了
8 0
在Ubuntu18.04上搭建博客
在Ubuntu18.04上,用Apache、MariaDB和Wordpress搭建个人博客
101 0
2021年最有用的数据清洗 Python 库
2021年最有用的数据清洗 Python 库
8 0
适合个人搭建博客网站的WordPress免费开源主题汇总
适合个人搭建博客网站的WordPress免费开源主题汇总
13 0
4269
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载