详解php的魔术方法__get()和__set()使用介绍
2023-06-13 09:14:35 时间
先看看php官方文档的解释:
__set()isrunwhenwritingdatatoinaccessibleproperties.
__get()isutilizedforreadingdatafrominaccessibleproperties.
究竟用中文怎么翻译呢?
inaccessible:n.难达到;难接近;无法理解。
有代码有真相:
复制代码代码如下:
__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()也类似
相关文章
- PHP时区设置相差8小时间程序与php.ini配置方法
- [PHP] apache在worker模式配置fastcgi使用php-fpm详解编程语言
- PHP中实现Redis队列的挑战与实践(php队列redis)
- 数据库远程连接MySQL数据库:利用PHP实现简易方法(php远程mysql)
- Linux查看PHP版本的方法简介(linux查看php版本)
- Linux下轻松执行PHP文件的方法(linux执行php文件)
- MySQL中SET使用方法详解(mysql中set作用)
- 利用Redis设置Set值的实现方法(redis设置set值)
- PHP类中Static方法效率测试代码
- php中CI操作多个数据库的代码
- php教程插件机制在PHP中实现方案
- Linux下php连接SQLServer2000数据库的配置方法
- PHP中$_FILES的使用方法及注意事项说明
- php将文本文件转换csv输出的方法
- php实现简单文件下载的方法
- 图解找出PHP配置文件php.ini的路径的方法