Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 测试可能为array/empty array/false的变量_Php_Arrays - Fatal编程技术网

Php 测试可能为array/empty array/false的变量

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

我有一个函数,它将从某个数据库执行SELECT查询,并返回以下任一结果:

  • 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