Isset vs empty vs is_null
Я пытаюсь написать script, что когда пользователь загружает файл и не вводит имя, возвращается ошибка. Я пробовал использовать is_null, empty и isset, и все они не работают. Например, is_null возвращает ошибку, даже если имя введено. Может ли кто-нибудь помочь?
$caption = $_REQUEST[$name_input_name];
if(is_null($caption))
{
$file->error = 'Please Enter a Title';
return false;
}
Ответы
Ответ 1
isset()
проверяет, установлена ли переменная, т.е.
<?php
echo isset($var); // false
$var = 'hello';
empty()
проверяет, пуста ли переменная, т.е.
<?php
$emptyString = '';
echo empty($emptyString); // true
is_null()
будет проверять на NULL
, который отличается от пустого, потому что он установлен на NULL
не пустую строку. (NULL может быть запутанной концепцией)
Поскольку ваш заголовок является строкой, я думаю, вы хотите использовать empty()
if (!isset($_REQUEST[$name_input_name]) || empty($_REQUEST[$name_input_name])) {
$file->error = 'Please Enter a Title';
return false;
}
Ответ 2
is_null()
выдает WARNING в случае, если переменная не установлена, но isset()
и empty()
нет.
$a - variable with not null value (e.g. TRUE)
$b - variable with null value. '$b = null;'
$c - not declared variable
$d - variable with value that cast to FALSE (e.g. empty string, FALSE or empty array)
$e - variable declared, but without any value assigned
$a->a - declared, but not assigned object property. ('public $a;')
A::$a - declared, but not assigned static class property.
| $a | $b | $c | $d | $e | $a->a | A::$a |
---------+-------+-------+-------+-------+-------+-------+-------+
is_null()| FALSE | TRUE |TRUE*W | FALSE | TRUE*W| TRUE | TRUE |
---------+-------+-------+-------+-------+-------+-------+-------+
isset() | TRUE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE |
---------+-------+-------+-------+-------+-------+-------+-------+
empty() | FALSE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE |
---------+-------+-------+-------+-------+-------+-------+-------+
null === | FALSE | TRUE |TRUE*W | FALSE | TRUE*W| TRUE | TRUE |
---------+-------+-------+-------+-------+-------+-------+-------+
null == | FALSE | TRUE |TRUE*W | TRUE | TRUE*W| TRUE | TRUE |
---------+-------+-------+-------+-------+-------+-------+-------+
TRUE*W - function return TRUE, but same time emits WARNING.
На странице документации функции empty() вы можете прочитать, что:
Следующие вещи считаются пустыми:
....
$ Var; (объявленная переменная, но без значения)
Это может вводить в заблуждение этот код $var;
Определяет переменную, но не присваивает ей никакого значения, но это неправильно. Переменная $var
по-прежнему не определена, и функции распознавания типов, такие как is_null()
, is_null()
предупреждения, если вы передаете $var
в качестве аргумента.
Но это не правильно для неустановленных свойств класса или объекта. Объявление их без присвоения какого-либо значения автоматически присваивает NULL.
UPD Типизированные свойства в PHP 7.4 НЕ присваиваются NULL по умолчанию. Если вы не установите для них никакого значения, они считаются неназначенными.
Некоторые описания низкого уровня:
isset()
и empty()
являются основными функциями, которые будут скомпилированы непосредственно в конкретный код операции в соответствии с типом zval:
ZEND_ISSET_ISEMPTY_THIS
ZEND_ISSET_ISEMPTY_CV
ZEND_ISSET_ISEMPTY_VAR
ZEND_ISSET_ISEMPTY_DIM_OBJ
ZEND_ISSET_ISEMPTY_PROP_OBJ
ZEND_ISSET_ISEMPTY_STATIC_PROP
Кроме того, они будут компилироваться той же функцией zend_compile_isset_or_empty
Функция is_null()
является функцией распознавания типов, такой как is_numeric
, is_recource
, is_bool
и т.д. И будет вызываться как пользовательская функция с INIT_FCALL_BY_NAME/DO_FCALL_BY_NAME
операций INIT_FCALL_BY_NAME/DO_FCALL_BY_NAME
и так далее.
/* {{{ proto bool is_null(mixed var)
Returns true if variable is null
Warning: This function is special-cased by zend_compile.c and so is usually bypassed */
PHP_FUNCTION(is_null)
{
php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_NULL);
}
Ответ 3
Исеть()
Из руководства PHP - isset():
isset - определить, установлена ли переменная и не является NULL
Другими словами, он возвращает true только тогда, когда переменная не равна нулю.
пустой()
Из PHP Manual - empty():
empty - определить, пуста ли переменная
Другими словами, он вернет true, если переменная является пустой строкой, false, array(), NULL, "0?, 0" и неустановленной переменной.
is_null()
Из руководства PHP - is_null():
is_null - Определяет, является ли переменная NULL
Иными словами, он возвращает true только тогда, когда переменная имеет значение null. is_null()
противоположно isset()
, за исключением одного отличия, которое isset()
может быть применено к неизвестным переменным, но is_null()
только для объявленных переменных.
Ответ 4
Я думаю, вы хотели использовать isset
, прежде чем назначить ему что-то:
if(!isset($_REQUEST[$name_input_name]))
{
$file->error = 'Please Enter a Title';
return false;
}
$caption = $_REQUEST[$name_input_name];
Ответ 5
Я использую strlen для подсчета количества символов
if (strlen($_REQUEST['name_input_name']) < 1) {
$file->error = 'Please Enter a Title';
return false;
}
Ответ 6
Вы можете попробовать следующее:
if(!isset($_REQUEST['name_input_name']))
{
$file->error = 'Please Enter a Title';
return false;
}
$caption = $_REQUEST['name_input_name'];
Примечание: $_REQUEST - это глобальный массив, который хранит данные в паре ключей = > значение. рассмотрите имя name_input_name как значение, извлеченное из сервера.
если name_input_name установлен в некоторый код значения, будет пропускаться, если блок и сохранить значение переменной $caption.
Ответ 7
is_null - это двойное значение isset, за исключением isset, не выводит извещения, если переменная имеет значение null.
>$ciao;
>var_export(is_null($ciao));
>PHP Notice: Undefined variable: ciao in php shell code on line 1
>true
>var_export(!isset($ciao));
>true
Ответ 8
-
isset() - определить, установлена ли переменная, а не NULL
-
empty() - определить, является ли пустая переменная.
-
is_null() - определить, является ли переменная нулевой
Ответ 9
В этих php-функциях empty(),isset() & is_null
в основном используются для проверки переменных. Но каждая функция имеет разные функционалисты.
Кредиты: empty(), isset(), is_null()