Как упростить этот код? (слишком много, если еще утверждение) - PullRequest
1 голос
/ 02 августа 2011

Вот простой код для ввода информации пользователем, первое условие if это-> дезинфицировать, чтобы проверить данные действительны или нет, другой this-> haveDuplicateUser_nameAndEmail (), который используется для проверки имени пользователя и наличия электронной почты в БД или нет. третий this-> addNewUser (), который добавляет запись пользователя в базу данных.

    if(!$this->sanitize()){
        $this->printError();   //the data is not sanitize
        return;
    }else{       
        if($this->haveDuplicateUser_nameAndEmail()){ //duplicateUserNameAndPassword, cannot add new user
            $this->printError();
        }else{
            if($this->addNewUser()){ 
                $this->printSuccess(); //add user success
            }else{
                $this->printError(); //add user fail
            }
        }
    }        

Ответы [ 5 ]

3 голосов
/ 02 августа 2011

псевдокод:

  if not this->sanitize() or
     this->haveDuplicateUser_nameAndEmail() or
     not this->addNewUser() then
     this.printError()
  else then
     this.printSuccess()

Примечание. Это предполагает короткое замыкание или функции, которые не могут выйти из строя, если предыдущие условия не выполнены.

1 голос
/ 02 августа 2011

Вы можете использовать исключения для упрощения блока, который вы нам предоставили.Вам придется обновить код соответствующих методов, чтобы генерировать эти исключения на основе их собственной внутренней логической логики.Не существует не if решения, чтобы сказать что-то вроде: «Это POST равен пустой строке?»в php.

Если вы делаете это, вы попадаете в область использования исключений как goto s, что обычно осуждается.Я думаю, что вы можете обсудить это в любом случае.

try {
   $this->sanitize();
   $this->haveDuplicateUser_nameAndEmail();
   $this->addNewUser();
   $this->printSuccess();
}
catch (SanitizeOrDuplicateException $sode) {
   $this->printError();
}
1 голос
/ 02 августа 2011

Если предположить, что сначала «возвращение» было посторонним, то:

if ((!$this->sanitize()) 
     || ($this->haveDuplicateUser_nameAndEmail())
     || (!$this->addNewUser()) {
   $this->printError();   //the data is not sanitize
}
else
  $this->printSuccess(); //add user success

Или, возможно, вы хотите вернуться к любой ошибке? Если это так, просто добавьте «return».

Но нет ничего действительно "неправильного" в вашем первом фрагменте. Если он охватывает все условия правильно - тогда иди на это:)

0 голосов
/ 02 августа 2011
$is_valid = $this->sanitize() && !$this->haveDuplicateUser_nameAndEmail();
if($is_valid && $this->addNewUser()){
    $this->printSuccess();
}else{
    $this->printError();
}

Вы могли бы также сделать это без переменной $is_valid, но я думаю, что это помогает с удобочитаемостью кода, если вам нужно вернуться и поддерживать его позже.

0 голосов
/ 02 августа 2011

Все это эквивалентно:

    if(!$this->sanitize()){
        $this->printError();   //the data is not sanitize
        return;
    } else if($this->haveDuplicateUser_nameAndEmail()){       
        $this->printError();
    } else if($this->addNewUser()) {
        $this->printSuccess(); //add user success
    } else {
         $this->printError(); //add user fail
    }

Я так понимаю, это javascript и поддерживает else if.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...