Злой ПХП
Недавно у кого-то в комментариях поучаствовал в мини-дискуссии о том чем плох ПХП. Лично я его считаю плохим языком. А сегодня на работе нашлось лишнее подтверждение моей позиции:
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"
}*/
Не только в пхп так, в жабе, например, так же. Вообще, мне вот кажется, что для типа ДатаВремя логично предполагать, что пропущенные поля будут проинициализированы текущими значениями.
Можно, наверное, так на это смотреть, я и сам к этому объяснению склоняюсь. Но оно плохое — метод называется createFromFormat и я ожидаю, что он создаст мне объект из тех данных, что я передал, а текущее время я не передавал! Оно берётся неявно. А неявное хуже явного.
А для меня PHP злой уже из-за своего синтаксиса. Он страшно недружелюбный. Заставляет писать доллары, стрелочки вместо точек, стрелочки вместо двоеточий, str_replace($str) вместо str.replace(), ставить префиксы mb_ к каждой строковой функции. Но какая альтернатива для веба (некорпоративного)? Нет её.
В каком смысле «вместо»? ))
Вот это действительно проблема.
Пайтон, Руби, Джаваскрипт?
Мне кажется хитрая логика создателей была — записывая дату получать всё-таки уникальные значения.
Perl же.