您可以使用抽象类来定义和部分实现扩展类应该执行的常见任务.由于没有示例解释很困难,请考虑以下事项:
如果没有抽象类,则必须使用相同的方法和实现来定义两个基本类.由于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
}
}
现在您有了一些常见的属性和方法,它们在两个类中重复.为了防止这种情况,我们可以定义一个从中扩展Car和Truck的抽象类.这样,常用功能保存在一个地方,扩展类将实现卡车或汽车的特定属性和方法.
abstract class Vehicle {
abstract public $brand;
public function gasPerMile($weight)
{
// Useless calculation, purely for illustrating
$foo = $weight * 89 / 100;
return $foo;
}
}
这样,您可以确保至少每个扩展Vehicle的类都必须指定一个品牌,并且所有扩展类都可以使用公共gasPerMile()方法.
当然,这是一个简单的例子,但希望它说明了为什么抽象类可能有用.