Комментарии 13
Я бы обобщил — делайте Value Objects иммутабельными, DateTime в том числе :)
+3
Carbon предоставляет как мутабельный так и иммутабельный варианты.
+1
Отвыкнув клонировать объекты, большая часть начинающих программистов в других объектах все же столкнется с этим задекларированным свойством всех объектов. Каждому классу следует делать Immutable-оболочку, или в DateTime есть какая-то особенность?
+1
Работа с датами и временем в PHP порой раздражает, поскольку приводит к неожиданным багам в кодеИгнорирование документации еще и не к таким багам может привести. В документации черным по белому написано:
Adds an amount of days, months, years, hours, minutes and seconds to a DateTime objectКак тогда можно ожидать от кода в примере иного поведения?
$finishedAt = (clone $startedAt)->add(new DateInterval('PT3M'));
Этот код тоже некрасивый с множеством ненужного шума?
+9
Когда впервые после PHP столкнулся с Python'ом был крайне удивлен, что словари и списки являются мутабельными, словил на этом немало багов на первых порах, все потому, что не прочитал базовую спецификацию языка, но почему-то мне в голову не пришло писать статью об этом.
+6
Странно, что архитекторы сделали возвращаемое время у add/modify.
Обычно если возвращает, то это копия.
Обычно если возвращает, то это копия.
0
Это распространённая практика, которая называется chainable methods (методы, которые можно выстраивать в цепочку)
+1
В PHP все объекты передаются по ссылке, нельзя передать объект по значению без клонирования, а возврат значения сделали для реализации FluentInterface скорее всего, чтобы можно было делать цепочку вызовов.
+2
Ну скорее объекты в PHP передаются через указатель на указатель. Для передачи его по ссылке надо использовать "&".
P.S. Передача объекта по ссылке — это очередная путаница в документации, такая же как и со "свойствами", которых в PHP просто нет и такая же как и с Closure, который является анонимной функцией, а замыканием лишь в частных случаях (за исключением короткого синтаксиса).
+1
Откровенно странная проблема… и не могу сказать чтобы текущее поведение DateTime меня напрягао… Работает согласно документации — в чем проблема вообще?
+2
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Перестаньте использовать DateTime