2014-10-29 58 views
-1

如何寫這段代碼更幹?有什麼讓我感到不安。我正在使用OR條件檢查類別和帖子是否爲空。不過,我必須在登錄後再次檢查這兩個條件。你的...幹PHP如果塊

 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(); 
      } 
     } 
+1

我覺得這真是一個多風格programmers.stackexchange問​​題也許。有人可以遷移它? – GordonM 2014-10-29 11:39:55

+1

甚至代碼審查? – wavemode 2014-10-29 11:44:57

回答

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(); 
     } 
    } 
0
if(isset($_POST['username']) && isset($_POST['password'])) { 
    if($app->login($_POST)) { 
     ($app->getCategories() ? '' : $app->installCategories()); 
     ($app->getPosts() ? '' : $app->installPosts()); 
    } 
} else { 
    echo $app->login(); 
} 
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();   
    } 
} 
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(); 
    } 
}