批改状态:合格
老师批语:总结比代码写得好
一、sleep、wakeup有什么用?
php中的 __sleep() 方法常用于提交未提交的数据,或类似的清理操作,与__sleep() 相反,__wakeup() 经常用在反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作。两者都是魔术方法的一种。
<?php
class Emy {
private $name;
private $city;
public function __construct($name,$city) {
$this->name=$name;
$this->city=$city;
}
// 序列化的时候自动调用
public function __sleep() {
return array('name','city');
}
//反序列化的时候自动调用
public function __wakeup() {
$this->what='在学PHP';
}
}
$emy=new Emy('扬扬','foshan');
$str=serialize($emy); //序列化
$emy=unserialize($str); //反序列化
$res=print_r($emy,true);
printf('<pre>%s</pre>',$res);输出结果:

二、php异常处理
异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程。这种情况称为异常。
1-适当的处理异常代码应该包括:
try:监测代码块
catch:捕获异常
throw:抛出异常
finally:无论有无异常都会执行,可以省略
Exception:异常类
2-语法结构:
try{
//检测代码
}catch(Exception $ex){
//捕获异常
}
finally{
//不论是否有异常,都要执行,finally可以省略
}3-实例说明:
<?php
class nameException extends Exception
{
public function errorMessage()
{
echo '你的账号或密码出错';
}
}
// 验证不对时调用这个类
class passException extends Exception
{
public function testMessage()
{
echo '验证错误';
}
}
$user = 111 ;
$password = 888;
$serial = 12;
try{
// 当账号出错时,抛出一个异常
if($user != 11 || $password != 88):
throw new nameException();
// 当验证码出错时,抛出一个异常
elseif ($serial != 102):
throw new passException();
// 当它们都出错时,调用顶级异常类
else:
throw new Exception('当前用户不存在!');
endif;
}
// 通常一个`throw`必须至少对一个`catch`
catch(nameException $a)
{
echo $a->errorMessage();
}
catch(passException $a)
{
echo $a->testMessage();
}
catch(Exception $a)
{
echo $a->getMessage();
}输出结果:
三、总结:学习了什么场景用这个异常处理。看案例知道了一个大概。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号