PHP 面向对象基础:__set () 和 __get () 方法 1 个改进

__set()__get() 属于 PHP 中的 魔术方法。在给不可访问的属性赋值时, __set() 会被调用。读取不可访问属性的值时, __get() 会被调用。如果一个类中有保护属性或者私有属性,在类外不能直接赋值和使用,只有通过类中成员函数对它们进行操作,而 __set()__get() 能够实现这样的功能。

class Person{
    // 私有属性人名
    private $name; 

    // 类中成员函数用于私有属性赋值
    public function setName($name){
        $this->name = $name;
    }

    // 类中成员函数用于私有属性获值。
    public function getName(){
        return $this->name;
    }
}
$person = new Person();

//通过成员函数赋值
$person->setName("Michael");

//通过成员函数获值
echo "Name: " . $person->getName() . "<br />";

运行以上代码输出

Name: Michael

__set()__get() 实现

class Person
{
    // 保护属性年龄
    protected $sex;
    // 私有属性性别
    private $age;

    // / __set() 设置不可访问属性值
    public function __set($property, $value)
    {
        echo '外部对象设置不可访问属性值的时候,__set() 魔术方法被自动调用为其赋值' . '<br />';
        $this->$property = $value;
    }

    // __get() 获取不可访问属性值
    public function __get($property)
    {
        echo '外部对象获取不可访问属性值的时候,__get() 魔术方法被自动调用为其获值' . '<br>';
        if (isset($this->$property)) {
            return($this->$property);
        } else {
            return null;
        }
    }
}
$person = new Person();
$person->sex = 'male';
echo 'Gender: ' . $person->sex . '<br />';

运行上述代码输出

外部对象设置不可访问属性的时候,__set() 魔术方法被自动调用为其赋值
外部对象获取不可访问属性的时候,__get() 魔术方法被自动调用为其获值
Gender: male
$person->age = 55;
echo 'Age: ' . $person->age . '<br />';

运行上述代码输出

外部对象设置不可访问属性值的时候,__set() 魔术方法被自动调用为其赋值
外部对象获取不可访问属性值的时候,__get() 魔术方法被自动调用为其获值
Age: 55
本文为 Wiki 文章,邀您参与纠错、纰漏和优化
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!