博主信息
博文 32
粉丝 0
评论 0
访问量 35347
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
PHP 类相关基础知识
Yang_Sir
原创
738人浏览过

php中的类和方法、以及抽象类抽象方法、接口

通过类实现面向对象编程,将通用功能分类,重复使用。
使用抽象类,指定要实现的功能,使功能设计和具体实现部分分离,
接口设计统一规范的功能模块要求

1.类和类的继承

  • 通过关键字extends继承父类的属性和方法
  1. //基类:商户信息维护
  2. class Merchant
  3. {
  4. protected $number = '';//商户编号
  5. public $name = '';//商户名称
  6. protected function setNumber(string $number){
  7. $this->number = $number;
  8. }
  9. /**
  10. * 设置名称
  11. */
  12. public function setName($name)
  13. {
  14. $this->name = $name;
  15. }
  16. /**
  17. * 修正名称
  18. * 返回修正后名称
  19. */
  20. public function editName()
  21. {
  22. //去掉两端空白字符
  23. $this->name = trim($this->name);
  24. //计算长度
  25. $str_len = mb_strlen($this->name,'utf8');
  26. //如果名称超过20个字,就删除多余字
  27. //如果名称少于9个字,就填充到9个字
  28. if($str_len>20){
  29. $this->name = mb_substr($this->name,0,20,'utf8');
  30. }elseif($str_len<3){
  31. return '无效名称';
  32. }elseif($str_len<6){
  33. $this->name = str_pad($this->name,27,'略',STR_PAD_RIGHT);
  34. }
  35. return $this->name;
  36. }
  37. /**
  38. * 最终方法,不能在子类中重写
  39. */
  40. final public function getName(){
  41. return $this->name;
  42. }
  43. }
  44. // $merchant = new Merchant;
  45. // $merchant->setName('龙门客栈');
  46. // echo $merchant->getName();
  47. class EditMerchant extends Merchant
  48. {
  49. public static $status = 0;//静态属性,状态
  50. public function setNumber(string $number){
  51. parent::setNumber($number);
  52. }
  53. public function getNumber()
  54. {
  55. return $this->number;
  56. }
  57. /**
  58. * 修正商户编号
  59. */
  60. public function editNumber()
  61. {
  62. //只允许由数字和字母组成的编号
  63. if(!ctype_alnum($this->number)){
  64. return '非法编号';
  65. $this->number = '';
  66. }
  67. if(strlen($this->number)<12){
  68. $this->number = str_pad($this->number,12,0,STR_PAD_RIGHT);
  69. }
  70. return $this->number = substr($this->number,0,12);
  71. }
  72. }
  73. //直接访问静态属性
  74. echo '商户状态:',EditMerchant::$status?'正常':'停用';//输出:商户状态:停用
  75. //实例化
  76. $editMerchant = new EditMerchant;
  77. $editMerchant->setName('龙门客栈');
  78. //直接调用父类中的方法
  79. echo '<br>', $editMerchant->editName();//输出:龙门客栈略略略略略
  80. //将setNumber重写为公开方法后设置商户编号
  81. $editMerchant->setNumber('88048874HGJK001');
  82. //通过getNumber方法获取受保护的变量
  83. echo '<br>',$editMerchant->getNumber();//输出:88048874HGJK001
  84. //子类中扩展的方法editNumber()
  85. echo '<br>',$editMerchant->editNumber();//输出:88048874HGJK

2.抽象类和抽象方法

  • 使用abstract定义抽象类和抽象方式
  • 抽象类不能被实例化,只能继承后使用
  • 抽象类中可以定义常规方法
  • 抽象方法在子类中必须实现
  1. /抽象类和抽象方法
  2. abstract class Card
  3. {
  4. public $cardno = '';
  5. //普通方法
  6. public function setCardno(int $cardno){
  7. $this->cardno = $cardno;
  8. }
  9. //抽象方法,没有方法体,指定子类必须要实现的功能
  10. abstract function editCardno();
  11. }
  12. //抽象类不能实例化
  13. //new Card;//atal error: Uncaught Error: Cannot instantiate abstract class Card
  14. //用常规类来继承抽象类
  15. class EditCard extends Card
  16. {
  17. //父类中的抽象方法必须实现
  18. public function editCardno(){
  19. if(strlen($this->cardno)!==16||strlen($this->cardno)!==19){
  20. return '请使用正确的卡号';
  21. }
  22. return $this->cardno;
  23. }
  24. }
  25. $editCard = new EditCard;
  26. //使用抽象父类中的常规方法
  27. $editCard->setCardno(62284854654642);
  28. echo '<br>','输入的卡号为:',$editCard->cardno;//输出:输入的卡号为:62284854654642
  29. //子类实现了父类中的抽象方法
  30. echo '<br>','判断结果为:',$editCard->editCardno();//输出:请使用正确的卡号

3.接口语法

  • interface关键字定义接口
  • 接口中设置抽象方法,定义必须要实现的方法。只能是公用方法
  1. //接口定义常量和方法,不具体实现
  2. interface iMessage
  3. {
  4. //接口常量
  5. const MSG_ID = '"code"';
  6. const MSG_CONTENT = '"msg"';
  7. //接口方法
  8. public function getMsg();
  9. }
  10. //类中实现接口中的方法
  11. class Message implements iMessage{
  12. public function getMsg(){
  13. return self::MSG_ID.':'.self::MSG_CONTENT;
  14. }
  15. }
  16. $msg = new Message;
  17. echo '<br>', $msg->getMsg();//输出:"code":"msg"
批改老师:天蓬老师天蓬老师

批改状态:合格

老师批语:接口是要好好学
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学