gpt4 book ai didi

php - isset vs 空 vs is_null

转载 作者:行者123 更新时间:2023-11-29 16:15:25 24 4
gpt4 key购买 nike

我正在尝试编写一个脚本,当用户上传文件但未输入名称时,会返回错误。我尝试过使用 is_null、empty 和 isset,但它们都不起作用。例如,下面,即使输入了名称,is_null 也会返回错误。有人可以帮忙吗?

$caption = $_REQUEST[$name_input_name];

if(is_null($caption)) {
$file->error = 'Please Enter a Title';
return false;
}

最佳答案

is_null()如果未设置变量,则发出警告,但 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() function documentation page你可以读到:

The following things are considered to be empty:

....

$var; (a variable declared, but without a value)

代码 $var; 可能会产生误导定义了一个变量,但没有给它赋值,但这是错误的。变量$var仍然未定义并且类型识别函数,例如 is_null()如果您通过 $var 则会发出警告作为一个论点。

但这对于 Unresolved 类或对象属性来说是不合适的。声明它们而不分配某些值会自动分配 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()type recognizer function ,例如is_numeric , is_recource , is_bool等。并且将像带有操作码 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);
}

关于php - isset vs 空 vs is_null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54851836/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com