Blogger Information
Blog 9
fans 0
comment 0
visits 7983
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
__sleep()、__wakeup() 魔术方法与异常处理示例
若是梦终会醒
Original
929 people have browsed it

1 __sleep()、__wakeup() 魔术方法

  1. __sleep():当序列化的时候自动调用
  2. __wakeup():当反序列化的时候自动调用

示例:

  1. <?php
  2. class Demo {
  3. private $name;
  4. private $sex;
  5. private $msg='PHP中文网11期';
  6. public function __construct($name,$sex) {
  7. $this->name=$name;
  8. $this->sex=$sex;
  9. }
  10. /**
  11. *序列化的时候自动调用
  12. *@return array 序列化的属性名
  13. */
  14. public function __sleep() {
  15. return array('name','sex');
  16. }
  17. //反序列化的时候自动调用
  18. public function __wakeup() {
  19. $this->type='学员';
  20. }
  21. }
  22. //测试
  23. $demo=new Demo('许先生','男');
  24. $str=serialize($demo); //序列化
  25. $demo=unserialize($str); //反序列化
  26. $res=print_r($demo,true);
  27. printf('<pre>%s</pre>',$res);

效果图:

2 异常处理

集中处理在代码块中发生的异常。

在代码块中发生了异常直接抛出,代码块中不处理异常,将异常集中起来一起处理。

2.1 使用的关键字

  1. try:监测代码块
  2. catch:捕获异常
  3. throw:抛出异常
  4. finally:无论有无异常都会执行,可以省略
  5. Exception:异常类

语法结构

  1. try{
  2. //检测代码
  3. }catch(Exception $ex){
  4. //捕获异常
  5. }
  6. finally{
  7. //不论是否有异常,都要执行,finally可以省略
  8. }

示例:

  1. <?php
  2. if (isset($_POST['button'])) {
  3. try {
  4. $username = $_POST['username'];
  5. if ($username == '')
  6. throw new Exception('用户名不能为空', 1024); //抛出异常
  7. if (preg_match('/[\x{4e00}-\x{9fa5}]/u', $username))
  8. throw new Exception('用户名不能为中文', 1025); //抛出异常
  9. if (!preg_match("/^[^\d\-.,:]/", $username))
  10. throw new Exception('用户名不能以数字和特殊字符开头', 1026); //抛出异常
  11. if (!(strlen($username) >= 3 && strlen($username) <= 12))
  12. throw new Exception('用户名长度只能值3-12之间', 1027); //抛出异常
  13. echo'提交成功您的用户名为', "{$username}", '<br>';
  14. } catch (Exception $ex) { //捕获异常
  15. echo '错误信息:' . $ex->getMessage(), '<br>';
  16. echo '错误码:' . $ex->getCode(), '<br>';
  17. echo '文件地址:' . $ex->getFile(), '<br>';
  18. echo '错误行号:' . $ex->getLine(), '<br>';
  19. } finally {
  20. echo '关闭数据库连接'; //不管是否有异常,finally都要执行
  21. }
  22. }
  23. ?>
  24. <form method="post" action="">
  25. 用户名: <input type="text" name="username" value="<?=@$username ?>"> <br />
  26. <input type="submit" name="button" value="提交">
  27. </form>

效果图:

2.2 自定义异常

场景:如果实现异常的分类处理?比如异常有三个级别异常对应三种处理方式

自定义三种异常即可

所有异常类的父类是Exception,Exception中的方法不允许重写

  1. <?php
  2. //自定义空异常类
  3. class MyNullException extends Exception {
  4. }
  5. //自定义类型异常
  6. class MyTypeException extends Exception {
  7. }
  8. //自定义范围异常
  9. class MyRangeException extends Exception {
  10. }
  11. //逻辑代码
  12. if(isset($_POST['button'])) {
  13. try{
  14. $username = $_POST['username'];
  15. if ($username == '')
  16. throw new MyNullException('用户名不能为空', 1024); //抛出异常
  17. if (preg_match('/[\x{4e00}-\x{9fa5}]/u', $username))
  18. throw new MyTypeException('用户名不能为中文', 1025); //抛出异常
  19. if (!preg_match("/^[^\d\-.,:]/", $username))
  20. throw new MyTypeException('用户名不能以数字和特殊字符开头', 1026); //抛出异常
  21. if (!(strlen($username) >= 3 && strlen($username) <= 12))
  22. throw new MyRangeException('用户名长度只能值3-12之间', 1027); //抛出异常
  23. echo'提交成功您的用户名为', "{$username}", '<br>';
  24. }catch(MyNullException $ex){
  25. echo $ex->getMessage(),'<br>';
  26. echo '错误记录在日志中';
  27. }catch(MyTypeException $ex){
  28. echo $ex->getMessage(),'<br>';
  29. echo '发送电子邮件';
  30. }catch(MyRangeException $ex){
  31. echo $ex->getMessage(),'<br>';
  32. echo '给管理员打电话';
  33. }
  34. }
  35. ?>
  36. <form method="post" action="">
  37. 用户名: <input type="text" name="username" value="<?=@$username ?>"> <br />
  38. <input type="submit" name="button" value="提交">
  39. </form>

效果图:

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:这二个方法, 只与对象序列化相关, 这个功能在与前端验证时可以用到
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post