9.__unset() 当对一个未声明或者访问级别受限的成员属性调用unset函数时调用此函数,共用户做一些操作
10.__toString()函数 该函数在将对象引用作为字符串操作时自动调用,返回一个字符串
<?php
//初始化一个类
class Phone{
//类的成员属性
private $brand;
private $model;
private $price;
//构造函数
function __construct($pbrand,$pmodel,$pprice){
$this->brand=$pbrand;
$this->model=$pmodel;
$this->price=$pprice;
}
//魔术方法__toString()
function __toString(){
return "{$this->brand} {$this->model} {$this->price}";//可以自定义操作但必须要返回一个字符串结果
}
}// the end of class
//实例化一个对象
$p=new Phone('Google','Nexus One',4200);
//如果没有在类中使用__toString函数则报错Catchable fatal error: Object of class Phone could not be converted to string
//如果在类中使用了__toString函数,则把对象当字符串输出时,执行__toString函数操作
echo $p;
?>
11.__sleep()函数 该函数是在序列化时自动调用的,序列化这里可以理解成将信息写如文件中更长久保存
<?php
//初始化一个类
class User{
//类的成员属性
private $name;
private $age;
private $sex;
//构造函数
function __construct($pname,$page,$psex){
$this->name=$pname;
$this->age=$page;
$this->sex=$psex;
}
//设置魔术方法__sleep()
/*
功能:返回一个数组,选择是全部序列化还是部分成员属性序列化,如果没有该函数就表示全部序列化
在序列化的时候自动调用这个方法
*/
function __sleep(){
return array('name'); //返回一个只序列化name属性的数组
}
}//the end of the class
$u=new User('Androidyue',22,'Man');//实例化一个对象
file_put_contents('notepad1.txt',serialize($u));//序列化$u对象并且将信息存放在notepad1.txt文件中
?>
12.__wakeup()函数 该魔术方法在反序列化的时候自动调用,为反序列化生成的对象做一些初始化操作
<?php
//初始化一个类
class User{
//类的成员属性
private $name;
private $age;
private $sex;
//构造函数
function __construct($pname,$page,$psex){
$this->name=$pname;
$this->age=$page;
$this->sex=$psex;
}
//设置魔术方法__sleep()
/*
功能:返回一个数组,选择是全部序列化还是部分成员属性序列化,如果没有该函数就表示全部序列化
在序列化的时候自动调用这个方法
*/
function __sleep(){
return array('name'); //返回一个只序列化name属性的数组
}
function __wakeup(){
$this->name='Yue';
//$this->age=23;
}
}//the end of the class
$u=new User('Androidyue',22,'Man');//实例化一个对象
//file_put_contents('notepad1.txt',serialize($u));//序列化$u对象并且将信息存放在notepad1.txt文件中
//获取序列化的文件信息
$str=file_get_contents('notepad1.txt');
//对文件进行反序列化
$uu=unserialize($str);
//输出对象的信息
var_dump($uu);//结果:object(User)#2 (3) { ["name:private"]=> string(3) "Yue" ["age:private"]=> NULL ["sex:private"]=> NULL }
?>
13.当调用var_export()时,这个静态 方法会被调用(自PHP 5.1.0起有效)。本方法的唯一参数是一个数组,其中包含按array(’property’ => value, …)格式排列的类属性。
<?php
class Author{
public $name;
public $works;
public static function __set_state($arr){
$a=new Author();
$a->name=$arr['name'];
$a->works=$arr['works'];
return $a ;
}
}
$a = new Author();
//对成员属性赋值,当然通常我们不建议这样赋值(即将成员属性设置成public直接赋值)
$a->name='Androidyue';
$a->works='PHP codes';
//执行一个语句
eval('$b = ' . var_export($a, true) . ';');//这样是$b 为对象类型
//$b=var_export($a,true);//这样会是$b 为字符串
var_dump($b);
?>
14.__invoke
当尝试以调用函数的方式调用一个对象时,__invoke 方法会被自动调用。
PHP5.3.0以上版本有效,我的php版本为5.2.12,暂不支持,因此无法演示。
15.__callStatic
它的工作方式类似于 __call() 魔术方法,__callStatic() 是为了处理静态方法调用,
PHP5.3.0以上版本有效 我的php版本为5.2.12,暂不支持,因此无法演示。
PHP 确实加强了对 __callStatic() 方法的定义;所作用的函数必须是公共的,并且必须被声明为静态的。同样,__call() 魔术方法必须被定义为公共的,所有其他魔术方法都必须如此。