聊一聊PHP抽象类

PHP抽象类:

1不能被实例化

2所有的子类必须定义其方法

3子类的方法的访问控制必须大于等于父类

4子类方法的参数也必须和父类一致,但是子类可以增加新的参数

 

<?php

abstract class A

{

 // 强制要求子类定义这些方法

    abstract protected function getValue();

    abstract protected function prefixValue($prefix);

    // 普通方法(非抽象方法)

    public function printOut() {

        print $this->getValue() . "\n";

    }

}

class B extends A

{

    protected function getValue() {

        return "A";

    }

    public function prefixValue($prefix) {

        return "{$prefix}A";

    }

}

class C extends A

{

    public function getValue() {

        return "B";

    }

    public function prefixValue($prefix,$separator = "_Hello") {

        return "{$prefix}B{$separator}";

    }

}

$class1 = new B;

$class1->printOut(); 

//A  

// B调用父类的printOut方法,父类的$this是B的伪类,然后调用B的getvalue方法,因为父类是保护方法,方法一致,输出A

echo $class1->prefixValue('FOO_') ."\n";

// FOO_A  

 //B调用prefixValue方法(public),传入参数FOO_,父类的prefixValue(protected),

//访问控制B->prefixValue[PUBLIC] > B->prefixValue[PROTECTED]  满足,可以输出

$class2 = new C;

$class2->printOut();

//B  

//前面同上面A结果。  虽然A类的getValue为保护,但是  C类的getValue为公共。访问控制大于A类,所以满足

echo $class2->prefixValue('FOO_') ."\n";

 //FOO_B_Hello   

效果同上面FOO_A 。子类是可以在必须满足父类的参数条件下,自己额外定义参数的。

微信截图_20200910173552.png

 

 

一般代码哪些地方能用到?

我一般在写接口的基类会用到此类

微信截图_20200910173739.png

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值