魔术方法:系统在特定时机自动调用的方法
常用魔术方法:
1. __get
触发时机:对象在外部访问私有成员或者受保护属性时调用
参数:参数就是属性名
2.__set
触发时机:对象在外部设置私有成员或者受保护属性值时调用
参数:属性名和属性值
3.__unset
触发时机:对象在外部销毁私有成员或者受保护属性时调用
参数:属性名
4.__isset
触发时机:对象在外部判断私有成员或者受保护属性时调用
参数:属性名
5.__construct
触发时机:在创建对象时调用
6.__destruct
触发时机:在销毁对象时调用
7.__toString
触发时机:echo 一个对象时触发
8.__debugInfo
触发时机:var_dump一个对象时触发,需返回一个数组
9.__call
触发时机:调用一个不存在的对象方法时触发
参数:函数名和参数数组
10.__callStatic
触发时机:调用一个不存在的静态方法时触发
参数:函数名和参数数组
11.__sleep
触发时机:在序列化一个对象时使用
返回值:数组,数组写想要序列的成员和属性
12.__wakeup
触发时机:在反序列化一个对象时使用反序列化成功以后,想执行一些初始化方法,可以写到这个函数中
13.__clone
触发时机:在克隆一个对象时使用
在这里面可以对克隆出来的对象的属性做一些操作
14.__autoload(唯一写在类外的魔术方法)
触发时机:new一个对象时,当前脚本没有这个类,就会触发这个方法
参数:该类名的字符串
<?php
class Person{
public $name = '小梅';
protected $sex = '女';
private $age = 18;
public function __get($pro){
/*if($pro=='sex'){
return $this->sex;
}else if($pro=='age'){
return $this->age;
}*/
return $this->$pro;
}
public function __set($pro,$val){
/*if($pro=='sex'){
$this->sex = $val;
}else if($pro=='age'){
$this->age = $val;
}*/
$this->$pro = $val;
}
public function __unset($pro){
unset($this->$pro);
}
public function __isset($pro){
return isset($this->$pro);
}
public function __toString(){
return '个人信息,name:'.$this->name;
}
public function __debugInfo(){
return ['age','name'];
}
public function __call($name,$params){
var_dump($name,$params);
}
public function __sleep(){
return ['name','age'];
}
public function __wakeup(){
$this->name = 'pan';
}
public function __clone(){
echo '<br/>克隆对象中<br/>';
}
}
function __autoload($className){
echo $className.'该类不存在-----';
}
$mei = new Person();
echo $mei->name;
$mei->age = 20;
echo $mei->age;
echo '<br/>';
echo $mei;
$mei->demo(2,3,'ui');
$str = serialize($mei);
echo $str;
$obj = unserialize($str);
echo $obj;
$mei2 = clone $mei;
$dog = new Dog();
?>