__get()用来获取私有属性值,__set()设置私有属性值




注释:以下代码如果不加上 __get()和__set()方法,程序就会出错,因为不能在类的外部操作私有成员,加上__get()和__set()方法来帮助我们直接存取封装的私有成员的。




代码示例:



<?php
 
 
class 
  Person
 
 
{
 
 
//私有属性
 
 
private $ 
  name 
  ;       
  // 
  人的名子
 
 
private $ 
  sex 
  ;        
  // 
  人的性别
 
 
private $ 
  age 
  ;        
  // 
  人的年龄
 
 
//__get() 
  方法用来获取私有属性
 
 
private function 
  __get($name)
 
 
{
 
 
echo 
  "获取私有属性值时候,自动调用了这个__get()方法<br>";
 
 
if 
  ( 
  isset 
  ( 
  $ 
  this 
  -> 
  $ 
  property_name 
  ))
 
 
{
 
 
return 
  ( 
  $ 
  this 
  -> 
  $ 
  property_name 
  );
 
 
}
 
 
else
 
 
{
 
 
return 
  ( 
  NULL 
  );
 
 
}
 
 
}
 
 
//__set() 
  方法用来设置私有属性
 
 
private function 
  __set($name, $value)
 
 
{
 
 
echo 
  "设置私有属性值时会自动调用__set()方法为私有属性赋值<br>";
 
 
$ 
  this 
  -> 
  $ 
  property_name 
  = $value;
 
 
}
 
 
}
 
 
$ 
  p1 
  = 
  new 
  Person();
 
 
// 
  为私有属性赋值的会自动调用 
  __set() 
  方法
 
 
$ 
  p1 
  ->name= 
  "乐杨俊" 
  ;
 
 
$ 
  p1 
  ->sex= 
  " 
  男 
  " 
  ;
 
 
$ 
  p1 
  ->age= 
  26 
  ;
 
 
// 
  获取私有属性值会自动调用 
  __get() 
  方法
 
 
echo 
  "姓名:".$p1->name."<br>";
 
 
echo 
  "性别:".$p1->sex."<br>";
 
 
echo 
  "年龄:".$p1->age."<br>";
 
 
?>



输出结果:



设置私有属性值时会自动调用__set()方法为私有属性赋值
设置私有属性值时会自动调用__set()方法为私有属性赋值
设置私有属性值时会自动调用__set()方法为私有属性赋值
获取私有属性值时候,自动调用了这个__get()方法
姓名:乐杨俊
获取私有属性值时候,自动调用了这个__get()方法
性别:男
获取私有属性值时候,自动调用了这个__get()方法
年龄:26