@mrgyf1

Области видимости переменных из разных case внутри одного switch (PHP)?

Приветствую! Прошу помощи в написании бота с целью принятия от пользователя логина и пароля, далее помещения этих данных в переменные и передачи в соответствующую функцию, которая свяжется с внешней системой JSONом
Бот использует webHook.
Столкнулся с проблемой, что переменные $login и $password не видны из разных case

function processMessage($data){
    $message = isset($data->message) ? $data->message : null;
    $chat_id = isset($message->chat->id) ? $message->chat->id : null;
    $text = isset($message->text) ? $message->text : null;
    $user_id = isset($message->from->id) ? $message->from->id : null;
    $status = getUserInfo($user_id, 'status');
    $verified = getUserInfo($user_id,'verified');
    switch ($text){
        case '/start':
            if ($verified == 0 && $status==0){ //Проверка на наличие связи user_id и внешней системы
                send('sendMessage', array('chat_id'=>$chat_id, 'text'=>'Вы не зарегистрированный пользователь. Представьтесь, указав последовательно Логин и Пароль!'));
                setStatus($user_id, 1); //waiting for login
            }
    }
    switch ($status) {
        case 1:
            $login= $text; // Принимает и записывает логин
            send('sendMessage', array('chat_id' => $chat_id, 'text' => 'Теперь укажите пароль'));
            setStatus($user_id, 2); //waiting for password
            break;
        case 2:
            $password = $text; // Принимает и записывает пароль
            setStatus($chat_id, 3); 
            break;
        case 3: //Использует логин и пароль. Связывается с внешней системой и в ответ получает массив
            $result = getUserFromMapAdmin($login, $password); //Получить логин и пароль из прошлых case и передать в функию, которая вернет массив
            break;
    }
}


$data = json_decode(file_get_contents('php://input'));
processMessage($data);
  • Вопрос задан
  • 480 просмотров
Решения вопроса 1
xpert13
@xpert13
Full Stack Developer
Тут дело не в том, что переменные в другом case не видны, а в том, что переменная локальная и после того, как $login или $password устанавливается происходит выход из функции.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
rusticus
@rusticus
Разработчик
Странный конечно код, непонятно зачем вам такой switch.
Break прекращает работу switch.
Ответ написан
Ваш ответ на вопрос

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

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