__clone():克隆的时候会调用__clone方法;
__cal:当类里面没有方法的时候会调用__call方法;
__toString:当echo的时候会调用__toString方法;
__autoload:自动加载,当类路径找不到的时候会调用__autoload方法,这个方法很好的解决了需要引用多个include_once的问题;
__sleep():当对象被串行化那一瞬间调用这个函数
__wakeup():将对象进行反串行化的时候调用这个函数
Four类
class Four { public $name; public $age; public function __construct($name,$age) { $this->name = $name; $this->age = $age; } //克隆的时候会调用__clone方法 public function __clone() { $this->age = 0; } //当echo的时候会调用__toString方法 public function __toString() { return "调用toString方法"; } //当类里面没有方法的时候会调用__call方法 function __call($name, $arguments) { return "没有{$name}这个方法,不能这么玩"; } public function show(){ echo "我叫{$this->name},今年{$this->age}"; }
//当对象被串行化那一瞬间
function __sleep()
{
// TODO: Implement __sleep() method.
echo "我要睡着了<br>";
return array('name','age');
}
function __wakeup()
{
echo "我又回来了";
// TODO: Implement __wakeup() method.
}
}
主函数main
//当类路径找不到的时候会调用__autoload方法 function __autoload($name){ $path = $name.".class.php"; include_once $path; } $four = new Four("房明",18); $four2 = clone $four; //此时的$four2调用的是__clone方法,所以此时年龄会变为0 $four->show(); echo "<br>"; $four2->show(); echo "<br>"; echo $four; //$four是一个对象,随意此时调用__toString方法 echo "<br>"; echo $four->score(); //$four里面没有score方法,所以会调用__call方法
//将对象进行串行化
$str1=serialize($five); //此时得到的是__sleep返回的值
file_put_contents("five.txt",$str1);
$str=file_get_contents("five.txt");
//将对象进行反串行化
$obj=unserialize($str);