İşte bazen çalıştırmak bir tasarım sorunu var. Ben bazı ortak özellikler ve bazı benzersiz olanları ile ilgili sınıfların bir dizi var ki;
interface TableCell {
public function setContent($content);
}
interface HTMLTableCell extends TableCell {
public function setID($id);
public function setClass($class);
}
interface CSVTableCell extends TableCell {
public function setQuoted($quoted);
}
Sonra kümesinden herhangi bir nesne ile etkileşim için gereken bazı sınıfları var. Bu ortak yöntemleri kullanmak kolaydır. Ama sınıf onlar mevcut olduğunuzda, hem de benzersiz yöntemler kullanmak mümkün istiyorum:
class NumberCell {
public function render(TableCell $cell) {
$cell->setContent("123.45");
// if this is a HTMLTableCell
$cell->setClass("number");
}
}
Bu işlemek için en iyi yolu nedir? Zamanında türünün kontrolü tür hacky görünüyor. Ben tasarımını değiştirerek açığım.