资讯专栏INFORMATION COLUMN

PHP设计模式(二):抽象类和接口

xialong / 1531人阅读

摘要:在设计模式中,抽象类不能够被实例化初始化,但是可以依靠具体类的继承来实现。对于大型项目来说,对象都是由基本的抽象类继承实现,而这些类的方法通常都由接口来定义。

原文地址:PHP设计模式(二):抽象类和接口

Introduction

对于编程来说,对事物的抽象是一个老生常谈的话题,抽象问题更利于面向对象编程以及程序设计模式。
和C/C++,Java,Python等语言一样,PHP也支持面向对象,但是又有略微区别,如PHP支持在接口中定义常量,但是不支持抽象变量。

抽象/Abstraction

对事物的抽象是指,区别两个不同事物之间的本质特征,这两个事物应该在某个视角上有明确的区分界限。

如,鲸鱼和鲤鱼,这两个事物在动物的视角上,有明确的区分界限,属于不同的动物;但是在水生动物的视角上,他们属于同一种动物的抽象。
合理的对问题进行抽象,构造模型,将更容易通过编程来解决问题。
记住:抽象是编程解决问题的基础,越复杂的问题,越需要一开始就对问题进行抽象,而不是直接写代码。

抽象类/Abstract Class

抽象类是一个编程概念,PHP中叫Abstract Classes。在设计模式中,抽象类不能够被实例化/初始化,但是可以依靠具体类的继承来实现。
有点抽象,对吧?用代码来解释:

定义了动物这个抽象类,动物的属性是名字name,然后有一个方法是吃食物eat food。
为什么动物是抽象类?因为动物这个物种并不是一个存在于自然界的东西,它是人类脑海里抽象出的东西。存在自然界的是鲸鱼和鲤鱼这样的确定性动物。
比如鲸鱼的概念,应该是属于动物,继承Animal类,我们定义鲸鱼这个类以及吃东西的方法:

name = "Whale";
  }
  public function eat($food) {
    echo $this->name . " eat " . $food . ".
";
  }
}
?>

现在我们可以初始鲸鱼类,并且调用吃的方法了:

eat("fish");
?>

运行一下:

$ php Whale.php
Whale eat fish.
接口/Interface

PHP也支持面向过程编程概念中的接口,下面同样用鲸鱼的例子来讲述:

同样定义一个鲸鱼类,来实现上述接口:

现在我们可以初始鲸鱼类,并且调用吃的方法了:

eat("fish");
?>

运行一下:

$ php Whale.php
Whale eat fish.
抽象类vs接口

上面的抽象类和接口的例子,看上去是不是类似?事实上,对于PHP编程来说,抽象类可以实现的功能,接口也可以实现。
抽象类的接口的区别,不在于编程实现,而在于程序设计模式的不同。
一般来讲,抽象用于不同的事物,而接口用于事物的行为。
如:水生生物是鲸鱼的抽象概念,但是水生生物并不是鲸鱼的行为,吃东西才是鲸鱼的行为。
对于大型项目来说,对象都是由基本的抽象类继承实现,而这些类的方法通常都由接口来定义。
此外,对于事物属性的更改,建议使用接口,而不是直接赋值或者别的方式,如:

observeEat($whale);
    $this->observeEat($carp);
  }
  function observeEat(IAction $animal) {
    $animal->eat();
  }
}
$observer = new observer();
?>

运行一下:

$ php Observer.php
Whale eat fish.
Carp eat moss.
Summary

好的设计模式是严格对问题进行抽象,虽然抽象类和接口对于编程实现来说是类似的,但是对于程序设计模式是不同的。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21474.html

相关文章

  • 关于抽象类和接口的初步理解

    摘要:关于抽象类和接口的初步理解什么是抽象类抽象类是指在前加了关键字且存在抽象方法在类方法关键字前加了关键字的类。抽象类不能被直接实例化。抽象类中只定义或部分实现子类需要的方法。抽象类提供了具体实现的标准,而接口则是纯粹的模板。 关于抽象类和接口的初步理解 什么是抽象类 抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 ab...

    Julylovin 评论0 收藏0
  • PHP设计模式(六):MVC

    摘要:原文地址设计模式六世纪年代,计算机发展迅速,编程技术也日益分化。到了年代,的出现更是让这种程序设计模式得以延续。根据设计模式三封装中介绍的设计原则,在面向对象程序设计中,类和类之间的访问交互和更新应该是通过和。 原文地址:PHP设计模式(六):MVC Introduction 20世纪80年代,计算机发展迅速,编程技术也日益分化。桌面应用编程,也逐渐出现了用户图形界面和程序逻辑分离的程...

    时飞 评论0 收藏0
  • PHP面试常考内容之面向对象(3)

    摘要:面试专栏正式起更,每周一三五更新,提供最好最优质的面试内容。继上一篇面试常考内容之面向对象发表后,今天更新面向对象的最后一篇。面向对象的主要特征为封装继承多态。为了提高内聚性减少引起变化,单一原则是低耦合高内聚的面向原则上的引申。 PHP面试专栏正式起更,每周一、三、五更新,提供最好最优质的PHP面试内容。继上一篇PHP面试常考内容之面向对象(2)发表后,今天更新面向对象的最后一篇(3...

    xfee 评论0 收藏0
  • PHP设计模式(四):继承

    摘要:原文地址设计模式四继承在设计模式二抽象类和接口以及设计模式三封装中,我们已经见过继承,也就是关键字。对于一个好的程序设计,需要类和类之间应该是低耦合的。继承通常是继承自抽象类,而不是具体类。 原文地址:PHP设计模式(四):继承 Introduction 在PHP设计模式(二):抽象类和接口以及PHP设计模式(三):封装中,我们已经见过继承,也就是extends关键字。和C/C++,J...

    hellowoody 评论0 收藏0
  • PHP经验总结 - 聊聊面向对象

    摘要:例如汽车这个名词可以理解为汽车的总类,但这辆宝马汽车则是一个具体的汽车对象。当在类成员方法内部调用的时候,可以使用伪变量调用当前对象的属性。在面向对象中则被称之为方法。 简述 现在大伙都在讲面向对象编程,但是我们也得先找着一个对象是不?不然怎么面向对象?怎么编程? --- 笑话一则,但是理不亏,要搞P面向对象编程,我们起码要先搞懂对象(还有类)是什么?只有了解它,理解它,你才能驾驭它。...

    lpjustdoit 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<