PHP:是空的($var)相当于$变量
为了验证变量值,我们可以执行以下操作PHP:是空的($var)相当于$变量,php,Php,为了验证变量值,我们可以执行以下操作 if(empty($var)){ } 或 这将在空字符串上返回true,0作为数字,false,null if(!$var){ } 这两种方法的区别是什么,它们是等效的吗 编辑:一些行为不同的示例将更加实用 EDIT2:与答案的唯一区别在于,如果$var未定义,则第二个答案将抛出通知。它们返回的布尔值呢 EDIT3:对于$var,我指的是具有任何值的任何变量,甚至是未定义的变量 用户回答的结论: 如果(!$var)和empty($var)如本文所述相等,
if(empty($var)){
}
或
这将在空字符串上返回true,0作为数字,false,null
if(!$var){
}
这两种方法的区别是什么,它们是等效的吗
编辑:一些行为不同的示例将更加实用
EDIT2:与答案的唯一区别在于,如果$var未定义,则第二个答案将抛出通知。它们返回的布尔值呢
EDIT3:对于$var,我指的是具有任何值的任何变量,甚至是未定义的变量
用户回答的结论:
如果(!$var)
和empty($var)
如本文所述相等,则它们将在同一变量上返回相同的bool值
if(!$var)
如果未定义$var
将返回一个php通知,通常情况下(如果我们编写了好的代码),大多数IDE都会在它下面加下划线
- 检查简单变量时,
应该正常如果(!$var)
- 检查数组索引($var['key'])或对象属性($var->key)时
最好使用emptyempty($var['key'])
if(empty($var)){
echo "empty used\n";
}
if(!$var){ # line no. 6
echo "! used";
}
将输出
empty used
Notice: Undefined variable: var in /var/www/html/test.php on line 6
! used
使用empty()函数时,下列值被视为空
- “”(空字符串)
- 0(0作为整数)
- 0.0(0作为浮点数)
- “0”(0作为字符串)
- 空的
- 假的
- array()(空数组)
- $var;(声明了一个变量,但没有值)
主要区别在于,如果变量不存在,empty()不会抱怨,而使用!将生成一个警告 在旧版本的PHP中,empty()只对直接变量起作用,这意味着这将失败:
empty($a && $b);
这在5.5中已更改,但没有更改。
第一个验证$var是否有任何值。
第二个验证为布尔值-如果为真或否
第二个将给您一个通知,如果$var的值为空,第一个将为true
如果您希望验证$var是否存在,请使用isset
if( !isset($var) )
echo '$var does not exists!<br>';
if(empty($var))
echo 'The value is empty or does not exists!<br>';
if( !$var )
echo 'Value is false!<br>';
$var = '';
if(empty($var))
echo 'The value is empty or does not exists!<br>';
官方手册包含了您在这方面的所有知识:
if(!$var)
是最后一列,boolean:if($x)
否定
正如您所看到的,它们是相同的,但是如果没有设置变量,empty
不会抱怨
从手册中:
empty() does not generate a warning if the variable does not exist
花点时间,研究一下那个图表。据我所知,它很简单
empty()
基本上等同于!isset($var)| |$var
,不会抛出任何警告/通知,而只使用$如果变量未定义,var
将抛出通知
为完整起见,在使用empty()
时,以下内容被视为空:
0
,0.0
,'0'
(int,float,string)null
false
更短的代码并不意味着更好的代码或更快的脚本;) PHP函数及其各种其他行为的速度不是由函数名的长度决定的。它取决于PHP在评估、操作和返回结果时实际执行的操作 除此之外,不要根据代码长度选择方法,而是根据“给定场景”的场景和最佳方法选择方法。
哪一个最好取决于您需要什么,除了您提到的两个变量检查之外,还有其他变量检查(
isset()
for one)
但问题是它们是否总是等价的
不一定-见
或者创建一个快速测试脚本,查看PHP在两个场景中返回的结果
您还可以在框架中初始化变量(或者,很可能是独立脚本),这意味着场景会发生变化,您的问题和使用的方法也会发生变化
关于哪一个是最好的,这都是有关联的
至于要求的答案。
无论如何,为了回答您的问题,这里有一些测试:
(!$vars)
示例代码:
if ( !$vars )
{
echo "TRUE";
}
else
{
echo "FALSE";
}
if ( empty($vars) )
{
echo "TRUE";
}
else
{
echo "FALSE";
}
将返回:注意:未定义的变量:X行中/任意/上的变量
真的 但是,如果您首先在脚本中的某个位置初始化var:
$vars = "";
$vars = NULL;
$vars = 0;
上述任何一项都将返回:[无PHP通知]
真的 将返回:
假的 这是因为使用感叹号测试的var是否为FALSE,因此当没有使用字符串初始化时,测试脚本将返回TRUE,因为它不是FALSE 当我们用字符串初始化它时,var NOT being FALSE就是FALSE
空($vars)
示例代码:
if ( !$vars )
{
echo "TRUE";
}
else
{
echo "FALSE";
}
if ( empty($vars) )
{
echo "TRUE";
}
else
{
echo "FALSE";
}
完全未初始化/设置,以及以下所有内容:
$vars = "";
$vars = NULL;
$vars = 0;
将返回:真的 使用empty没有PHP通知,所以这里我们展示了这两个选项之间的区别(还记得我说过最短的代码不一定是“最好的”?取决于场景等) 与之前的测试一样:
$vars = "anything";
返回:假的 这与
(!$var)
相同,您正在测试是否为空,并且根本没有初始化var,或者使用任何“EMPTY()
”值:例如(“”),或NULL,或零(0),然后测试var是否为空,这样我们就得到了真输出
将var设置为字符串时会得到FALSE,因为当我们将其设置为某个值时,它为空=FALSE
区别在于
empty()
在未定义var时不会抛出PHP通知,而<
empty($var) === !$var; // supposed that $vars has been defined here
empty($array['somekey']); //will be silent if somekey does not exists
!$array['somekey']; // will through a warning if somekey does not exists