在类中定义的属性为private(私有属性),使用类的时候,对类中属性的读取和赋值操作非常频繁,在PHP5.*版本中,预定义了两个函数“__get()”和“__set()”来获取和赋值其属性。这两个方法非默认存在的,而是我们手工添加到类里面去的,像构造方法__construct()一样,类里面添加了才会存在,当给类中的私有属性赋值时会自动调用__set()方法,获取类中私有属性的时候会自动调用__get()方法。如果成员属性不封装成私有的,对象本身就不会去自动调用这个方法。
在php中内置了一些特书的方法,这些特殊方法被称之为魔术方法,其也有特殊的命名规则,以“__”双下划线开头的方法和函数名,所以我们自定义的函数不应该用双下划下开头,目的是为了区分魔术方法。
__construct(), __autoload(),__destruct(), __call(), __callStatic(), __get()
, __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() 和 __debugInfo() 等方法在 PHP 中被称为魔术方法(Magic methods)。在命名自己的类方法时不能使用这些方法名,除非是想使用其魔术功能。
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
转载注明:
感谢博主,喝杯咖啡~
感谢博主,喝杯咖啡~
还没有人发表评论