Размер имеет значение

Такая ещё вещь в ПХП вызывает мою искреннюю печаль. В руководстве написано, что при приведении переменной к булевскому типу, строка «"0"» трактуется как false:
var_dump( (bool) "0"); // false
var_dump( (bool) "00"); // true
Сделано это по определённым причинам. ПХП, исторически, был языком не просто для чайников, а для фанерных чайников, когда снаружи приходят параметры в GET или POST запросе, ПХП их раскладывает в специальные переменные, но все данные имеют тип «строка» (иногда — массив строк).

Дальше, и тут есть своя логика, если снаружи приходит ноль, ПХП решает (типизации-то данных запросов нет), что программист в своей ХТМЛ-форме имел ввиду число ноль и ведёт себя соответствующе. Благодаря этому «if ($variable_from_get) {}» ведёт себя «правильнее».

Поэтому я называю ПХП языком не с «динамическим приведением типов», а с «нестабильным приведением типов». Потому что его правила приведения содержат исключения.

Такой «строковый ноль» может привести к сюрпризам:
var_dump(array_filter( [ 0, null, false, "00", "0" ])); // останется один элемент — "00"
var_dump(in_array("0", [ false ])); // true
Или вот, например, поведение конструкции «empty» с той же строкой (именно из документации по этой конструкции я узнал о существовании такого нуля, ещё в ПХП3):
$z = "0"; $zz = "00";
var_dump(empty($z)); // true
var_dump(empty($zz)); // false
При этом, один пробел и всё, ноль перестаёт быть «магическим»:
var_dump(in_array(" 0", [ false ])); // false
6 мая 2012 08:01

ef_end_y (инкогнито)
6 мая 2012, 09:57

В перле аналогично:
perl -e"print 'ok' if '00'"

bolk (bolknote.ru)
6 мая 2012, 13:04, ответ предназначен ef_end_y

Да, я помню это.

Alexander Arkhireyev (totus.livejournal.com)
6 мая 2012, 14:04

Давеча Илья Бирман выкладывал ссылку на достаточно интересный "обзор" PHP:
http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/

bolk (bolknote.ru)
6 мая 2012, 16:48, ответ предназначен Alexander Arkhireyev (totus.livejournal.com):

http://bolknote.ru/2012/04/16/~3635

Denis Ibaev (dionys.myopenid.com)
9 мая 2012, 22:58, ответ предназначен bolk (bolknote.ru):

Да, я помню это.
Тогда историческими причинами, возможно, является наследие Perl, а не ориентация на чайников.

bolk (bolknote.ru)
11 мая 2012, 20:06, ответ предназначен Denis Ibaev (dionys.myopenid.com):

Да, но в ПХП «власть нуля» намного шире, я же описал ещё случаи.

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)