博客列表 >服务端 - PHP - OOP之对象序列化和对象复制、异常处理和匿名类

服务端 - PHP - OOP之对象序列化和对象复制、异常处理和匿名类

郴
原创
2020年05月10日 11:51:57640浏览

服务端 - PHP - OOP之对象序列化和对象复制、异常处理和匿名类

一、对象序列化和对象复制

1. 对象序列化

  • 解释:将对象转换成可以存储的字节流
  • 序列化:serialize()
  • 反序列化:unserialize()
  1. //定义一个工作类
  2. class Person {
  3. //初始化赋值
  4. public function __construct(...$args)
  5. {
  6. list($name, $sex, $age) = $args;
  7. $this->name = $name;
  8. $this->sex = $sex;
  9. $this->age = $age;
  10. }
  11. //当类实例被序列化时
  12. public function __sleep()
  13. {
  14. return ['name', 'sex', 'age'];
  15. }
  16. //当对象字符串被反序列化时
  17. public function __wakeup()
  18. {
  19. $this->name = '小红';
  20. $this->sex = '女';
  21. $this->age = 17;
  22. }
  23. }
  24. //客户端代码
  25. $p1 = new Person('小明', '男', 18);
  26. echo serialize($p1);
  27. $str = serialize($p1);
  28. echo '<br>';
  29. var_dump(unserialize($str));

2. 对象复制

  • 解释:生成一个指定对象的副本
  • 定义:clone
  1. //定义一个工作类
  2. class Person {
  3. public $name = '小明';
  4. public $sex = '男';
  5. public $age = 18;
  6. }
  7. //客户端代码
  8. $p1 = new Person;
  9. $p2 = $p1;
  10. $p2->name = '小红';
  11. echo $p1->name;
  12. $p3 = clone $p1;
  13. $p3->age = 17;
  14. echo $p1->age;

二、异常处理

  • 处理语句:try{//可能会出现异常的代码 throw//如何触发异常或抛出异常}catch{//捕获并接收异常,并输出来自该异常的错误信息}
  • 自定义异常类:继承自Exception类
  1. //自定义一个异常类
  2. class SelfException extends Exception {
  3. public function errMess()
  4. {
  5. $errmsg = '过滤失败:含有非法字符';
  6. return $errmsg;
  7. }
  8. }
  9. //定义一个样本
  10. $email = "小明@php.cn";
  11. //处理异常
  12. try {
  13. if (filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {
  14. //触发/抛出异常
  15. throw new SelfException($email);
  16. }
  17. } catch (SelfException $e) {
  18. //捕获/接受异常
  19. echo $e->errMess();
  20. }

三、匿名类

  • 语法:(new class)/(new class(){代码})
  • 特点:1.将实例化与成员访问二合一; 2. 将类,类的实例化,成员访问三合一
  • 作用:该类实例仅被使用一次

1. 实现接口部分功能, 仅用在当前项目中

  1. //定义一个接口
  2. interface iPerson {
  3. public function __construct(...$args);
  4. }
  5. //定义一个匿名类
  6. $name = (new class('小明', '男', 18) implements iPerson {
  7. public function __construct(...$args) {
  8. list($name, $sex, $age) = $args;
  9. $this->name = $name;
  10. $this->sex = $sex;
  11. $this->age = $age;
  12. }
  13. public function getName() {
  14. return $this->name;
  15. }
  16. })->getName();
  17. //客户端代码
  18. echo $name;

2. 用在函数/方法的参数中

  1. //定义一个函数
  2. function getName(object $p1, string $name) {
  3. return $p1->setName($name);
  4. }
  5. //客户端代码
  6. echo getName(new class(){
  7. public function setName($name) {
  8. return $name;
  9. }
  10. },'小明');

四、课程总结

  • 今天学习了 PHP 的面向对象编程,通过上课认真听讲和认真完成老师布置的作业,使得我对 PHP 面向对象编程的理解和运用更加深入和熟悉。最主要的知识点是明白和掌握了对象序列化和对象复制、异常类和匿名类的特点以及它们的基本用法。
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议