empty()分离如何工作?

时间:2017-12-16 13:37:54

标签: php

我有这些if statements empty()函数与变量$a, $b, $c

if (empty($a . $b . $c)) {echo 'empty.dot';}

if (empty($a && $b && $c)) {echo 'empty';}


if (!empty($a . $b . $c)) {echo 'filled.dot';}

if (!empty($a && $b && $c)) {echo 'filled';}

我得到了一个奇怪的结果,测试它们如下:

case[1]:
$a = '1';
$b = '1';
$c = '1';
result:
fillted.dot, filled

case[2]:
$a = '1';
$b = '';
$c = '1';
result:
empty, fillted.dot

case[3]:
$a = '';
$b = '';
$c = '';
result:
empty.dot, empty

我不明白的是

为什么在case[2]我同时获得empty($a && $b && $c)!empty($a . $b . $c) = TRUE

2 个答案:

答案 0 :(得分:2)

empty并不关心填充表达式。为了使行为更加明显,也不要这样做。将表达式分解为实际操作:

$and = $a && $b && $c;
$cat = $a . $b . $c;

var_dump( empty($and) );
var_dump( empty($cat) );

而且很明显为什么

  1. (1 && "" && 1)FALSE,因此empty(FALSE)TRUE
  2. !empty("11")返回TRUE

答案 1 :(得分:1)

empty函数(或类似函数的函数)没有看到您使用的不同变量。与任何函数一样,它会看到您传入的单个值。

所以我们首先需要看一下表达式:

$a && $b && $c

这会将每个变量视为布尔值,如果所有三个值都为真,则计算结果为truefalse如果其中任何值为false-ish。在您使用的测试用例中,'1'将被视为true,''将被视为false。

$a . $b . $c

将每个变量视为一个字符串,并将它们连接成一个更长的字符串。

要查看empty正在测试的值,只需替换为var_dump