php - 如何使用 PHP 摘要?

标签 php oop zend-framework

为什么要使用这样的摘要?它能加快工作速度还是有什么用?

// file1.php
abstract class Search_Adapter_Abstract {
    private $ch = null;
    abstract private function __construct()
    {
    }       
    abstract public funciton __destruct() { 
      curl_close($this->ch);
    }
    abstract public function search($searchString,$offset,$count);
}

// file2.php
include("file1.php");
class abc extends Search_Adapter_Abstract
{
    // Will the curl_close now automatically be closed?

}

这里扩展abstract的原因是什么?让我很困惑。我现在能从中得到什么?

最佳答案

您可以使用抽象类来定义和部分实现扩展类应该执行的常见任务。由于没有示例很难解释,请考虑以下内容:

如果没有抽象类,您将不得不定义两个具有相同方法和实现的基本类。由于 OOP 完全是为了防止代码重复,这是完全错误的:

class Car {
  public $brand = 'mercedes';

  public function gasPerMile($weight) 
  {
    // Useless calculation, purely for illustrating
    $foo = $weight * 89 / 100;
    return $foo;
  }

  public function carSpecificFunction() 
  {
    // Only present in class Car
  }
}

class Truck {
  public $brand = 'MAN';

  public function gasPerMile($weight) 
  {
    // Useless calculation, purely for illustrating
    $foo = $weight * 89 / 100;
    return $foo;
  }

  public function truckSpecificFunction() 
  {
    // Only present in class Truck
  }
}

现在你有了一些共同的属性和方法,它们在两个类中是重复的。为了防止这种情况,我们可以定义一个抽象类,从中扩展 CarTruck。这样,通用功能就保留在一个地方,扩展类将为卡车或汽车实现特定的属性和方法。

abstract class Vehicle {
  abstract public $brand;

  public function gasPerMile($weight) 
  {
    // Useless calculation, purely for illustrating
    $foo = $weight * 89 / 100;
    return $foo;
  }
}

这样,您可以确保至少每个扩展 Vehicle 的类都必须指定一个品牌,并且所有扩展类都可以使用通用的 gasPerMile() 方法。

当然,这是一个简单的例子,但希望它能说明为什么抽象类很有用。

关于php - 如何使用 PHP 摘要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7243175/

相关文章:

php - 如何从 Web 委派长时间的后台任务,并在完成后恢复控制

oop - Grails中的服务方法或域静态方法?

data-structures - 在 MainFrame(或主对话框)和模态对话框之间传递数据的最佳方法是什么?

zend-framework - zend 表单电子邮件验证

php - 支付宝整合

php - 如何更改数据库的架构以引入新功能或更改当前功能

javascript - PHP 中的 file_get_contents 与 Javascript 中的 toDataUrl 相同吗?

php - 与 MySQLi 绑定(bind)参数抛出 "undefined method"错误?

php - 在 PHP 中检查 memory_limit

multithreading - 所有事件驱动的框架都应该是单线程的吗?