@arrexq

Как прервать if() в ф-ции?

Есть ли способ прервать if,например внутри ф-ции.
Сейчас,если задать checkLogin(""); то он выведет и ту и другую ошибку,а хотелось бы,чтобы он останавливался на первой ошибке,и не выводил вторую.То есть почему он начинает выполнять регулярку,хотя уже условие выполнилось

function checkLogin($str) {
    // инициализируем переменную с возможным сообщением об ошибке
    $error='';
    // если отстутствует строка с логином возвращаем сообщение об ошибке
    if(!$str) {
        $error='Вы не ввели имя пользователя';
        echo $error;
    }
    else {
        $pattern='/^[-_.a-z\d]{4,16}$/i';
        $result=preg_match($pattern,$str);
    }
    
    if(!$result) {
        $error="Недопустимые символы в имени пользователя или имя пользователя слишком короткое (длинное)";
        echo $error;
    }
    else {
        return true;
    }
}
checkLogin("");
  • Вопрос задан
  • 272 просмотра
Решения вопроса 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Есть два пути:
1. Улучшить проверку: сейчас у вас переменная $result не определена в случае первой ошибки, что приравнивается к false. Можно проверять так: if (isset($result) && !$result)
2. Использовать return, это стандартный способ прерывания работы функции.

Вообще, функция не должна ничего выводить, она должна только возвращать результат.
Вот так:
function checkLogin($str) {
    if (!$str) {
        throw new InvalidLoginException('Вы не ввели имя пользователя');
    }

    $pattern='/^[-_.a-z\d]{4,16}$/i';
    $result=preg_match($pattern,$str);

    if (!$result) {
        throw new InvalidLoginException('Недопустимые символы в имени пользователя или имя пользователя слишком короткое (длинное)');
    }
}

try {
    checkLogin("");
} catch (InvalidLoginException $e) {
    echo $e->getMessage();
}


Или, на худой конец, так:
function checkLogin($str) {
    if (!$str) {
        return 'Вы не ввели имя пользователя';
    }

    if (!preg_match('/^[-_.a-z\d]{4,16}$/i',$str)) {
        return 'Недопустимые символы в имени пользователя или имя пользователя слишком короткое (длинное)';
    }

    return true;
}

$status = checkLogin("");

if ($status !== true) {
    echo $status;
}
Ответ написан
profesor08
@profesor08 Куратор тега PHP
Вв ашем коде много лишнего и это лишнее вас запутывает.
function checkLogin($str)
{
  if (!$str)
  {
    echo 'Вы не ввели имя пользователя';
    return false;
  }
  
  if (!preg_match('/^[-_.a-z\d]{4,16}$/i', $str))
  {
    echo "Недопустимые символы в имени пользователя или имя пользователя слишком короткое (длинное)";
    return false;
  }

  return true;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы