Php 测试可能为array/empty array/false的变量
我有一个函数,它将从某个数据库执行SELECT查询,并返回以下任一结果:Php 测试可能为array/empty array/false的变量,php,arrays,Php,Arrays,我有一个函数,它将从某个数据库执行SELECT查询,并返回以下任一结果: false(如果出现错误) 空数组数组(0){} 关联数组 为了测试此函数的返回值,是否最好执行以下操作: $someVar = $this->someFunction(); if ($someVar) { // ok, this is an associative array of result } else { // $someVar = false OR $someVar is an em
(如果出现错误)false
- 空数组
数组(0){}
- 关联数组
$someVar = $this->someFunction();
if ($someVar) {
// ok, this is an associative array of result
} else {
// $someVar = false OR $someVar is an empty array
}
或者我必须做这样的事情:
$someVar = $this->someFunction();
if (is_array($someVar) && count($someVar) > 0) {
// ok, this is an associative array of result
} else {
// $someVar = false OR $someVar is an empty array
}
第一次测试似乎做了我想要的,但也许我错过了一些可能会出错的东西
那么,像我在第一个示例中所做的那样测试阵列是否是一种良好的做法呢。测试所有三种情况:
if (false === $result) {
die('There is an error!');
} elseif (empty($result)) {
die('No results found');
}
foreach ($result as $foo) { ... }
如果您真的只想测试两个,那么请记住foreach
将在空数组中工作。因此,这将起作用:
if (false === $result) {
die('There was an error!');
}
foreach ($result as $foo) { ... }
或:
当$result是一个空数组时,最后这些示例只给出一个空页面。第一个例子会说没有结果。也没有。测试所有三种情况:
if (false === $result) {
die('There is an error!');
} elseif (empty($result)) {
die('No results found');
}
foreach ($result as $foo) { ... }
如果您真的只想测试两个,那么请记住foreach
将在空数组中工作。因此,这将起作用:
if (false === $result) {
die('There was an error!');
}
foreach ($result as $foo) { ... }
或:
当$result是一个空数组时,最后这些示例只给出一个空页面。第一个例子会说没有结果。
空数组的计算结果为false。具有值的数组的计算结果为true(即使所有值都将单独计算为false)
您还可以检查if(empty($array))
,但这样做是多余的,除非您担心未设置数组变量
最后,如果数组为空,$array==false
为真,但$array==false
为假。
空数组的计算结果为false。具有值的数组的计算结果为true(即使所有值都将单独计算为false)
您还可以检查if(empty($array))
,但这样做是多余的,除非您担心未设置数组变量
最后,如果数组为空,
$array==false
为真,但$array==false
为假。根据类型比较文档,第一种方法完全可以接受。空数组的计算结果始终为FALSE
文件:
也就是说,您可以选择以不同方式处理任何结果和错误,例如将错误消息记录到服务器日志中。在这种情况下,您可能需要多个
if()
条件。根据有关类型比较的文档,您的第一种方法是完全可以接受的。空数组的计算结果始终为FALSE
文件:
也就是说,您可以选择以不同方式处理任何结果和错误,例如将错误消息记录到服务器日志中。在这种情况下,您可能需要多个if()
条件。两者都不需要
返回false
以指示错误在非常低的级别上是可以的,但是在低级查询和应用程序代码之间应该有一个层,它检查返回值并在false
上引发异常。调用代码的顶级控制器应该处理这些异常(之前没有捕获到),并在生产中显示用户友好的错误页面,或者在开发中转储调试信息,同时记录错误
绝对不可能在应用程序中执行三向if/elseif/else
分支来检查每个数据库查询的返回值。这是一种非常过时的检查错误的方法
抛出异常,您可以使用第一个表单(if($someVar)
),或者更好的是:
foreach ($this->someFunction() as $key => $row) {
}
都不是
返回false
以指示错误在非常低的级别上是可以的,但是在低级查询和应用程序代码之间应该有一个层,它检查返回值并在false
上引发异常。调用代码的顶级控制器应该处理这些异常(之前没有捕获到),并在生产中显示用户友好的错误页面,或者在开发中转储调试信息,同时记录错误
绝对不可能在应用程序中执行三向if/elseif/else
分支来检查每个数据库查询的返回值。这是一种非常过时的检查错误的方法
抛出异常,您可以使用第一个表单(if($someVar)
),或者更好的是:
foreach ($this->someFunction() as $key => $row) {
}
@yes123:当您意外地只有一个=而不是两个=时,此反向顺序可以防止输入错误。然后它将导致一个解析错误,而不是一个很难找到的bug。嗯,你现在可以改变我的想法了。。即使如此,我也必须承认,这是非常难看的that@yes123:当您意外地只有一个=而不是两个=时,此反向顺序可以防止输入错误。然后它将导致一个解析错误,而不是一个很难找到的bug。嗯,你现在可以改变我的想法了。。尽管我必须承认,看到这一点很难看,也许我应该在这里给出上下文,但它将在批处理脚本中使用,输出通过crontab的邮件发送给我。不过,没有理由懒惰,我将通过PDO异常处理错误。谢谢你的回答,它真的很有帮助。也许我应该在这里给出上下文,它将用于批处理脚本,输出通过crontab的邮件发送给我。不过,没有理由懒惰,我将通过PDO异常处理错误。谢谢你的回答,它真的很有帮助。这正是我最初寻找的文档页面,但没有找到@最后,meagar的答案是最有用的,但是+1对于您和@aj,这正是我最初寻找的文档页面,没有找到@meagar的回答最终是最有用的,但对你和@AJ来说+1