Проверка переменой на пустоту!

Мизантроп777

Новичок
Здравствуйте.
Ппц.... А я всегда писал так код)
Недавно обнаружил, что если проверять переменную на пустоту, при помощи empty(), то переданный ей НОЛЬ, даже если этот ноль передан как строка, функция empty() определяет как пустая строка.
Разумеется, я сразу полез на php.net и много полезного вычитал о конструкции empty()

И вот сейчас у меня появился вопрос: Как лучше определить переменную на пустоту? В голове только две мысли, но какая целесообразнее - не знаю.
1. $msg != ""
2. strlen($msg)

Как вообще нужно проверять переменную на пустоту?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
как ни странно, писать empty($string)
 

Фанат

oncle terrible
Команда форума
Первое по очевидным причинам не будет работать, а второе годится не для всех типов переменных.

Если ноль для тебя не пустота, то можно так
PHP:
function is_empty(&$var)
{
    return !($var || (is_scalar($var) && strlen($var)));
}
 
Последнее редактирование:

С.

Продвинутый новичок
Специфика высокоуровневой веб-разработки диктует избегание того, чтобы 0, "0", '' и т.п. расценивались как разные данные. В низкоуровневом API -- пожалуйста, а в обращении с пользовательскими данными надо избегать такой неоднозначности. Ну и язык соответственно к этому подталкивает.
 

Мизантроп777

Новичок
С., То, что я сегодня узнал о конструкции empty() разочаровало меня, теперь я не вижу в ней особого смысла!
 

Фанат

oncle terrible
Команда форума
Смысл конструкции empty() неотделим от смысла языка РНР.
empty() во всем аналогична проверке !$var, за исключением того, что добавляет ещё isset().

Если ты не видишь смысла в empty(), то не должен использовать в проверках и $var, а в широком смысле - приведение типов вообще.
Возможно, тебе нужен другой язык
 

Ярослав

Новичок
Ярослав, по ссылке, а не ссылку. Какой смысл передавать по значению?
Еврей?

Если идет передача по ссылке, значит функция может менять значение аргумента. А для чего функции is_empty это делать?
1. Преимуществ передачи аргумента по ссылке, в данном случаи 0
2. Вурдалак, привел еще один против
 

hell0w0rd

Продвинутый новичок
Ярослав, нацист?
С того, что в php нет константных ссылок, а передавать по значению - глупо.
 

Ярослав

Новичок
Аргументируй

С того, что в php нет константных ссылок, а передавать по значению - глупо.
Почему? На что это влияет? Зачем заморачиваться с передачей по ссылке?

Тест старый http://habrahabr.ru/post/43489/ и как сейчас незнаю, но полагаю что ситуация мало изменилась.
А поэтому, почему не использовать передачу по ссылке только тогда, когда действительно необходимо изменять переменную?
В варианте, что ты приводиш, необходимо всегда передавать по ссылке. Нахрена?
 
  • Like
Реакции: AmdY

Фанат

oncle terrible
Команда форума
Круто, тут заварушка какая-то! Сажусь в первый ряд!
 

hell0w0rd

Продвинутый новичок
Аргументируй


Почему? На что это влияет? Зачем заморачиваться с передачей по ссылке?

Тест старый http://habrahabr.ru/post/43489/ и как сейчас незнаю, но полагаю что ситуация мало изменилась.
А поэтому, почему не использовать передачу по ссылке только тогда, когда действительно необходимо изменять переменную?
В варианте, что ты приводиш, необходимо всегда передавать по ссылке. Нахрена?
угу, ты прав. php не будет копировать, по скорости работы в статье либо устарело, либо гон, сейчас одинаково.
 

Фанат

oncle terrible
Команда форума
Ладно, если кроме шуток, то передача в сибирскую ссылку - это старый трюк для обхода ошибки при проверке несуществующей переменной.

Что является весьма актуальной задачей при поиске альтернатив empty(), поскольку этот оператор, в сущности, только для таких переменных и нужен.
 
Последнее редактирование:

scorpion-ds

Новичок
Вспомнил как на собеседовании завалил вопрос, что вернет функция empty если ей передать "0", ответил, что false. Правда спрашивающие тоже не знали ответа и начали спорить между собой ... :confused:
 
Сверху