<?php
// 对象的封装(访问控制),主要时指对象属性的封转,通过private访问控制符
class Stuff
{
private $name; // 姓名
private $age; // 年龄
private $salary; // 薪水
// 1.构造方法使用固定的方法名:__construct()
public function __construct($name,$age,$salary){
// 构造方法:通常用来初始化对象中的属性
$this->name = $name;
$this->age = $age;
$this->salary = $salary;
}
// 2.析构方法:对象销毁时自动调用,没有参数,__destruct()
public function __destruct(){
echo '当前变量被销毁了~';
}
public function getName(){
return $this->name;
}
public function getAge(){
return $this->age;
}
public function getSalary(){
return $this->salary;
}
public function setName($value){
$this->name = $value;
}
public function setAge($value){
$this->age = $value;
}
public function setSalary($value){
$this->salary = $value;
}
}
// 创建一个对象访问类中的属性
$stuffB = new Stuff('Tom',24,5000);
echo '<pre>';
print_r($stuffB);
echo '</pre>';
// Stuff Object
// (
// [name:Stuff:private] => Tom
// [age:Stuff:private] => 24
// [salary:Stuff:private] => 5000
// )
// echo $stuffB->name;
// Cannot access private property Stuff::$name
// 不能访问私有的属性
echo $stuffB->getName().'<br>'; // Tom
echo $stuffB->getAge().'<br>'; // 24
echo $stuffB->getSalary().'<br>'; // 5000
echo '<hr>';
$stuffB->setName('Peter');
echo $stuffB->getName().'<br>'; // Peter
$stuffB->setAge(20);
echo $stuffB->getAge().'<br>'; // 20
$stuffB->setSalary(3000);
echo $stuffB->getSalary().'<br>'; // 3000
// 以上set和get属性的方法实在繁琐,php提供了两个魔术方法以供快速获取私有属性:__set()和__get()
// __get(属性名):外部访问不存在或私有属性时自动调用
// __set(属性名,属性值):外部给类中不存在或不可见属性赋值时自动调用
// __isset():外部检测某私有属性是否存在时,自动调用
// __unset():在类外部销毁某个私有属性时自动调用它
class Employee
{
private $name; // 姓名
private $age; // 年龄
private $salary; // 薪水
// 1.构造方法使用固定的方法名:__construct()
public function __construct($name,$age,$salary){
// 构造方法:通常用来初始化对象中的属性
$this->name = $name;
$this->age = $age;
$this->salary = $salary;
}
// 2.析构方法:对象销毁时自动调用,没有参数,__destruct()
public function __destruct(){
echo '当前变量被销毁了~';
}
public function __get($name){
return $this->$name;
}
public function __set($name,$value){
if($name=='age') return false;
$this->$name = $value;
}
public function __isset($name){
return isset($this->$name);
}
public function __unset($name){
unset($this->$name);
}
}
$employee = new Employee('Tom',24,5000);
$employee->name = 'Peter';
echo $employee->name.'<br>'; // Peter
$employee->age = 22;
echo $employee->age.'<br>'; // 24
$employee->salary = 10000;
echo $employee->salary.'<br>'; // 10000
echo (isset($employee->name)?"存在":"不存在").'<br>';
unset($employee->name);
echo '<pre>';
print_r($employee);
echo '</pre>';
// Employee Object
// (
// [age:Employee:private] => 24
// [salary:Employee:private] => 10000
// )
?>