PHP面向对象魔术函数__get和__set的用法

154 阅读1分钟

__set() 方法用于设置私有属性值

__get() 方法用于获取私有属性值

php专门提供了属性的设置值和获取值的方法,__set()和__get() 这两个方法,我们在写类的时候写上即可(不写没有)

__set() 方法用来设置私有属性

public function __set($name,$value){
    $this->$name = $value;
}

在类里面使用了 __set() 方法后,当使用 $p1->name = "张三"; 这样的方式去设置对象私有属性的值时,就会自动调用 __set() 方法来设置私有属性的值。

__get() 方法用来获取私有属性

public function __get($name){
    return $this->$name;
}

例子

<?php
class Person {
    private $name;
    private $sex;
    private $age;
    //__set()方法用来设置私有属性
    function __set($property_name, $value) {
        echo "在直接设置私有属性值的时候,自动调用了这个 __set() 方法为私有属性赋值<br />";
        $this->$property_name = $value;
    }
    //__get()方法用来获取私有属性
    function __get($property_name) {
        echo "在直接获取私有属性值的时候,自动调用了这个 __get() 方法<br />";
        return isset($this->$property_name) ? $this->$property_name : null;
    }
}
$p1=new Person();
//直接为私有属性赋值的操作, 会自动调用 __set() 方法进行赋值
$p1->name = "张三";
//直接获取私有属性的值, 会自动调用 __get() 方法,返回成员属性的值
echo "我的名字叫:".$p1->name;
?>

输出

在直接设置私有属性值的时候,自动调用了这个 __set() 方法为私有属性赋值

在直接获取私有属性值的时候,自动调用了这个 __get() 方法

我的名字叫:张三