php面向对象魔术方法笔记

<?php

//魔术方法

//__get方法:当程序员去使用不可访问的属性时;系统就会调用__get方法 //不可访问的属性是指:该属性不存在;直接访问了protected或者private属性 //__set方法:当程序员去给不可访问的属性赋值时系统会去调用__set方法 //示例: header('content-type:text/html;charset=utf8'); echo '

';
class Monkey{
	public $name;
	protected $food;
	public function __construct($name,$food){
		$this->food = $food;
		$this->name = $name;
	}
//	魔术方法__get
//	__get和后面的pro_name形参为固定的不可更改
//	通过__get取出protected或者private里面的
	public function __get($pro_name){
		echo '
pro_name:'.$pro_name; // 写法如下 // 通过property_exists()方法用于检测有无此属性 if(property_exists($this,$pro_name)){ return $this->$pro_name; }else{ return '没有这个属性无法返回!'; } } // __set魔术方法改变受保护属性值 public function __set($pro_name,$pro_val){ echo '
'.$pro_name; echo '
'.$pro_val; // 通过property_exists()方法用于检测有无此属性 if(property_exists($this,$pro_name)){ $this->$pro_name = $pro_val; }else{ return '没有这个属性无法修改!'; } } } //创建一个monkey1 $monkey1 = new Monkey('孙悟空','蟠桃','30'); echo '
猴子的名字是:'.$monkey1->name; //如果想直接取出protected和private里面的 echo '
猴子的食物是:'.$monkey1->food; //__set魔术方法 //修改猴子的食物和名字 $monkey1->name = '野猴子'; $monkey1->food = '苹果'; var_dump($monkey1); //__isset和__unset魔术方法 //当对不可访问的属性进行了isset($对象名->属性名)或者empty($对象名->属性)操作;那么__isset函数就会被调用 //当对不可访问的属性进行了unset($对象名->属性名)那么__unset函数就会被调用 //unset是直接销毁的变量 //案例: echo '
'; class Cat{ public $name; private $food; public function __construct($name,$food){ $this->food = $food; $this->name = $name; } // 执行__set魔术方法将避免下面的age成员属性的重载;如果不添加这个魔术方法age属性将会被动态的添加给$cat对象 public function __set($pro_name,$pro_val){ } } $cat1 = new Cat('张三','鸡肉'); var_dump($cat1); $cat1 ->age = '20'; var_dump($cat1);
页面输出:

猜你喜欢

转载自www.cnblogs.com/lxc-bky/p/9817463.html
今日推荐