xpert13
@xpert13
Full Stack Developer

Наследование в PHP и статические конструкторы?

Помогите немного понять как правильно работать со статическими конструкторами в условиях наследования.

Припустим у нас есть 2 класса (один наследует второй). У родительского класса есть статический конструктор. Если вызвать этот конструктор через дочерний класс - какой объект создастся?

Пример кода:
class Foo
{
    static public function create() {
        return new self();
    }
}

class Bar extends Foo
{

}

$bar = Bar::create();


На примере этого кода: на сколько я понимаю в переменной $bar будет объект класса Foo. Если это так - то подскажите как правильно работать со статическими конструкторами, чтобы в результате получать объект того класса, к которому обращаемся?

P.S. Просьба не предлагать использовать __construct, у меня есть оправданная необходимость иметь несколько конструкторов, а на сколько мне известно - статические конструкторы - это единственный способ в PHP иметь несколько конструкторов.
  • Вопрос задан
  • 411 просмотров
Решения вопроса 1
qonand
@qonand
Software Engineer
в данном случае создастся экземпляр класса Foo, т.к. Вы не используете позднее статическое связывание. Соответственно если хотите что бы создавался экземпляр класса Bar используйте его, например:
class Foo
{
    static public function create() {
        return new static();
    }
}


P.S. и лучше у методов явно указывать модификаторы доступа
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы