оператор if — СУХОЙ PHP if block

Как написать этот код более сухой? Есть что-то, что меня беспокоит. Я проверяю, являются ли категории и сообщения пустыми, используя условие ИЛИ. Однако я должен проверить эти два условия снова после входа в систему. С уважением …

        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

Решение

В качестве одного из способов оптимизации я бы предложил создать логические переменные, чтобы избежать выполнения getCategories а также getPosts методы дважды.

На мой взгляд, трудно предложить другие рефакторинги для вашего кода без знания бизнес-логики вашего приложения.

    $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

Другие решения

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

Может быть, попробуйте это: слишком много вложенных, если плохо по многим причинам 🙁

$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();
}
}
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector