Прошу прощения, я не мог придумать более описательное название. Моя проблема в следующем. Предположим, что у вас есть два класса A и B, и вы знаете, что иногда может случиться, что некоторый код пытается создать экземпляр объекта типа A, когда то, что на самом деле необходимо, является объектом типа B. Дело в том, что код для решения, какой один из них является правильным объектом, естественно принадлежит классу A, а не клиенту.Позволяя объекту решить свой класс
В JavaScript (ок, JS классы не, но это делает очко), вы можете просто сделать
function A() {
if(some_condition) {
return new B();
}
//else we proceed to customize and return our object
}
Я хочу сделать что-то подобное в PHP. Самое лучшее, что я могу придумать это
class A {
private function __construct() {
//whatever you need to do
}
public static function getInstance() {
if(some_condition) {
return new B();
}
else {
return new A();
}
}
}
Проблема заключается в том, что клиентский код всегда будет знать, что А является особенным, и вы должны создавать объекты со статическим методом.
Есть ли способ делегировать A выбор типа объекта для возврата в бесшовной форме?