php OOP中的__get和__set方法

2014年9月7日 · 75 字 · 1 分钟

__get,__set光看前面两个下划线就知道是魔术方法了,而且还是PHP OOP中比较重要的方法。

先看一段代码

<?php
class Account{
    private $user = 1;
    private $pwd = 2;
}
$a = new Account();
echo $a->user;
$a->name = 5;
echo $a->name;
echo $a->big;

运行这段代码结果是肯定会报错的!

原因在于,不能访问私有属性user。利用__get和__set改进下这个类

<?php
class Account{
    private $user = 1;
    private $pwd = 2;
    
    public function __set($name,$value){
        $this->name = $value;
    }
    
    public function __get($name){
        if(!isset($this->name)){
            $this->name = '这是默认值';
        }
        return $this->name;
    }
}
$a = new Account();
echo $a->user;
$a->name = 5;
echo $a->name;
echo $a->big;

运行之后就不会报错了。

现在有了这两个魔术方法就可以随时扩展类里面的属性了,是不是很方便呢?