Проверка непустоты текста в ПХП
Только не бомбите, я для себя.
В ПХП оператор ==
проверяет равенство значений безотносительно типа. Поэтому строка «42» и число 42 с его точки зрения равны.
Это удобно: в большинстве случаев не нужно вообще думать о типах, просто сорок два равно сорока двум. Аналогично равны, например и логическая истина и число 1. Когда важно, чтобы значения были не просто равны, но ещё и совпадали по типу, используется оператор строгого равенства ===
.
Часто важно убедиться, что переменная не пуста. Можно проверить так:
if (@$text) { ... }
Как бы «если текст есть, то». Любая непустая строка приведётся к логически истине, при этом и пустая строка, и null
, и даже неопределённая переменная приведутся ко лжи, и условие не выполнится.
Но есть нюанс. Число 0 тоже приводится к логической лжи. С этим был связан баг в Эгее: если текст заметки состоят целиком из нуля, заметку не получалось сохранить, потому что до одной из таких строчек этот текст доходил в виде числа, и условие не выполнялось. А это вполне легальный текст заметки.
У меня рука не поднимется исправить так:
if (@$text or $text === 0) { ... }
Поэтому теперь я проверяю наличие текста так:
if ((string)
@$text !== '') { ... }
Не так элегантно, как было, но вроде жить можно. Или нет?