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

最初のコードは機能しません。この方法で機能させるには、ニンの投稿を参照してください

簡単にコードを作ることはできますか?

また、私はこのようにすることができます:

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

まあ、gotoを使わないでください: :)

すべての if を 1 行にするか複数行にするかは、ほとんど個人的な好みです。

if の行が多すぎるとコードが読みにくくなりますが、すべてを 1 行にまとめると読みにくくなり、デバッグも難しくなります (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 に答える
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 に答える