php__get(),__set()方法是什么,怎么用的?

PHP / 1180人浏览 / 0人评论

在类中定义的属性为private(私有属性),使用类的时候,对类中属性的读取和赋值操作非常频繁,在PHP5.*版本中,预定义了两个函数“__get()”和“__set()”来获取和赋值其属性。这两个方法非默认存在的,而是我们手工添加到类里面去的,像构造方法__construct()一样,类里面添加了才会存在,当给类中的私有属性赋值时会自动调用__set()方法,获取类中私有属性的时候会自动调用__get()方法。如果成员属性不封装成私有的,对象本身就不会去自动调用这个方法。

PHP5中的特殊方法

在php中内置了一些特书的方法,这些特殊方法被称之为魔术方法,其也有特殊的命名规则,以“__”双下划线开头的方法和函数名,所以我们自定义的函数不应该用双下划下开头,目的是为了区分魔术方法。

PHP魔术方法有哪些呢?

__construct()__autoload()__destruct()__call()__callStatic()__get()
__set()__isset()__unset()__sleep()__wakeup()__toString()__invoke()__set_state()__clone()__debugInfo() 等方法在 PHP 中被称为魔术方法(Magic methods)。在命名自己的类方法时不能使用这些方法名,除非是想使用其魔术功能。

php__get(),__set()概述

public __set ( string $name , mixed $value ) : void
public __get ( string $name ) : mixed

在类中定义的属性为private(私有属性),使用类的时候,对类中属性的读取和赋值操作非常频繁,在PHP5.*版本中,预定义了两个函数“__get()”和“__set()”来获取和赋值其属性。这两个方法非默认存在的,而是我们手工添加到类里面去的,像构造方法__construct()一样,类里面添加了才会存在,当给类中的私有属性赋值时会自动调用__set()方法,获取类中私有属性的时候会自动调用__get()方法。如果成员属性不封装成私有的,对象本身就不会去自动调用这个方法。

//__set()方法用来设置私有属性
public function __set($name,$value){
$this->$name = $value;
}

//__get()方法用来获取私有属性
public function __get($name){
return $this->$name;
}

php__get(),__set()演示示例

<?php
class Person
{
    //私有属性
    private $user_name;//姓名
    private $sex; //性别
    private $age; //年龄

    //__get()获取私有属性
    public function __get($property)
    {
        echo "程序直接获取私有属性值的时候自动调用__get()方法<br>";
        if (isset($this->$property)) {
            return ($this->$property);
        } else {
            return (NULL);
        }
    }

    //__set()设置私有属性
    public function __set($property, $value)
    {
        echo "程序直接设置私有属性值的时候自动调用__set()方法,且为私有属性$".$property."赋值<br>";
        $this->$property = $value;
    }
}
//实例化私有属性
$p1 = new Person();
$p1->user_name = "小明";//当给私有属性$user_name赋值的时候会调用__set()方法;
$p1->sex  = "女";//当给私有属性$sex赋值的时候会调用__set()方法;
$p1->age  = 22;//当给私有属性$age赋值的时候会调用__set()方法;
echo "姓名:" . $p1->user_name . "<br>";//当给获取私有属性$user_name赋值的时候会调用__get()方法;
echo "性别:" . $p1->sex . "<br>";//当给获取私有属性$sex赋值的时候会调用__get()方法;
echo "年龄:" . $p1->age . "<br>";//当给获取私有属性$age赋值的时候会调用__get()方法;

运行效果如下:

程序直接设置私有属性值的时候自动调用__set()方法,且为私有属性$user_name赋值
程序直接设置私有属性值的时候自动调用__set()方法,且为私有属性$sex赋值
程序直接设置私有属性值的时候自动调用__set()方法,且为私有属性$age赋值
程序直接获取私有属性值的时候自动调用__get()方法
姓名:小明
程序直接获取私有属性值的时候自动调用__get()方法
性别:女
程序直接获取私有属性值的时候自动调用__get()方法
年龄:22

转载注明:

0 条评论

还没有人发表评论

发表评论 取消回复

记住我的信息,方便下次评论
有人回复时邮件通知我