OOP 中的抽象

OOP 中的 "抽象" 概念是将复杂性隐藏起来,不让应用程序、用户或开发人员发现。您可以将一组复杂的代码或指令封装在一个函数中。该函数的名称应使用动词,这样会更容易理解函数中复杂指令的具体作用。

例如,你可以有一个名为 computeTotal($a, $b, $c) 的函数,其中包含根据要求计算总数的逻辑或步骤。作为开发人员,您可以只使用 computeTotal 方法,而不用考虑实际计算总计过程中涉及的所有复杂操作,但如果您需要修复错误或了解发生了什么,那么您可以检查 computeTotal 函数内部发生了什么:

public function computeTotal(int $a, int $b, int $c): int
{
    if ($c > 1) {
        $total = $a + $b;
    } else if ($c < 1) {
        $total = $a - $b;
    } else {
        $total = 0;
    }

    return $total;
}

使用这一概念有什么好处?使用前面的示例,开发人员无需担心函数内部获取总计的确切步骤顺序。开发人员只需知道有一个 computeTotal 函数可供使用,还有成百上千个其他函数,每个函数内部都有复杂的指令步骤。开发人员可以专注于解决方案,而不必担心每个函数内部的细枝末节。

抽象类是类抽象的一种实现方式,是一种不能实例化且需要至少有一个方法声明为抽象的类类型。抽象类旨在由其他相关类扩展:

<?php

abstract class AbstractPrinter
{
    abstract protected function print(string $message): bool;
}

class ConsolePrinter extends AbstractPrinter
{
    protected function print(string $message): bool
    {
        // TODO: Implement print() method.
    }
}

class PdfPrinter extends AbstractPrinter
{
    protected function print(string $message): bool
    {
        // TODO: Implement print() method.
    }
}

AbstractPrinter 中声明为抽象的方法必须同时存在于扩展该方法的类中。现在,每个扩展 AbstractPrinter 抽象类的类都可以对 print 方法进行自己的特定操作。在抽象类中声明为抽象的方法只能声明该方法的可见性、参数和返回值。它不能有自己的实现。