PHP类中的__get()和__set函数到底有什么用?
2016-03-13 18:19
573 查看
当试图获取一个不可达变量时,类会自动调用__get。
同样的,当试图设置一个不可达变量时,类会自动调用__set。
在网站中,这两个并不是什么非用不可的函数。
例如:
Class Test
{
private $a = 1;
private $b = 2;
public $c = 3;
public function __get($vname)
{
return "you can not get";
}
public function __set($vname,$value)
{
echo "you can not set";
}
}
$t = new Test;
echo $t->a;//这里试图要打印出私有变量
$t->b=3;//这里试图要把私有变量进行设置
想要直接对私有变量操作,当然是做不到的。
于是在读取的时候,调用__get(),输出“you can not get”;
在设置的时候,调用__set(),输出“you can not set”。
顺便提一下,__get()和__set()函数要设置为public,要不然会Warning。
__get()和__set()函数定义时的参数分别为1个和2个,不管函数中到底有没用,都是不可省略的。
通过修改__get()和__set()函数内部的语句,就可以实现在外部调用类的私有变量。
例如:
private __get($vname)
{
return $this->$vname;
}
如果$vname的值是a,那么就返回了正确的值。
__set()也同理。
public function __set($vname,$value)
{
$this->$vname = $value;
}
同样的,当试图设置一个不可达变量时,类会自动调用__set。
在网站中,这两个并不是什么非用不可的函数。
例如:
Class Test
{
private $a = 1;
private $b = 2;
public $c = 3;
public function __get($vname)
{
return "you can not get";
}
public function __set($vname,$value)
{
echo "you can not set";
}
}
$t = new Test;
echo $t->a;//这里试图要打印出私有变量
$t->b=3;//这里试图要把私有变量进行设置
想要直接对私有变量操作,当然是做不到的。
于是在读取的时候,调用__get(),输出“you can not get”;
在设置的时候,调用__set(),输出“you can not set”。
顺便提一下,__get()和__set()函数要设置为public,要不然会Warning。
__get()和__set()函数定义时的参数分别为1个和2个,不管函数中到底有没用,都是不可省略的。
通过修改__get()和__set()函数内部的语句,就可以实现在外部调用类的私有变量。
例如:
private __get($vname)
{
return $this->$vname;
}
如果$vname的值是a,那么就返回了正确的值。
__set()也同理。
public function __set($vname,$value)
{
$this->$vname = $value;
}
相关文章推荐
- MAMP环境下安装php扩展
- editplus 下载
- php基础速记
- [PHP]常用正则验证专题,以后会不断添加,主要是搜集引用,感谢各路大神!
- 命令上执上执行Yaf
- 网页 PHP 动态师范
- windows server 2008/2012安装php+iis7+mysql环境搭建
- php如何实现验证码
- PHP SQL Server 数据库操作类
- PHP创建与调用MySQL存储过程实例
- PHP 图片处理类(水印、透明度、缩放、相框、锐化、旋转、翻转、剪切、反色)
- Laravel Middleware 中间件笔记
- vim php语法检查
- ftp配置
- [PHP]Smarty模板造成的自动加载函数__autoload失灵问题
- TP-Link 证实为遵守 FCC 规定将禁止安装第三方开源固件
- php反射
- Laravel Routing笔记
- 在ZendStudio中增加新的php模板
- win7下ftp及svn服务器创建