0
if($getstatus->num_rows != 0 && $getstatusarr = $getstatus->fetch_assoc() && $getstatusarr["Type"] != $data["type"])
    echo "error"
else
    ...

第一个代码不起作用,要以这种方式工作,请参阅Nin 的帖子

是否可以轻松制作代码?

我也可以这样做:

if($getstatus->num_rows != 0)
    $getstatusarr = $getstatus->fetch_assoc();
    if($getstatusarr["Type"] != $data["type"]) {
        echo "error"
        $error = true;
    }
if(!$error) {
    ...
}

通过省略号我有太多的代码行:)

补充说: 我也可以这样做:

if($getstatus->num_rows != 0) {
    $getstatusarr = $getstatus->fetch_assoc();
    if($getstatusarr["Type"] != $data["type"]) {
        echo "error";
        goto skip;
        }
}
... // some code which I need not to execute if $getstatusarr["Type"] != $data["type"] are true
skip:
// another code which will execute in all cases
4

2 回答 2

1

从我的角度来看,最好尽可能多地解开语句并清理代码,也许以后有人将不得不阅读你所做的事情,而他将很难做到这一点。

您也不能在这样的 if 语句中分配新变量:

$error = false;
if($getstatus->num_rows)
    $getstatusarr = $getstatus->fetch_assoc();
    if($getstatusarr["Type"] != $data["type"]) {
        $error = array('type' => 'invalid type');
    }
}

if($error) {
    // do something with $error array
}
于 2012-10-09T10:49:18.243 回答
1

好吧,不要使用 goto ::)

将所有 if 放在一行还是几行主要取决于个人喜好。

if 的行数过多会使代码更难阅读,但将它们全部放在一行上也会使其难以阅读和调试(第 12 行的错误可能意味着很多事情)。如果您使用的是 xdebug 或 Zend debug 之类的调试器,那么多行跳过也更容易。

所以在这之间找到一种方法。

我会这样做,从那时起您还检查 fetch_assoc() 是否返回结果:

if($getstatus->num_rows != 0 && $getstatusarr = $getstatus->fetch_assoc())
    if($getstatusarr["Type"] != $data["type"]) {
        echo "error"
        $error = true;
    }
if(!$error) {
    ...
}
于 2012-10-09T11:23:38.013 回答