Я думаю, что единственный способ - это пройти через защищенный статический метод, который создает ваш синглтон, и публичный статический метод, который определяет используемый класс.
Вы можете «эмулировать» его, используя функцию get_class над $ this
class ParentClass{
protected static function getInstance2($className){
//some stuffs here
return new $className();
}
public static function getInstance(){
return self::getInstance2(get_class(self));
}
}
class ChildClass extends ParentClass{
public static function getInstance(){
return self::getInstance2(get_class(self));
}
}