У меня есть класс с функцией завода-шаблоном в нем:инстанцирование дочерних классов от родительского класса (PHP)
abstract class ParentObj {
public function __construct(){ ... }
public static function factory(){
//returns new instance
}
}
мне нужны дети, чтобы иметь возможность вызвать функцию фабрики и возвращает экземпляр вызова класс: $child = Child::factory();
и предпочтительно без переопределения заводской функции в дочернем классе.
Я пробовал несколько разных способов достижения этого безрезультатно. Я предпочел бы держаться подальше от решений, которые используют отражение, например __CLASS__
.
(Я использую PHP 5.2.5, если это имеет значение)
Я играл с RC4 на минуту, так что я постараюсь немного кода в ближайшее время, если никто не ступает в то же время ... –
LSB кажется быть лучшим решением, которое я могу найти самостоятельно. До тех пор, пока я не обновляюсь, лучшее, что я могу придумать, - либо передать дочернее имя на factory(), либо определить имя как свойство и захватить его с завода() –
Согласно руководству PHP, есть функция под названием ' get_called_class() ', который работает как' __CLASS__' http://us.php.net/manual/en/function.get-called-class.php –