gpt4 book ai didi

php - isset vs empty vs is_null

转载 作者:IT王子 更新时间:2023-10-28 23:53:17 25 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 作为参数传递,变量 $var 仍未定义并且类型识别函数(例如 is_null())会发出警告。

但它不适用于 Unresolved 类或对象属性。声明它们而不分配一些值会自动分配 NULL。

UPD PHP 7.4 中的类型化属性默认情况下不分配 NULL。如果您没有为它们设置任何值,它们将被视为未分配。

一些底层描述:

isset()empty()是核心函数,会根据zval类型直接编译成具体的opcode:

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_numericis_recourceis_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 empty vs is_null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12375833/

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