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

相关文章
|
3月前
|
PHP
PHP中的魔术方法
在PHP的面向对象编程中,魔术方法是一种特殊的方法,它们以双下划线(__)开头。这些方法在特定情况下会被自动调用,例如类的实例化、属性的获取或设置等。本文将介绍PHP中的一些常用魔术方法,并通过示例展示它们的用法。
29 1
|
4月前
|
PHP
PHP中的魔术方法详解
本文将详细介绍PHP中的魔术方法,包括__get、__set、__call、__invoke、__isset、__unset、__toString、__invokeStatic以及__clone。通过实例解析这些方法的用途和用法,帮助读者更好地理解并应用这些魔术方法,提升PHP编程技巧。
|
4月前
|
PHP
PHP中的魔术方法揭秘
本文将深入探讨PHP中的魔术方法,包括__set、__get、__call、__toString等常用魔术方法的用法和原理。通过实例代码演示,帮助读者更好地理解和应用这些魔术方法,提升PHP编程技巧。
|
5月前
|
PHP
PHP __call() 方法的一种妙用
PHP __call() 方法的一种妙用
52 0
|
7月前
|
数据库连接 PHP 开发者
深入理解PHP中的魔术方法
【6月更文挑战第10天】在PHP编程中,魔术方法是一类特殊的成员方法,它们的存在使得对象的行为更加灵活和强大。本文将深入探讨PHP中的魔术方法,包括它们的功能、应用场景以及如何正确使用它们来提升代码的效率和可维护性。
|
7月前
|
PHP 开发者
深入理解PHP的魔术方法
【6月更文挑战第8天】本文将深入探讨PHP中的魔术方法,包括它们的工作原理、常见用法以及如何自定义魔术方法来增强类的功能性。我们将通过实例演示如何在项目中有效利用魔术方法,以及在开发过程中应注意的潜在陷阱。
|
6月前
|
PHP 开发者
PHP中的魔术方法是什么?它们有什么作用?
【7月更文挑战第2天】PHP中的魔术方法是什么?它们有什么作用?
48 0
|
8月前
|
PHP 开发者
PHP魔术方法详解
PHP魔术方法详解
PHP 中的构造函数
PHP 中的构造函数
|
PHP 开发者
PHP的__call() 魔术方法是干什么的?底层原理是什么?
PHP的__call() 魔术方法是干什么的?底层原理是什么?
230 0