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

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;
 }
4b9b3361

Ответ 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()