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

2015-01-24信息快讯网

php的魔术方法__get()和__set()使用介绍,需要的朋友可以参考下

先看看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() 也类似
解析CI的AJAX分页 另类实现方法
Youku 视频绝对地址获取的方法详解
php 在windows下配置虚拟目录的方法介绍
解析php扩展php_curl.dll不加载的解决方法
使用HMAC-SHA1签名方法详解
深入file_get_contents与curl函数的详解
执行、获取远程代码返回:file_get_contents 超时处理的问题详解
解析PHP中的file_get_contents获取远程页面乱码的问题
深入file_get_contents函数抓取内容失败的原因分析
解析func_num_args与func_get_args函数的使用
php empty()与isset()区别的详细介绍
php unset全局变量运用问题的深入解析
解析php curl_setopt 函数的相关应用及介绍
深入PHP empty(),isset(),is_null()的实例测试详解
php set_time_limit()函数的使用详解
PHP+MySQL投票系统的设计和实现分享
php引用计数器进行垃圾收集机制介绍
PHP爆绝对路径方法收集整理
PHP中数组合并的两种方法及区别介绍
关于访问控制的一首PHP面试题(对属性或方法的访问控制)
php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)
PHP输出数组中重名的元素的几种处理方法
PHP setTime 设置当前时间的代码
PhpMyAdmin出现export.php Missing parameter: what /export_type错误解决方法
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
php中3des加密代码(完全与.net中的兼容)
PHP中使用unset销毁变量并内存释放问题
php安全之直接用$获取值而不$_GET 字符转义
PHP fgetcsv 定义和用法(附windows与linux下兼容问题)
MySQL的FIND_IN_SET函数使用方法分享
Notice: Trying to get property of non-object problem(PHP)解决办法
fgetcvs在linux的问题
比file_get_contents稳定的curl_get_contents分享
php读取mysql乱码,用set names XXX解决的原理分享
PHP setcookie指定domain参数后,在IE下设置cookie失效的解决方法
©2014-2024 dbsqp.com