Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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), вы не сможете передать переменную undefined в пользовательские функции по значению. И, как указывает меркатор, вы всегда должны использовать E_ALL, чтобы соответствовать лучшим практикам. Эта ссылка (комментарий № 11), в которой содержится информация о том, почему вы не должны использовать любую форму подавления ошибок для повышения производительности и удобства обслуживания/отладки.

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

Ответ 3

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

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

Ответ 4

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

}

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

Ответ 5

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

Ответ 6

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

        return true;
    }

    return false;
}

Ответ 7

Если ($ var!= null)