为了验证变量值,我们可以做
if(empty($var)){
}
Run Code Online (Sandbox Code Playgroud)
要么
这将在空字符串上返回true,0表示为number,false,null
if(!$var){
}
Run Code Online (Sandbox Code Playgroud)
这两种方法有什么区别,它们是等价的吗?
编辑:他们表现不同的一些例子将更加实际.
编辑2:从答案中找出的唯一区别是,如果$ var未定义,则第二个将发出通知.他们返回的布尔值怎么样?
EDIT3:对于$ var,我的意思是任何带有任何值的变量,甚至是未定义的变量.
从用户的答案结论:
if(!$var)和empty($var)如这里所描述相当于http://php.net/manual/en/types.comparisons.php,他们将回到同一变量相同的布尔值.
if(!$var)如果$var没有定义,将返回一个php通知,通常不是这种情况(如果我们编写好的代码),大多数IDE都会强调它.
if(!$var)应该没问题empty($var['key'])最好使用empty.问题是,因为!$ vars比空($ vars)短,我们很多人会更喜欢第一种方式
你更喜欢第一个,因为它是一个"短路"?
更短的代码并不意味着更好的代码或更快的脚本!
PHP函数及其各种其他行为的速度不是由函数名的长度决定的.它取决于PHP实际做什么来评估,操作和返回结果.
除此之外,不要选择基于代码长度的方法,选择基于场景的方法和" 针对给定场景 "的最佳方法.
哪个最好取决于你需要什么,除了你提到的两个之外还有其他变量检查(isset()一个).
但问题是它们总是相同的
不,在Stack,Google和php.net上有很多其他答案 - AKA PHP手册!
http://php.net/manual/en/types.comparisons.php
或者,您可以创建一个快速测试脚本,以查看PHP为您的两个方案返回的内容.
所有这些都是为什么我想知道为什么有6个upvotes ...
除此之外,您还可以在框架中初始化变量(或者,可能是独立脚本),这意味着场景会发生变化,您使用的问题和方法也会发生变化.
关于哪个是最好的,这都是背景.
无论如何,要回答你的问题,这里有一些测试:
(!$vars)
示例代码:
if ( !$vars )
{
echo "TRUE";
}
else
{
echo "FALSE";
}
Run Code Online (Sandbox Code Playgroud)
将返回:
注意:未定义的变量:vars in/whatever/on line X
TRUE
但是,如果首先在某个位置初始化脚本中的var:
$vars = "";
$vars = NULL;
$vars = 0;
Run Code Online (Sandbox Code Playgroud)
以上任何一项都将返回:
[没有PHP通知]
TRUE
$vars = "anything";
Run Code Online (Sandbox Code Playgroud)
将返回:
FALSE
这是因为使用感叹号测试var是否为FALSE,所以当没有用字符串初始化时,测试脚本返回TRUE,因为它不是FALSE.
当我们用字符串初始化它时,var NOT为FALSE为FALSE.
empty($vars)
示例代码:
if ( empty($vars) )
{
echo "TRUE";
}
else
{
echo "FALSE";
}
Run Code Online (Sandbox Code Playgroud)
根本没有初始化/设置,以及以下所有内容:
$vars = "";
$vars = NULL;
$vars = 0;
Run Code Online (Sandbox Code Playgroud)
将返回:
TRUE
没有PHP通知使用空,所以这里我们显示两个选项之间的差异(并记得我说最短的代码不一定是"最好的"?取决于场景等).
和之前的测试一样:
$vars = "anything";
Run Code Online (Sandbox Code Playgroud)
返回:
FALSE
这是相同的( !$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提供了不同的选项以满足不同的需求.
从布尔值返回空相当于!:
empty($var) === !$var; // supposed that $vars has been defined here
Run Code Online (Sandbox Code Playgroud)
从通知/衰弱通知来看,它们并不等同:
empty($array['somekey']); //will be silent if somekey does not exists
!$array['somekey']; // will through a warning if somekey does not exists
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1444 次 |
| 最近记录: |