为验证变量值,我们可以
if(empty($var)){
}
OR
这将在空字符串上返回true,0将作为number返回true,false,null
if(!$var){
}
这两种方法有什么区别,它们是等价的吗?
编辑:他们表现不同的一些例子会更加实际。
EDIT2 :根据答案建立的唯一区别是,如果$ var未定义,第二个将发出通知。他们返回的布尔值怎么样?
EDIT3 :对于$ var,我指的是任何值的变量,甚至是未定义的变量。
用户答案的结论:
if(!$var)
和empty($var)
与此处http://php.net/manual/en/types.comparisons.php相同,它们将在同一个变量上返回相同的bool值。
if(!$var)
, $var
将返回php通知,通常情况并非如此(如果我们编写好的代码),大多数IDE都会强调它。
if(!$var)
应该没问题empty($var['key'])
最好使用空。答案 0 :(得分:5)
问题在于,因为!$ vars比空($ vars)短,我们很多人会更喜欢第一种方式
你更喜欢第一个,因为它是一个“短路”? 更短的代码并不意味着更好的代码或更快的脚本!
PHP函数及其各种其他行为的速度不取决于函数名的长度。它取决于PHP实际做什么来评估,操作和返回结果。
除此之外,不要选择基于代码长度的方法,选择基于场景的方法和最佳方法“用于给定场景”。
哪个最好取决于你需要什么,除了你提到的两个之外还有其他变量检查(isset()
为一个)。
但问题是它们总是等同于
不,Stack,Google和php.net上还有很多其他答案 - 这是PHP手册! http://php.net/manual/en/types.comparisons.php
或者,您可以创建一个快速测试脚本,以查看PHP为您的两个方案返回的内容。
所有这些都是为什么我想知道为什么有6个赞成...
除此之外,您还可以在框架中初始化变量(或者,可能是独立脚本),这意味着场景会发生变化,您使用的问题和方法也会如此。
关于哪个是最好的,这都是背景。
无论如何,要回答你的问题,这里有一些测试:
<强> (!$vars)
强>
示例代码:
if ( !$vars )
{
echo "TRUE";
}
else
{
echo "FALSE";
}
将返回:
注意:未定义的变量:vars in / whatever / on X行
是的
但是,如果首先在某个地方初始化脚本中的var:
$vars = "";
$vars = NULL;
$vars = 0;
以上任何一项都会返回:
[没有PHP通知]
是的
$vars = "anything";
将返回:
错误
这是因为使用感叹号测试var是否为FALSE,所以当没有用字符串初始化时,测试脚本返回TRUE,因为它不是FALSE。
当我们用字符串初始化它时,var NOT为FALSE为FALSE。
empty($vars)
示例代码:
if ( empty($vars) )
{
echo "TRUE";
}
else
{
echo "FALSE";
}
根本没有初始化/设置,以及以下所有内容:
$vars = "";
$vars = NULL;
$vars = 0;
将返回:
是的
没有使用空的PHP通知,所以这里我们展示了两个选项之间的区别(并记得我说最短的代码不一定是“最好的”?取决于场景等)。
与之前的测试一样:
$vars = "anything";
返回:
错误
这与( !$var )
相同,您正在测试IF EMPTY,并且根本没有初始化var,或者没有任何“empty()
”值:例如(“”)或NULL,或者为零(0),然后测试var是否为空是TRUE,所以我们得到TRUE输出。
将var设置为字符串时会出现FALSE,因为IS EMPTY = FALSE,因为我们将其设置为某个值。
差异是empty()
在未定义var时不会抛出PHP通知,而(!$var)
则会抛出。
此外,您可能更喜欢将其作为“较短的代码”,但我认为if ( !$var )
看起来很丑陋,并不像if ( empty($var) )
那样简单易见。
但同样,这取决于场景 - PHP提供了不同的选项以满足不同的需求。
答案 1 :(得分:3)
不,他们不平等
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()函数
时,以下值被视为空正如您可以阅读empty文档
empty()基本上是!areset($ var)||的简洁等价物$ VAR == false。
答案 2 :(得分:1)
主要区别在于如果变量不存在则empty()不会抱怨,而使用!会产生警告。
在旧版本的PHP中,empty()仅适用于直接变量,这意味着这将失败:
empty($a && $b);
这已在5.5
中更改答案 3 :(得分:1)
他们不是。 第一个验证$ var是否有任何值。 第二个验证为布尔值 - 如果是或否。
第二个会给你一个通知,如果$ var的值为空,第一个将为真。
如果您想验证$ 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>';
使用此功能查看通知
error_reporting(-1);
ini_set('display_errors', 1);
答案 4 :(得分:1)
官方手册包含有关此主题的所有信息:
http://php.net/manual/en/types.comparisons.php
if (!$var)
是最后一列,boolean : if($x)
否定。
正如您所看到的那样,但 empty
如果未设置变量,则不会抱怨。
从手册:
empty() does not generate a warning if the variable does not exist
花些时间研究那张图表。
答案 5 :(得分:1)
据我所知,这很简单。
empty()
基本上等同于!isset($var) || !$var
并且不会抛出任何警告/通知,而如果变量未定义则仅使用!$var
将发出通知。
为了完整起见,使用empty()
:
0
,0.0
,'0'
(int,float,string)null
false
答案 6 :(得分:0)
从布尔值返回空是等于!:
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