【问题标题】:Why use abstraction in PHP OOP?为什么在 PHP OOP 中使用抽象?
【发布时间】:2016-10-08 01:09:47
【问题描述】:

为什么要在下面的例子中声明一个抽象方法,

<?php

    abstract class ClassName
    {
        abstract public function methodName();
    }
?>

什么时候

<?php

    class ClassName
    {
        public function methodName()
        {
           // Body of method
        }
    }
?>

在被继承的子类操作时会提供相同的结果。

【问题讨论】:

  • en.wikipedia.org/wiki/Abstract_type#Use_of_abstract_types "抽象类型很有用,因为它们可用于定义和强制执行协议;所有实现协议的对象都必须支持的一组操作。"
  • 好吧,它不会提供相同的结果。不会强制任何子类覆盖methodName。要回答为什么,这完全由您自己决定。这就像问为什么存在 ENUM,它可以帮助您编写可维护的代码。
  • 所以,继续 @ceejayoz 的引用 - 它可以帮助您保持代码更加干净和严格。
  • 举个具体的例子:想象abstract class CacheStore,打算用于Redis 存储、MySQL 存储、文件存储和AWS S3 存储。 Redis 存储永远不会想要继承 MySQL 存储的实现——它们是完全不同的。通过拥有一个抽象类,您可以说“任何缓存存储都将具有 get/put/expire/delete”等具有相同名称和签名的函数,但底层实现可能完全不同。

标签: php oop inheritance abstract abstraction


【解决方案1】:

对程序员的指导。您提供的两个代码示例仅在正确使用的情况下是等效的。可以对包含存根方法的类进行实例化和使用,但它默默地无法完成需要完成的工作。除非派生了子类并重写了所有抽象方法,否则抽象类将引发错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 2017-01-04
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    相关资源
    最近更新 更多