php 中抽象类的作用,解释PHP中的抽象类。

PHP5附带了面向对象的模型,面向对象的模型的一些概念是:类,对象,封装,多态性,抽象类和最终类,以及方法,接口和继承等。在本文中,

我们将讨论Abstract Class及其与PHP中的面向对象技术有关的功能。此外,我们还将通过几个示例学习Abstract Class的实现。

但是,在深入之前,让我们学习如何定义抽象类。

我们可以通过在类名后加上abstract关键字来将类声明为抽象类。定义非常清楚,包含抽象方法的类称为抽象类。在抽象类中定义的抽象方法仅具有名称和参数,而没有其他代码。

无法创建抽象类的对象。相反,我们需要将计算函数定义的子类扩展到子类中抽象方法的主体中,并利用这些子类创建对象。

让我们讨论有关PHP抽象类的一些重要事实:

1.抽象类可以具有抽象以及非抽象方法。

例:<?php

abstract class base {

abstract function printdata();

public function getdata() {

echo "nhooo.com";

}

}

class child extends base{

public function printdata(){

echo "Good morning";

}

}

$obj = new child();

$obj->getdata();

?>

输出:nhooo.com

2.不能直接实例化。

例:<?php

abstract class AbstractClass{

abstract protected function calculate();

public function adddata() {

echo "Addition done";

}

}

$obj=new AbstractClass();

$obj->adddata();

?>

输出:Fatal error: Uncaught Error: Cannot instantiate abstract class AbstractClass

3.相同(或限制较少)的可见性:

所有子类都必须定义在父类中标记为抽象的所有方法,所有这些方法都需要使用相同的签名或受限制较少的签名来定义。假设在父类中,如果我们定义了一个受保护的可见性的抽象方法,则在子类的执行中,应使用受保护的aorpublic来定义它,而不是使用private。

例:<?php

abstract class AbstractBaseClass1{

abstract public function addValue();

abstract protected function getValue();

}

class ConcreteClass extends AbstractBaseClass1{

protected function addValue() {

return "ConcreteClass";

}

public function getValue() {

return " Child Class";

}

}

$classobj = new ConcreteClass;

$classobj->addValue();

?>

输出:Fatal errorAccess level to ConcreteClass::addValue() must be public (as in class AbstractBaseClass1)

4.抽象方法不能包含主体:

声明为抽象的方法仅声明该方法的签名-它们无法在其中定义任何人。尽管可以在非抽象方法中存在身体。

例:<?php

abstract class ParentClass{

abstract protected function printValue(){

return "Good morning";

}

}

class ClassA extends ParentClass{

protected function printValue() {

return "ConcreteClass1";

}

}

$classobj = new ClassA;

$classobj->printValue();

?>

输出:PHP Fatal error: Abstract function ParentClass::printValue() cannot contain body

5,任何包含至少一个抽象方法的类都必须声明为抽象类:

抽象类可以具有抽象和非抽象方法,但是它必须至少包含一个抽象方法。如果它包含抽象方法,则应将其声明为抽象方法。

例:<?php

class AbstractClass {

abstract protected function getValue();

public function printData() {

echo " Welcome to nhooo.com";

}

}

$obj=new AbstractClass();

$obj->printData();

?>

输出:PHP Fatal error: Class AbstractClass contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (AbstractClass::getValue)

6,Abstract类不支持多重继承

它不支持多重继承。

范例:<?php

Abstract class SuperClass{

public abstract function test();

protected function welcome(){

echo "Good morning";

}

}

class ClassA extends SuperClass{

public function test(){

echo "Hello";

}

protected function welcome(){

echo "Good afternoon";

}

}

class ClassB extends SuperClass{

public function test(){

echo "Hello";

}

protected function welcome(){

echo "Good evening";

}

}

class ClassC extends ClassA, ClassB{

public function test1(){

$c = new self();

$c->welcome();

}

}

?>

输出:Error

说明:

这里,我们有声明超类具有的方法的抽象类test()和welcome()和,ClassA和ClassB的和具体的类从一个抽象类延伸。然后,我们尝试创建从ClassA和ClassB扩展的ClassC。从代码中可以明显看出,在welcome()使用对象ClassC调用方法时,编译器不可能选择必须调用ClassAwelcome()的welcome()方法还是ClassB的方法。因此,为了避免此类麻烦,PHP不支持多重继承。

注意:

一个抽象类可以扩展另一个抽象类,Abstract类可以提供接口的实现。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值