服务器之家

服务器之家 > 正文

详解php的魔术方法__get()和__set()使用介绍

时间:2020-01-12 17:42     来源/作者:PHP教程网

先看看php官方文档的解释: 
__set() is run when writing data to inaccessible properties. 
__get() is utilized for reading data from inaccessible properties. 

究竟用中文怎么翻译呢? 
inaccessible :n. 难达到;难接近;无法理解。 

有代码有真相: 

复制代码代码如下:


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

标签:

相关文章

热门资讯

玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情 2019-06-22
配置IIS网站web服务器的安全策略配置解决方案
配置IIS网站web服务器的安全策略配置解决方案 2019-05-23
Nginx服务器究竟是怎么执行PHP项目
Nginx服务器究竟是怎么执行PHP项目 2019-05-24
返回顶部