Духовность™
Продвинутый новичок
Какие те же? Этот "второй конструктор" позволяет не затрагивать интерфейс реального конструктора и в любой момент изменять набор его входных параметров.
Получается, что конструктор базового класса мы не трогаем, соответственно не боимся, что если завтра изменятся параметры конструктора, не придется переписывать кучу классов-потомков.
кто сказал, что он пустой? У меня вот реальная задача вчера была - добавить в конструктор, который принимал один параметр, второй параметр. Если бы у меня было как я показал выше, т.е. существовал бы абстрактный init() предопределенный во всех классах-потомках, мне бы не пришлось исправлять кучу классов-потомков такого вида:кому нужно менять набор входных параметров у пустого конструктора?
class Child {
public function __constrcut(Object $object, OtherObject $other)
{
parent::__constrcut($object, $other);
// тут то, что должно быть в init()
}
}
abstract class Base_Mapper
{
private $db;
public function __construct(Database $db) {
$this->db = $db;
}
}
class Module_Common_Mapper_Common extends Base_Mapper {
// ...
}
class Module_Advert_Mapper_Advert extends Module_Common_Mapper_Common
{
public function __construct(Database $db)
{
parent::__construct($db);
$this->db_table_name = '...';
$this->model_class_name = '...';
}
}
abstract class Base_Mapper
{
private $db;
public function __construct(Database $db) {
$this->db = $db;
$this->init();
}
abstract protected function init();
}
class Module_Common_Mapper_Common extends Base_Mapper
{
protected function init(){}; // что бы не объявлять пустышки в классах-потомках, если они не нужны
}
class Module_Advert_Mapper_Advert extends Module_Common_Mapper_Common
{
protected function init()
{
$this->db_table_name = '...';
$this->model_class_name = '...';
}
}
protected function init(){}; // что бы не объявлять пустышки в классах-потомках, если они не нужны
