Правильная проверка на пустоту переменной?

Можете сказать как правильно делать проверку на пустоту переменной?
А точнее, нужно сделать проверку, что бы переменная не была пустой. Ну у каждой проверки я нашел минус, поэтому скажите как правильно проверять переменную?

$text = $_POST['text'];
if (isset($text)) {} //если переменная ровна пустоте, то проверка проходит
if (!empty($text)) {} //если переменная равна 0 0.0 '0' то проверка не проходит
if ($text !== '') {} //если переменная равна null то проверка проходит
if ($text) {} //если переменная равна 0 0.0 '0' то проверка не проходит

Как правильно проверять? Скажите, очень хочу в этом моменте разобраться раз и навсегда)
  • Вопрос задан
  • 52803 просмотра
Решения вопроса 3
FanatPHP
@FanatPHP
Чебуратор тега РНР
Читая ответы, хочется плакать.

В кои-то веки нашелся автор, который осилил корректно сформулировать свою проблему: в дополнение к стандартной проверке РНР, ему надо отбрасывать и нули тоже. Казалось бы - прочти и сделай по заказанному.

Но нет. Один герой все бубнит про "это исходит от Вашей задачи" (при том что задача описана!) и дальше пишет бессмысленный код. Второй, по своей стародавней привычке, просто с умным видом пишет бессмыслицу. С третьего взятки гладки - типичное похапешное создание, пишет код не приходя в сознание.

И при этом никто (включая автора) почему-то не догадался тупо перечислить условия задачи:
!($var || $var === 0 || $var === 0.0 ||$var === '0')) ...

Не говоря уже о том, что подумав, можно сообразить, что автора интересует длина строки. И написать код, который корректно, но не столь императивно следует всем условиям задачи:
function is_empty(&$var)
{
    return !($var || (is_scalar($var) && strlen($var)));
}

Самое печальное, что писать это всё - пустая трата времени.
Серая похапешнаая масса так и останется серой массой, не понимающей языка, на котором она пишет, но всегда готовой дать совет ближнему.
Ответ написан
KorsaR-ZN
@KorsaR-ZN
Начну с различия между isset и empty.

isset - проверяет на существование переменной или индекса в массиве, т.е она будет ВСЕГДА true, если значение отлично от NULL, именно от константы null, т.е '', 0, "\0" и т.д, будет считаться существующей переменой, false будет только при присвоение ей null или unset($var), во всех остальных true

empty - проверят именно на пустоту переменной, т.е возвращает true если переменная является пустой и false в противоположном случаи.

В PHP пустотой считаются следующие значения:
  • ""
  • 0
  • 0.0
  • "0"
  • null
  • false
  • array() (пустой массив)
  • $var; (переменная объявлена, но не имеет значения)


Что касается проверки на пустоту и как ее правильно делать, то это исходит от Вашей задачи, и что должно для Вас является пустотой, но в большинстве случаем подойдет такая проверка:
if(isset($var) && $var !== '')  {
// $var не null и не  ''.
}

Еще больше поможет разобраться в сравнение типов, это таблица сравнение типов PHP
Ответ написан
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
Практически для всех случаев подходит empty()
Очень редко переменная может быть нулем, тогда делаю дополнительно empty(var) или var == 0

В общем-то все. Все остальные варианты уж едавно остались в прошлом.

isset подходит для проверки пустых $_GET, больше нигде не применяю.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы