DRY PHP if block

时间:2014-10-29 11:30:15

标签: php if-statement dry

如何编写这段代码更干?有些东西让我很烦恼。我正在使用OR条件检查类别和帖子是否为空。但是我必须在登录后再次检查这两个条件。此致...

        if($app->getCategories()==null || $app->getPosts()==null )
        {
            if(isset($_POST['username'])&& isset($_POST['password']))
            {
                if($app->login($_POST)!=false)
                {
                    if($app->getCategories()==null)
                    {
                        $app->installCategories();
                    }
                    if($app->getPosts()==null)
                    {
                        $app->installPosts();
                    }
                }
            }
            else
            {
                echo $app->login();
            }   
        }

4 个答案:

答案 0 :(得分:1)

作为一种优化方法,我建议创建逻辑变量,以避免两次执行getCategoriesgetPosts方法。

对于我而言,如果不了解您的应用业务逻辑,很难为您的代码建议其他重构。

    $noCategories = $app->getCategories() == null;
    $noPosts      = $app->getPosts() == null;

    if($noCategories || $noPosts) {

        if(isset($_POST['username']) && isset($_POST['password'])) {

            if($app->login($_POST)!=false) {

                if($noCategories)                    
                    $app->installCategories();

                if($noPosts)                    
                    $app->installPosts();                    
            }
        }
        else {
            echo $app->login();
        }   
    }

答案 1 :(得分:0)

if(isset($_POST['username']) && isset($_POST['password'])) {
    if($app->login($_POST)) {
        ($app->getCategories() ? '' : $app->installCategories());
        ($app->getPosts() ? '' : $app->installPosts());
    }
} else {
    echo $app->login();
}

答案 2 :(得分:0)

可能会尝试这样:太多嵌套ifs由于多种原因而很糟糕:(

$categories = $app->getCategories(); 
$posts = $app->getPosts();

if($categories == null || $posts == null) {

    if(! isset($_POST['username']) || ! isset($_POST['password'])) {
        echo $app->login();
    }

    if($app->login($_POST) != false && $categories == null) {
        $app->installCategories();
    }

    if($app->login($_POST) != false && $posts == null) {
        $app->installPosts();           
    }
}

答案 3 :(得分:0)

$isCategoriesNull = $app->getCategories() == null;
$isPostsNull = $app->getPosts() == null;
$postKeysToCheck = ['username', 'password'];

if ($isCategoriesNull || $isPostsNull) {
    if (!array_diff($postKeysToCheck, array_keys($_POST))) {
        if ($app->login($_POST) != false) {
            if ($isCategoriesNull) $app->installCategories();
            if ($isPostsNull) $app->installPosts();
        }
    } else {
        echo $app->login();
    }
}