有一个抽象类MaterialValue:
abstract class MaterialValue
{
public function __construct($model){...}
protected static function find($id)
{
$model = OtherClass::find($id);
if($model)
return $model
return false;
}
}
最初,任务是让类在搜索成功后返回自己的实例,因此子类包含以下代码:
班级Product:
class Product extends MaterialValue
{
public static function find($id)
{
$material = parent::find($id);
if($material)
return new self($material);
return false;
}
}
和类Ingredient:
class Ingredient extends MaterialValue
{
public static function find($id)
{
$material = parent::find($id);
if($material)
return new self($material);
return false;
}
}
方法代码find是相同的。问题来了,如何避免这种重复?
您可以使用后期静态绑定:
一般来说,最主要的是制定一个规则,方法的返回类型不应该在继承者中改变。
如果计划在子类中返回一个实例
MaterialValue,那么父方法也必须返回它。