博客列表 >__sleep()、__wakeup() 魔术方法与异常处理

__sleep()、__wakeup() 魔术方法与异常处理

雪~人胖胖
雪~人胖胖原创
2020年05月11日 01:11:25878浏览

1. __sleep()与__wakeup()

  1. //__sleep():当序列化的时候自动调用
  2. //__wakeup():当反序列化的时候自动调用
  3. class Product
  4. {
  5. public $name;
  6. private $price,$sum;
  7. public function __construct($name,$price,$sum)
  8. {
  9. $this->name=$name;
  10. $this->price=$price;
  11. $this->sum=$sum;
  12. }
  13. //序列化时自动调用,return array()返回序列化的值
  14. public function __sleep()
  15. {
  16. return array('sum','price');
  17. }
  18. //反序列化时自动调用
  19. public function __wakeup()
  20. {
  21. $this->total=$this->price*$this->sum;
  22. }
  23. }
  24. $product=new Product('手机',1000,3);
  25. $res = serialize($product); //序列化
  26. $str = unserialize($res); //反序列化
  27. printf('<pre>%s</pre>',print_r($str,true));

图例


2.异常处理类

自定义异常类

  1. <?php
  2. class CustomException extends Exception
  3. {
  4. public function __toString()
  5. {
  6. return '错误提醒:'.$this->message.'<br>'.'代码异常:'.$this->code;
  7. }
  8. }
  9. class Custom
  10. {
  11. public $admin;
  12. public function __construct($admin)
  13. {
  14. $this->admin = $admin;
  15. }
  16. }
  17. try
  18. {
  19. $custom = new Custom('12345678qq.com');
  20. if(!filter_var($custom->admin,FILTER_VALIDATE_EMAIL))
  21. {
  22. throw new CustomException('邮箱格式不正确',30);
  23. }else
  24. {
  25. echo '验证成功';
  26. }
  27. }
  28. catch(CustomException $e)
  29. {
  30. echo $e;
  31. }

匿名类

  1. var_dump((new class('user1','123')
  2. {
  3. public $admin,$password;
  4. public function __construct($admin,$password)
  5. {
  6. $this->admin = $admin;
  7. $this->password = $password;
  8. }
  9. }));

总结

了解了如何自定义一个异常, __sleep和__wakeup都用在对象的序列化操作,关于匿名类没有想到什么好的例子,只能写一个最简单的了。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议