Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

Злой ПХП

Недавно у кого-то в комментариях поучаствовал в мини-дискуссии о том чем плох ПХП. Лично я его считаю плохим языком. А сегодня на работе нашлось лишнее подтверждение моей позиции:

var_dump(DateTime::createFromFormat("d.m.Y", "01.01.1970"));
/*
object(DateTime)#1 (3) {
  ["date"]=>
  string(26) "1970-01-01 18:43:06.000000"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(3) "UTC"
}*/

Совершенно неинтуитивно, что в разобранную дату в данном случае подставится текущее время. У меня даже нет идей для чего это могло бы пригодиться. А чтобы текущее время не подставлялось, нужно использовать символ «восклицательный знак» или «вертикальная черта»:

var_dump(DateTime::createFromFormat("!d.m.Y", "01.01.1970"));
/*
object(DateTime)#1 (3) {
  ["date"]=>
  string(26) "1970-01-01 00:00:00.000000"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(3) "UTC"
}*/
6 комментариев
PastorGL 2018

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

Евгений Степанищев 2018

Можно, наверное, так на это смотреть, я и сам к этому объяснению склоняюсь. Но оно плохое — метод называется createFromFormat и я ожидаю, что он создаст мне объект из тех данных, что я передал, а текущее время я не передавал! Оно берётся неявно. А неявное хуже явного.

Mimokrok 2018

А для меня PHP злой уже из-за своего синтаксиса. Он страшно недружелюбный. Заставляет писать доллары, стрелочки вместо точек, стрелочки вместо двоеточий, str_replace($str) вместо str.replace(), ставить префиксы mb_ к каждой строковой функции. Но какая альтернатива для веба (некорпоративного)? Нет её.

Евгений Степанищев 2018

Заставляет писать доллары, стрелочки вместо точек, стрелочки вместо двоеточий…

В каком смысле «вместо»? ))

…str_replace($str) вместо str.replace(), ставить префиксы mb_ к каждой строковой функции

Вот это действительно проблема.

Но какая альтернатива для веба (некорпоративного)? Нет её.

Пайтон, Руби, Джаваскрипт?

Alexander 2018

Мне кажется хитрая логика создателей была — записывая дату получать всё-таки уникальные значения.

Denis Ibaev 2018

Но какая альтернатива для веба (некорпоративного)? Нет её.

Perl же.