Blogger Information
Blog 33
fans 0
comment 0
visits 27673
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
服务端 - PHP - OOP之延迟静态绑定、构造方法和重载
Original
703 people have browsed it

服务端 - PHP - OOP之延迟静态绑定、构造方法和重载

一、延迟静态绑定

  • 解释:将类实例的创建过程上移到它的基类中
  • 语法:static::类成员
  • 特点:由调用者决定绑定的静态继承上下文环境
  • 作用:将类的定义和类的调用分离
  • 场景:动态绑定静态成员的调用上下文
  1. //定义一个基类
  2. class A {
  3. public static $name = '小明';
  4. public static function sayName() {
  5. return '我的名字叫'.static::$name;
  6. }
  7. }
  8. //定义一个扩展类
  9. class B extends A {
  10. public static $name = '小红';
  11. }
  12. //客户端代码
  13. echo B::sayName();//调用B类继承自A类的sayName方法,绑定的是B类的环境

二、构造方法

  • 定义:__construct()
  • 调用:在类的实例化过程中被自动调用
  • 特征:1. 生成一个新对象/类实例;2. 初始化这个新对象:给这个新对象添加属性并赋值,或自动执行某些操作方法;3. 返回这个刚刚创建并初始化的对象
  • 场景:在实例化的时候,使用构造方法自动完成类属性的初始化/赋值
  1. //定义一个工作类
  2. class SetPersonInfo {
  3. function __construct($name, $sex, $age)
  4. {
  5. $this->name = $name;
  6. $this->sex = $sex;
  7. $this->age = $age;
  8. }
  9. }
  10. //客户端代码
  11. $p1 = new SetPersonInfo('小明', '男', 18);
  12. echo $p1->name;
  13. echo $p1->sex;
  14. echo $p1->age;
  15. echo '<br>';
  16. $p1 = new SetPersonInfo('小红', '女', 17);
  17. echo $p1->name;
  18. echo $p1->sex;
  19. echo $p1->age;

三、重载

1. 属性拦截器

  1. //定义一个工作类
  2. class Person {
  3. //定义一个私有属性:用于演示属性查询和检测拦截器
  4. private $name;
  5. //定义一个私有属性:用于演示属性设置和销毁拦截器
  6. private $age;
  7. //初始化$name属性
  8. public function __construct($name)
  9. {
  10. $this->name = $name;
  11. }
  12. //设置属性查询拦截转发器
  13. public function __get($property)
  14. {
  15. //事先约定一些方法用于处理属性访问
  16. $method = 'get' . ucfirst($property);
  17. //转发访问请求
  18. return method_exists($this, $method) ? $this->$method() : null;
  19. }
  20. //处理属性访问的方法1
  21. public function getName() {
  22. return mb_substr($this->name, 0);
  23. }
  24. //处理属性访问的方法2
  25. public function getAge() {
  26. return $this->age;
  27. }
  28. //设置属性设置拦截转发器
  29. public function __set($property, $value)
  30. {
  31. //事先约定一些方法用于处理属性设置
  32. $method = 'set' . ucfirst($property);
  33. //转发访问请求
  34. return method_exists($this, $method) ? $this->$method($value) : null;
  35. }
  36. //处理属性设置的方法
  37. public function setAge($value) {
  38. $this->age = $value;
  39. }
  40. //设置属性检测拦截转发器
  41. public function __isset($property)
  42. {
  43. //返回检测结果
  44. return $property === 'name' ? isset($this->name) : false;
  45. }
  46. //设置属性销毁拦截转发器
  47. public function __unset($property)
  48. {
  49. //进行销毁处理
  50. if ($property === 'age') {
  51. unset($this->age);
  52. }
  53. }
  54. }
  55. //客户端代码
  56. $p1 = new Person('小明');//定义一个对象
  57. echo $p1->name; //访问私有属性触发查询拦截转发器
  58. $p1->age = 18; //设置私有属性触发设置拦截转发器
  59. echo $p1->age; //访问私有属性触发查询拦截转发器
  60. echo isset($p1->name) ? '存在' : '不存在';//检测私有属性触发检测拦截器
  61. unset($p1->age); //删除私有属性触发删除拦截器
  62. echo $p1->age; //访问私有属性触发查询拦截转发器,发现没有值返回

2. 方法拦截器

  1. //定义一个工作类
  2. class Person {
  3. //定义普通方法拦截器
  4. public function __call($name, $arguments)
  5. {
  6. printf('方法名: %s , 参数: [%s]', $name, implode(', ', $arguments));
  7. }
  8. //定义静态方法拦截器
  9. public static function __callStatic($name, $arguments)
  10. {
  11. printf('静态方法名: %s , 参数: [%s]', $name, implode(', ', $arguments));
  12. }
  13. }
  14. //客户端代码
  15. $p1 = new Person();
  16. $p1->getName('小明', '小红', '小王', '小倩');
  17. echo '<br>';
  18. Person::getName('小明', '小红', '小王', '小倩');

四、课程总结

  • 今天学习了 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!