__ создайте () по сравнению с SameAsClassName () для конструктора в PHP

68
задан hakre 22 April 2018 в 11:17
поделиться

6 ответов

Я соглашаюсь со штуковиной, преимущество так, Вы не должны переименовывать его при переименовании класса. DRY.

Точно так же, если у Вас есть дочерний класс, можно звонить

parent::__construct()

для вызова родительского конструктора. Если далее вниз дорожка, Вы изменяете класс дочерний класс, наследовалась, Вы не должны изменять вызов конструкции на родителя.

кажется, что мелочь, но пропускающий менять имя вызова конструктора на Ваши родительские классы могла создать тонкий (и не настолько тонкая) ошибки.

, Например, если Вы вставили класс в свой heirachy, но забыли изменять вызовы конструктора, Вы могли, начал вызывать конструкторов бабушки и дедушки вместо родителей. Это могло часто вызывать нежелательные результаты, которые могло бы быть трудно заметить.

Также примечание, что

С PHP 5.3.3, методов с тем же именем, поскольку последний элемент namespaced имени класса больше не будут рассматривать как конструктора. Это изменение не влияет на non-namespaced классы.

Источник: http://php.net/manual/en/language.oop5.decon.php

70
ответ дан Gordon 24 November 2019 в 14:13
поделиться

__construct был представлен в PHP5. Это - способ, которым Вы, как предполагается, делаете это теперь. Я не знаю ни о каком преимущества по сути, все же.

Из руководства PHP:

Для назад совместимости, если PHP 5 не может найти __ конструкция () функция для данного класса, это будет искать функцию конструктора старого стиля, под названием класс. Эффективно, это означает, что единственный случай, который имел бы проблемы совместимости, - то, если бы класс имел метод, названный __ конструкция (), который использовался для различной семантики

, Если бы Вы находитесь на PHP5, то я рекомендовал бы использовать __construct, чтобы не заставлять PHP посмотреть в другом месте.

20
ответ дан Paolo Bergantino 24 November 2019 в 14:13
поделиться

Основное преимущество, которое я вижу __ конструкция, то, что Вы не должны переименовывать своего конструктора при изменении имени класса.

15
ответ дан gizmo 24 November 2019 в 14:13
поделиться

Лучшее преимущество использования __contruct() вместо ClassName() при расширении классов. Намного легче звонить parent::__construct() вместо parent::ClassName(), поскольку это является допускающим повторное использование среди классов, и родитель может быть изменен легко.

7
ответ дан Ryan McCue 24 November 2019 в 14:13
поделиться

В PHP 5 преимущество состояло бы в том, что производительность будет лучше. Это будет искать конструктора под названием __construct первый и если это не находит, что, будет искать конструкторов под названием className. Таким образом, если это находит конструктора именем __construct, это не должно искать конструктора именем className.

3
ответ дан Steven Oxley 24 November 2019 в 14:13
поделиться

Прямая совместимость. Всегда существует шанс, что унаследованный код, который это оставляют на языке для назад пользы совместимости, будет удален в будущей версии.

2
ответ дан Jeremy Privett 24 November 2019 в 14:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: