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类可以提供接口的实现。

php 中抽象类的作用,解释PHP中的抽象类。相关推荐

  1. php中运算符的作用,在php中,双反位运算符(~~)(也称为“双颚化符”)的作用是什么?...

    应该是 !! (它将值转换为布尔值)但根本不需要它.我想原来的编码员搞错了 ~ 对于 ! 然后他们又补充说 (bool) 为了达到预期的效果(因为,正如你在问题中注意到的, ~~ 是不允许的). 这个 ...

  2. java中example函数作用_MyBatis逆向工程中的Mapper接口以及Example的实例函数及详解...

    一.mapper接口中的方法解析 mapper接口中的函数及方法 方法功能说明 int countByExample(UserExample example) thorws SQLException按 ...

  3. mysql数据库中count的作用_MySQL数据库中的count的用法

    1.概念 在开发系统的时候,可能经常需要计算一个表的行数,比如一个交易系统的所有变更记录总数.这时候你可能会想,一条select count(*) from t 语句不就解决了吗? 但是,会发现随着系 ...

  4. linux当中shadow文件的作用,解释Linux中passwd与shadow文件

    passwd文件: 文件所在路径:vi /etc/passwd 打开文件出现一梭子这个,现在来解释一下这些每部分代表的意思 文件中内容每行都是一样的,以'' : ''进行分隔,以下为对应关系: =&g ...

  5. Linux中mv的作用是,linux中的mv命令的详细解释

    linxu下的mv命令是一个常用命令,可以为文件或者目录重命名,下面由秋天网 Qiutian.ZqNF.Com小编为大家整理了linux的mv命令的详细解释的相关知识,希望对大家有帮助! 一.linu ...

  6. scala 中 foreach 的作用解释

    package YXHobject YXH {def main(args: Array[String]): Unit = {//var ff = (x:Int) => println(x) // ...

  7. php中mvc控制器作用,理解PHP中的MVC编程之控制器

    简单来讲,控制器的作用就是接受请求.它使用获取的方法,在这里是通过URI,载入一个功能模块来刷新或者提交一个表述层.控制器将使用$_GET自动全局变量来判断载入哪一个模块. 一个请求的例子,看起来像这 ...

  8. c语言中箭头的作用,为什么C中的箭头(-)运算符存在?

    我将您的问题解释为两个问题:1)为什么->甚至存在,以及2)为什么.不自动取消引用指针.这两个问题的答案都有历史渊源. 为什么会->存在? 在C语言的第一个版本(1975年5月第6版Uni ...

  9. html中tbody的作用,Html标签中thead、tbody、tfoot的作用

    Html标签中thead.tbody.tfoot的作用 为了让大表格(table)在下载的时候可以分段的显示,就是说在浏览器解析HTML时,table是作为一个整体解释的,使用TBODY可以优化显示. ...

最新文章

  1. 树莓派64位系统_树莓派4b+Ubuntu server+Nextcloud搭建私人云盘(1):准备系统
  2. Linux750 权限,linux系统文件权限简明介绍
  3. Android开发3g、wap、net的区别
  4. 汇编中的REPZ CMPSB
  5. linux find命令格式及find命令详解
  6. 系列(六)—Linux命令
  7. (十三)其他设计模式
  8. 深入浅出 Java 中的包装类
  9. matlab两张图片合成一张_两张图片合成一幅画意作品的简单方法
  10. python没有tkinter_Python升级提示Tkinter模块找不到的解决方法
  11. Ubuntu下安装rknn-toolkit以及转换darknet-yolov3模型
  12. MyISAM的key_buffer_size和InnoDB的innodb_buffer_pool_size
  13. matlab 无法终止,Matlab使用xlsread, xlswrite函数导致excel进程无法终止的问题
  14. Axure中级教程:管理后台内容模板(中继器全交互详解)
  15. 新年计划(2018)
  16. EasyDrawin流媒体服务器搭建与测试
  17. 人类社会货币的演变与区块链的价值
  18. 用matlab求互谱cpsd,互相关函数Rxy(C)
  19. KB,回来,事还是很多
  20. 《放学后》---东野圭吾

热门文章

  1. Vue2.0 新手入门 — 从环境搭建到发布
  2. SQLite性能提升10倍的Web数据库
  3. 取代Cookie失败,Google上线FLoC反遭“围攻”!
  4. 面试官:如何评估一个线程池需要设置多少个线程
  5. 25 万行逆向源码遭下架!
  6. 电磁感应理论之父,法拉第传奇
  7. 英特尔推出业界领先的AI与数据分析平台,全新处理器、内存、存储、FPGA解决方案集体亮相
  8. 微信改号?我用 Python 发现了六大隐藏秘密......
  9. Rust 让人奔溃的那些特性!
  10. 《庆余年》里的五竹,到底是不是机器人?