Blogger Information
Blog 33
fans 0
comment 0
visits 27698
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
服务端 - PHP - OOP之接口
Original
656 people have browsed it

服务端 - PHP - OOP之接口

一、概述

  • 语法:interface 接口名;
  • 描述:对外公开的、能够进行顶层设计的特殊类
  • 特点:访问控制必须是public
  • 作用:完全分离设计与实现

二、接口成员

  • 接口常量:const 常量名;
  • 接口方法:接口中的抽象方法,必须在工作类实现;
  • 构造方法:魔术方法中的一种,由系统根据一定的条件或用户行为,自动调用/触发,禁止用户主动调用
  • 构造方法场景:在类实例化的时候,使用构造方法自动完成类属性的初始化/赋值

三、实现

1. 单接口

  1. //定义一个接口
  2. interface iSetPseronInfo {
  3. //设置
  4. public static function setInfo($name, $sex, $age);
  5. //新增
  6. public function addData(array $data);
  7. //更新
  8. public function upData($source, $nvalue);
  9. //查询
  10. public function queData($seaValue);
  11. //删除
  12. public function delData($seaValue);
  13. }
  14. //定义一个实现类
  15. class SetPseronInfo implements iSetPseronInfo
  16. {
  17. //定义一个空数组用来存储数据
  18. public static $personInfo = [];
  19. //设置
  20. public static function setInfo($name, $sex, $age)
  21. {
  22. array_push(self::$personInfo, array($name, $sex, $age));
  23. }
  24. //新增
  25. public function addData(array $data)
  26. {
  27. array_push(self::$personInfo, $data);
  28. }
  29. //更新
  30. public function upData($source, $nvalue) {
  31. foreach (self::$personInfo as &$value) {
  32. $key = array_search($source, $value);
  33. foreach ($value as $key1 => $ovalue) {
  34. if ($key1 === $key) {
  35. $value[$key1] = $nvalue;
  36. }
  37. }
  38. }
  39. }
  40. //查询
  41. public function queData($seavalue) {
  42. foreach (self::$personInfo as &$value) {
  43. $key = array_search($seavalue, $value);
  44. foreach ($value as $key1 => $ovalue) {
  45. if ($key1 === $key) {
  46. return array_slice($value, $key1);
  47. }
  48. }
  49. }
  50. }
  51. //删除
  52. public function delData($svalue) {
  53. foreach (self::$personInfo as $value) {
  54. if (in_array($svalue, $value)){
  55. $key = array_search($value, self::$personInfo);
  56. unset(self::$personInfo[$key]);
  57. }
  58. }
  59. }
  60. }
  61. //客户端代码
  62. //设置
  63. SetPseronInfo::setInfo('小明', '男', 18);
  64. printf('<pre>1. 设置后此时的数据为<br>%s</pre>', print_r(SetPseronInfo::$personInfo, true));
  65. //新增
  66. (new SetPseronInfo)->addData(['小红', '女', 17]);
  67. (new SetPseronInfo)->addData(['小王', '男', 19]);
  68. (new SetPseronInfo)->addData(['小倩', '女', 18]);
  69. printf('<pre>2. 新增后此时的数据为<br>%s</pre>', print_r(SetPseronInfo::$personInfo, true));
  70. //更新
  71. (new SetPseronInfo)->upData('小红', '小雪');
  72. printf('<pre>3. 更新后此时的数据为<br>%s</pre>', print_r(SetPseronInfo::$personInfo, true));
  73. //查询
  74. printf('<pre>4. 查询的数据为<br>%s</pre>', print_r( (new SetPseronInfo)->queData('小雪'), true));
  75. //删除
  76. (new SetPseronInfo)->delData('小王');
  77. printf('<pre>5. 删除后此时的数据为<br>%s</pre>', print_r(SetPseronInfo::$personInfo, true));


2. 多继承

  1. //定义第一个接口
  2. interface iSetPersonInfo {
  3. //设置
  4. public static function setInfo($name, $sex, $age);
  5. }
  6. //定义第二个接口
  7. interface iCRUD {
  8. //新增
  9. public function addData(array $data);
  10. //更新
  11. public function upData($source, $nvalue);
  12. //查询
  13. public function queData($seaValue);
  14. //删除
  15. public function delData($seaValue);
  16. }
  17. //定义第三个接口继承自第一和第二个接口
  18. interface iPerson extends iSetPersonInfo, iCRUD {}
  19. //定义一个实现类
  20. class Pseron implements iPerson {
  21. //定义一个空数组用来存储数据
  22. public static $personInfo = [];
  23. //设置
  24. public static function setInfo($name, $sex, $age)
  25. {
  26. array_push(self::$personInfo, array($name, $sex, $age));
  27. }
  28. //新增
  29. public function addData(array $data)
  30. {
  31. array_push(self::$personInfo, $data);
  32. }
  33. //更新
  34. public function upData($source, $nvalue) {
  35. foreach (self::$personInfo as &$value) {
  36. $key = array_search($source, $value);
  37. foreach ($value as $key1 => $ovalue) {
  38. if ($key1 === $key) {
  39. $value[$key1] = $nvalue;
  40. }
  41. }
  42. }
  43. }
  44. //查询
  45. public function queData($seavalue) {
  46. foreach (self::$personInfo as &$value) {
  47. $key = array_search($seavalue, $value);
  48. foreach ($value as $key1 => $ovalue) {
  49. if ($key1 === $key) {
  50. return array_slice($value, $key1);
  51. }
  52. }
  53. }
  54. }
  55. //删除
  56. public function delData($svalue) {
  57. foreach (self::$personInfo as $value) {
  58. if (in_array($svalue, $value)){
  59. $key = array_search($value, self::$personInfo);
  60. unset(self::$personInfo[$key]);
  61. }
  62. }
  63. }
  64. }
  65. //客户端代码
  66. //设置
  67. Pseron::setInfo('小明', '男', 18);
  68. printf('<pre>1. 设置后此时的数据为<br>%s</pre>', print_r(Pseron::$personInfo, true));
  69. //新增
  70. (new Pseron)->addData(['小红', '女', 17]);
  71. (new Pseron)->addData(['小王', '男', 19]);
  72. (new Pseron)->addData(['小倩', '女', 18]);
  73. printf('<pre>2. 新增后此时的数据为<br>%s</pre>', print_r(Pseron::$personInfo, true));
  74. //更新
  75. (new Pseron)->upData('小红', '小雪');
  76. printf('<pre>3. 更新后此时的数据为<br>%s</pre>', print_r(Pseron::$personInfo, true));
  77. //查询
  78. printf('<pre>4. 查询的数据为<br>%s</pre>', print_r( (new Pseron)->queData('小雪'), true));
  79. //删除
  80. (new Pseron)->delData('小王');
  81. printf('<pre>5. 删除后此时的数据为<br>%s</pre>', print_r(Pseron::$personInfo, true));


3. 多态编程

  1. //定义一个用户查询接口
  2. interface iUser {
  3. //定义构造方法:用于初始化对象属性
  4. public function __construct(...$params);
  5. //定义抽象方法:用于获取用户信息
  6. public function getUserInfo ();
  7. }
  8. //定义第一个实现类:获取普通用户的信息
  9. class ComUser implements iUser {
  10. //定义一个受保护属性:用于
  11. public static $id = null;
  12. //实现接口的构造方法
  13. public function __construct(...$params) {
  14. list($name, $sex, $age, $id) = $params;
  15. $this->name = $name;
  16. $this->sex = $sex;
  17. $this->age = $age;
  18. self::$id = $id;
  19. }
  20. //实现接口的抽象方法
  21. public function getUserInfo () {
  22. return '姓名:'.$this->name.' '.'性别:'.$this->sex.' '.'年龄:'.$this->age.' '.'会员状态:'.(self::$id ? '是会员' : '不是会员');
  23. }
  24. }
  25. //定义第二个实现类:获取会员用户的信息
  26. class PlusUser implements iUser {
  27. //定义一个受保护属性:用于
  28. public static $id = null;
  29. //实现接口的构造方法
  30. public function __construct(...$params) {
  31. list($name, $sex, $age, $id) = $params;
  32. $this->name = $name;
  33. $this->sex = $sex;
  34. $this->age = $age;
  35. self::$id = $id;
  36. }
  37. //实现接口的抽象方法
  38. public function getUserInfo () {
  39. return '姓名:'.$this->name.' '.'性别:'.$this->sex.' '.'年龄:'.$this->age.' '.'会员状态:'.(self::$id ? '是会员' : '不是会员');
  40. }
  41. }
  42. /*$p1 = new ComUser('小明', '男', 18, 0);
  43. echo $p1->getUserInfo();
  44. echo ComUser::$id;
  45. echo '<br>';
  46. $p2 = new PlusUser('小红', '女', 17, 1);
  47. echo $p2->getUserInfo();
  48. echo PlusUser::$id;*/
  49. //定义一个通用工作类:当传进去的参数为不同的账户时,调用不同账户的相同的方法名,产生不同的效果
  50. class User {
  51. public function clearP($p) {
  52. return $p->getUserInfo();
  53. }
  54. }
  55. //客户端代码
  56. //实例化通用工作类
  57. $p = new User;
  58. //普通成员
  59. $p1 = new ComUser('小明', '男', 18, 0);
  60. echo $p->clearP($p1);
  61. echo '<br>';
  62. //会员
  63. $p2 = new PlusUser('小红', '女', 17, 1);
  64. echo $p->clearP($p2);

四、课程总结

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