PHP学习——22 PHP面向对象(对象的封装private与__get,__set,__isset,__unset)

<?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
// )
?>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值