博客列表 >服务端 - PHP - OOP之接口

服务端 - PHP - OOP之接口

郴
原创
2020年05月07日 14:52:20654浏览

服务端 - 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 面向对象编程的理解和运用更加深入和熟悉。最主要的知识点是明白和掌握了接口的特点以及单接口、多继承和多态编程的基本用法。
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议