Blogger Information
Blog 33
fans 0
comment 0
visits 27677
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
服务端 - PHP - OOP之对象序列化和对象复制、异常处理和匿名类
Original
638 people have browsed it

服务端 - 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 面向对象编程的理解和运用更加深入和熟悉。最主要的知识点是明白和掌握了对象序列化和对象复制、异常类和匿名类的特点以及它们的基本用法。
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
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!