我有以下程序
<?php
abstract class foo
{
abstract public function callme();
public function testing()
{
return $this->callme();
}
}
class bar extends foo
{
public function callme()
{
return "hello";
}
}
$objBar = new bar();
echo $objBar->testing();
?>
我定义了abstract class foo
。是否必须在课前写摘要?因为如果我删除了抽象,我会收到致命的错误。
答案 0 :(得分:1)
是的,如果它包含abstract方法。
通过将方法声明为抽象,您说要使用此类,扩展类必须实现抽象方法。
除非实现callme
,否则无法实例化您的foo类,因此必须将其声明为抽象。
使用真实世界的示例可能比标准abstract class Vehicle
,class Car extends Vehicle
教程更好地解释这些概念。
我们假设我们有一个报告系统可以对数据库进行一些查询。
我们发现所有报告必须以标准方式实施,以共享代码并帮助进行日常维护。
所以我们定义:
abstract class Report
{
}
为了论证,我们所有的报告都需要数据库连接。
abstract class Report
{
/** @var PDO */
protected $dbh;
public function __construct (PDO $dbh)
{
$this->dbh = $dbh;
}
/**
* @return array
*/
abstract public function getData();
}
这里我们还决定所有报告都必须实现一个返回数组的公共getData方法。
这意味着:
抽象类定义强制执行我们使用此代码的方式,并确保每种类型的报表,无论您的团队中的哪个开发人员编写它,都符合我们已经决定的约定。
然后,其他代码可以从用户输入中选择一个报告,运行它,并使用getData的结果执行某些操作(例如将其写入CSV文件),因为它知道它将是一个数组。