PHP嵌套if语句 - 有更好的方法吗?

时间:2014-03-14 16:59:25

标签: php

我能否以更好理解/更合乎逻辑的方式嵌套这些PHP IF?

 if (isset($_GET['numberofwelds']) && isset($_GET['numberofconwelds']))
    {
        $numwelds = $_GET['numberofwelds'];
        $numconwelds = $_GET['numberofconwelds'];

        if (is_int($numwelds) && is_int($numconwelds))
        {
            $total = $numwelds + $numconwelds;
            $response = json_encode($total);
            header(“Content-Type:application/json”);  
            echo $response;
            exit;
        }
    }

4 个答案:

答案 0 :(得分:2)

您可以使用三元语句使其更好一些。逻辑是相同的,但你可以减少所需的行数,但代价是可读性。

需要注意的其他一些要点:

  • 你有聪明的报价。 "不同。前者不会被PHP解析 - 很可能会引发内部服务器错误。

  • 不要使用is_int() - 它会骗你。当您处理用户输入数据时,您将从$_POST$_GET超全局数组中获取它。所有这些值都将存储为字符串。 is_int()将包含数字的字符串视为字符串,例如"42",并返回false。请改用is_numeric()

更新的代码:

$numwelds = isset($_GET['numberofwelds']) ? $_GET['numberofwelds'] : '';
$numconwelds = isset($_GET['numberofconwelds']) ? $_GET['numberofconwelds'] : '';

if (is_numeric($numwelds) && is_numeric($numconwelds))
{
    $total = $numwelds + $numconwelds;
    $response = json_encode($total);
    header("Content-Type: application/json");  
    echo $response;
    exit;
}

答案 1 :(得分:1)

您可以在第一个if中进行检查。第一个条件检查两个字段是否存在,第二个检查类型。

if ( (isset($_GET['numberofwelds']) && isset($_GET['numberofconwelds'])) &&
     (is_int($_GET['numberofwelds']) && is_int($_GET['numberofconwelds']) )
{
    $numwelds = $_GET['numberofwelds'];
    $numconwelds = $_GET['numberofconwelds'];

    $total = $numwelds + $numconwelds;
    $response = json_encode($total);
    header(“Content-Type:application/json”);  
    echo $response;
    exit;
}

答案 2 :(得分:0)

首先,你可以像许多IDE(例如PHPStorm)那样反转条件告诉你,所以你可以这样做:

if (!isset($_GET['numberofwelds']) || !isset($_GET['numberofconwelds'])) {
    exit;
}

$numwelds = $_GET['numberofwelds'];
$numconwelds = $_GET['numberofconwelds'];

if (!is_int($numwelds) || !is_int($numconwelds)) {
    exit;
}

$total = $numwelds + $numconwelds;
$response = json_encode($total);
header("Content-Type:application/json");  
echo $response;

如您所见,嵌套几乎被消除了。但是,我鼓励使用更多功能(或对象)的方式。简单的例子:

if (checkGetData($numwelds, $numconwelds)) {
    $total = $numwelds + $numconwelds;
    $response = json_encode($total);
    header("Content-Type:application/json");  
    echo $response;
    exit;
}

function checkGetData($numwelds, $numconwelds) {
    if (isSetAndNumeric('numberofwelds') 
         && isSetAndNumeric('numberofconwelds')) {
        $numwelds = $_GET['numberofwelds'];
        $numconwelds = $_GET['numberofconwelds'];
        return true;
    }
    return false;
}

function isSetAndNumeric($property) {
    if (isset($_GET[$property]) && is_numeric($_GET[$property])) {
        return true;
    }
    return false;
}

以这种方式编写代码更具可读性,尤其是当项目变得更大,更复杂时。

答案 3 :(得分:-1)

我不是“@”粉丝,但也许

    if($numwelds=@$_GET['numberofwelds'] && $numconwelds=@$_GET['numberofconwelds'] &&         is_int($numwelds) && is_int($numconwelds)) {
            $total = $numwelds + $numconwelds;
            $response = json_encode($total);
            header("Content-Type: application/json");  
            echo $response;
            exit;
    }