• Как использовать именованные конструкторы в PHP
    –1
    сущность отчет, которая содержит сотни собранных метрик. разница в объеме потребляемой памяти и скорости выполнения тестов. на большом проекте после каждого мержа бранчи с фичей прогоняются тысячи тестов. в релиз идут сотни бранчей. релизы дважды в день. да, подождать одну секунду или 10 — небольшая разница. но умножьте на количество прогонов и посчитайте...
  • Как использовать именованные конструкторы в PHP
    0
    безусловно, если не нужно наследоваться
  • Как использовать именованные конструкторы в PHP
    0
    Допустим мы тестируем некий сценарий в процессе которого в зависимости от входящих данных создается та или иная сущность. те же обычный покупатель / оптовый покупатель. На нужно протестировать что сценарий конкретно реагирует на входящие данные и создает нужную сущность. Но, внезапно оказывается, что у сущности не 2-3 поля, а несколько десятков, а то и сотен. И что вариантов создаваемых объектов тоже не 2, а гораздо больше. И создавать их по сути то в тесте и не надо. Надо только проверить, что сценарий конкретно выбирает класс, который нужно создать. Вот тут вполне пригодятся легковесные моки этих же классов.
  • Как использовать именованные конструкторы в PHP
    –1
    Я понимаю что это поведение языка. И в описанном выше коде ничего страшного не происходит.
    Но, допустим класс у нас будет не финальным, а свойства не приватными, а защищенными. И все… приехали. Вы не можете построить систему с немутабельными объектами, потому что любой наследник нашего класса может менять любые защищенные свойства. И вы никогда не можете быть уверенными на 100%, что состояние объекта не изменилось.
  • Как использовать именованные конструкторы в PHP
    0
    А можно этого не делать. Просто так лепить классы-менеджеры это как бы не очень хорошо. Все же у нас для всего должен быть смысл. А смысла просто так лепить объект, который внутри просто сделает новый инстанс другого объекта без какого либо дополнительного поведения — ну это как бы ниочем.

    смысл дополнительного класса создателя в том, что его легко и просто замокать, чего не скажешь о статических методах самой модели. да и о любых статических методах вцелом
  • Как использовать именованные конструкторы в PHP
    –2
    а так же потеряли простой способ замокать класс для теста

  • Как использовать именованные конструкторы в PHP
    –3
    присмотритесь к коду:

        public static function fromValues($hours, $minutes)
        {
            $time = new Time;
            $time->hours = $hours;
            $time->minutes = $minutes;
            return $time;
        }

    тут создается объект и ему устанавливаются свойства, как будто они публичные. Хотя они приватные. Это работает потому что интерпретатор смотрит на public/protected/private в контексте класса, а происходит это в том же классе. Если такое поведение интерпретатора поменяется, то и код перестанет работать.
  • Как использовать именованные конструкторы в PHP
    +2
    мне кажется, что вопрос правильного создания модели не должен лежать в зоне отвественности этой самой модели. Да и обращение к приватным полям объекта извне этого объекта является больше хаком и не факт что так будет работать всегда. ИМХО, стоит иметь нормальный конструктор, с четко определенными параметрами. А вопрос создания объекта делегировать на более высокий уровень.
    Допустим у Вас в системе могут появлятся пользователи из формы регистрации на вашем сайте, а могут быть импортированы из системы партнера.
    Вы можете создать класс-менеджер, который будет уметь привести данные с формы/с csv/с запроса на апи в общий вид и создать объект пользователя. так вы сможете в любой момент добавить новый способ не трогая доменную модель