PHP魔术方法__GET、__SET使用实例
在 PHP 中,当对象访问不可见或未定义属性时会触发特殊方法,分别是用于读取的 __get() 和用于赋值的 __set()。下面通过一个具体的例子来演示这两个魔术方法的触发时机和使用方式。
准备代码环境
首先定义一个类 Example,包含不同权限控制的属性以及对应的魔术方法实现:
<?php
/**
* 清晰的认识__get() __set()
*/
class Example {
//公有的属性
public $public = 'pub' ;
//受保护的 - 子类中该属性可用
protected $protected = 'pro';
//私有的 - 只能此类使用此属性
private $private = 'pri';
//当访问对象中的属性不存在或者非公有属性的时候自动加载__get()方法
public function __get($name){
return '调用__get()方法:'.$name;
}
//当给对象的一个属性赋值的时候如果该属性不存在或者是非公有属性则自动加载__set()方法
public function __set($name,$value){
echo "\nname:".$name.',value:'.$value."\n";
}
}
测试属性访问
接下来,实例化该对象并尝试访问和修改各个属性:
- 读取公有属性:直接读取
$example->public。 - 读取受保护和私有属性:由于外部不可直接访问,会触发 __get()。
- 读取不存在的属性:如
$example->other,也会触发 __get()。 - 设置非公有或新属性:为
protected、private和非存在的other赋值,均触发 __set()。
完整的测试代码如下:
$example = new Example;
echo '<pre>';
echo $example->public."\n";
echo $example->protected."\n";
echo $example->private."\n";
echo $example->other."\n";
echo '<hr>';
$example->public = 'lic'; //这个赋值成功所有没有显示
$example->protected = 'tec';
$example->private = 'vat';
$example->other = 'er';
echo '<br/>';
echo '打印 public 属性:'.$example->public;
运行结果分析
执行上述代码后,得到的输出结果为:
pub
调用__get()方法:protected
调用__get()方法:private
调用__get()方法:other
name:protected,value:tec
name:private,value:vat
name:other,value:er
打印 public 属性:lic
可以看到:
- 直接输出:
pub是公有属性的原始值;lic是被成功重写的公有属性值。 - __get() 触发:由于
protected、private和other(不存在)在类外部不可直接访问,所以调用了自定义的 __get() 方法,返回了相应的提示信息。 - __set() 触发:对
protected、private和非存在的other进行赋值时,由于不符合公共访问规则,触发了 __set() 方法,输出了属性名和新的值。
总结
在 PHP 开发中,理解并使用 __get() 和 __set() 可以帮助你对对象的属性进行更灵活的管理,比如在数据验证、动态属性映射或简化 API 接口时使用。以上就是 PHP 魔术方法 __get() 和 __set() 的使用实例详细内容,更多关于 PHP 动态属性操作的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









