批改状态:合格
老师批语:接口是要好好学
通过类实现面向对象编程,将通用功能分类,重复使用。
使用抽象类,指定要实现的功能,使功能设计和具体实现部分分离,
接口设计统一规范的功能模块要求
extends继承父类的属性和方法
//基类:商户信息维护class Merchant{protected $number = '';//商户编号public $name = '';//商户名称protected function setNumber(string $number){$this->number = $number;}/*** 设置名称*/public function setName($name){$this->name = $name;}/*** 修正名称* 返回修正后名称*/public function editName(){//去掉两端空白字符$this->name = trim($this->name);//计算长度$str_len = mb_strlen($this->name,'utf8');//如果名称超过20个字,就删除多余字//如果名称少于9个字,就填充到9个字if($str_len>20){$this->name = mb_substr($this->name,0,20,'utf8');}elseif($str_len<3){return '无效名称';}elseif($str_len<6){$this->name = str_pad($this->name,27,'略',STR_PAD_RIGHT);}return $this->name;}/*** 最终方法,不能在子类中重写*/final public function getName(){return $this->name;}}// $merchant = new Merchant;// $merchant->setName('龙门客栈');// echo $merchant->getName();class EditMerchant extends Merchant{public static $status = 0;//静态属性,状态public function setNumber(string $number){parent::setNumber($number);}public function getNumber(){return $this->number;}/*** 修正商户编号*/public function editNumber(){//只允许由数字和字母组成的编号if(!ctype_alnum($this->number)){return '非法编号';$this->number = '';}if(strlen($this->number)<12){$this->number = str_pad($this->number,12,0,STR_PAD_RIGHT);}return $this->number = substr($this->number,0,12);}}//直接访问静态属性echo '商户状态:',EditMerchant::$status?'正常':'停用';//输出:商户状态:停用//实例化$editMerchant = new EditMerchant;$editMerchant->setName('龙门客栈');//直接调用父类中的方法echo '<br>', $editMerchant->editName();//输出:龙门客栈略略略略略//将setNumber重写为公开方法后设置商户编号$editMerchant->setNumber('88048874HGJK001');//通过getNumber方法获取受保护的变量echo '<br>',$editMerchant->getNumber();//输出:88048874HGJK001//子类中扩展的方法editNumber()echo '<br>',$editMerchant->editNumber();//输出:88048874HGJK
abstract定义抽象类和抽象方式
/抽象类和抽象方法abstract class Card{public $cardno = '';//普通方法public function setCardno(int $cardno){$this->cardno = $cardno;}//抽象方法,没有方法体,指定子类必须要实现的功能abstract function editCardno();}//抽象类不能实例化//new Card;//atal error: Uncaught Error: Cannot instantiate abstract class Card//用常规类来继承抽象类class EditCard extends Card{//父类中的抽象方法必须实现public function editCardno(){if(strlen($this->cardno)!==16||strlen($this->cardno)!==19){return '请使用正确的卡号';}return $this->cardno;}}$editCard = new EditCard;//使用抽象父类中的常规方法$editCard->setCardno(62284854654642);echo '<br>','输入的卡号为:',$editCard->cardno;//输出:输入的卡号为:62284854654642//子类实现了父类中的抽象方法echo '<br>','判断结果为:',$editCard->editCardno();//输出:请使用正确的卡号
interface关键字定义接口
//接口定义常量和方法,不具体实现interface iMessage{//接口常量const MSG_ID = '"code"';const MSG_CONTENT = '"msg"';//接口方法public function getMsg();}//类中实现接口中的方法class Message implements iMessage{public function getMsg(){return self::MSG_ID.':'.self::MSG_CONTENT;}}$msg = new Message;echo '<br>', $msg->getMsg();//输出:"code":"msg"
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号