zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

PHP方法set 使用 详解 介绍 get __
2023-06-13 09:14:35 时间
先看看php官方文档的解释:
__set()isrunwhenwritingdatatoinaccessibleproperties.
__get()isutilizedforreadingdatafrominaccessibleproperties.

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

有代码有真相:
复制代码代码如下:

<?php
error_reporting(E_ALL);
classstu{
private$a;
private$b=0;
public$c;
public$d=0;
//这里的private可以用protectedpublic替代
privatefunction__get($name){
return123;
}

//这里的private也可以用protectedpublic替代
privatefunction__set($name,$value){
echo"Thisissetfunction";
}
}
$s=newstu();
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:Thisissetfunction
$s->c=3;//nooutput
$s->f=3;//output:Thisissetfunction
?>


结果分析:
如果没有__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()也类似