Blogger Information
Blog 32
fans 0
comment 0
visits 27802
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP 类相关基础知识
Yang_Sir
Original
589 people have browsed it

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"
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