PHP: что является альтернативой empty (), где строка «0» не считается пустой?

Возможный дубликат:
Фиксирование пустой функции PHP

В PHP пустой () – отличный ярлык, потому что он позволяет вам проверить, определена ли переменная и не пуста.

Что бы вы использовали, когда вы не хотите, чтобы «0» (как строка) считалось пустым, но вы все еще хотите, чтобы false, null, 0 и «» считались пустыми?

То есть, мне просто интересно, есть ли у вас собственный ярлык для этого:

if (isset($myvariable) && $myvariable != "") ;// do something if (isset($othervar ) && $othervar != "") ;// do something if (isset($anothervar) && $anothervar != "") ;// do something // and so on, and so on 

Я не думаю, что могу определить вспомогательную функцию для этого, так как переменная может быть неопределенной (и поэтому не может быть передана как параметр).

Это должно делать то, что вы хотите:

 function notempty($var) { return ($var==="0"||$var); } 

Изменить: я думаю, что таблицы работают только в предварительном просмотре, а не в реальных ответах. Поэтому для получения дополнительной информации обратитесь к таблицам сравнения типов PHP .

 notempty (""): false
 notempty (null): false
 notempty (undefined): false
 notempty (array ()): false
 notempty (false): false
 notempty (true): true
 notempty (1): true
 notempty (0): false
 notempty (-1): true
 notempty ("1"): true
 notempty ("0"): true
 notempty ("php"): true

В принципе, notempty () является таким же, как! Empty () для всех значений, кроме «0», для которых он возвращает true .


Изменить: если вы используете error_reporting (E_ALL) , вы не сможете передать неопределенную переменную в пользовательские функции по значению. И, как отмечает mercator, вы всегда должны использовать E_ALL, чтобы соответствовать лучшим практикам. В этой ссылке (комментарий № 11) он обсуждает, почему вы не должны использовать какие-либо формы подавления ошибок для повышения производительности и удобства обслуживания / отладки.

См. Ответ orlandu63 о том, как передать аргументы в пользовательскую функцию по ссылке .

 function isempty(&$var) { return empty($var) || $var === '0'; } 

Ключ – это оператор & , который передает переменную по ссылке , создавая ее, если она не существует.

 if ((isset ($ var) && $ var === "0") ||! empty ($ var))
 {

 }

Таким образом, вы введете if-конструкцию, если переменная установлена ​​AND равна «0», или переменная установлена ​​AND not = null («0», null, false)

Ответ на этот вопрос заключается в том, что невозможно сократить то, что у меня уже есть.

Подавление уведомлений или предупреждений – это не то, что я хочу сделать, поэтому мне нужно будет проверить, были ли empty () или isset () перед проверкой значения, и вы не можете проверить, что что-то пусто () или isset () внутри функции.

 if(isset($var) && ($var === '0' || !empty($var))) { } 
 function Void($var) { if (empty($var) === true) { if (($var === 0) || ($var === '0')) { return false; } return true; } return false; } 

Если ($ var! = Null)