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 。子类是可以在必须满足父类的参数条件下,自己额外定义参数的。

聊一聊PHP抽象类

 

 

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

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

聊一聊PHP抽象类

 

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-12-28
  • 2021-11-28
  • 2022-12-23
猜你喜欢
  • 2021-12-18
  • 2018-12-03
  • 2021-10-05
  • 2021-12-20
  • 2022-01-15
  • 2021-08-24
  • 2021-11-09
相关资源
相似解决方案