[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вложеные try
Diakon
Добрый день. Столкнулся с такой проблеммой. Мне нужно сделать 3 попытки подклчения с разными конфигами. Ну т.е. не получилось подключиться с 1 конфигом, пробует со 2м, если со 2м не получилось - пробует с третим. Я сделал попытки подклчения для 2х конфигов ($config1, $config2 - это массивы, но не суть).

try {
Yii::app()->session['profile_type']='light';
$result = $this->request($config);
}
CATCH (Exception $e) {
yii::app()->session['profile_type'] = 'extended';
$result = $this->request($config2);
}


Вот как можно добавить здесь 3ий try для
Yii::app()->session['profile_type']='full';
$result = $this->request($config3);
Заранее спасибо всем кто подскажет!
mvg
Еще есть finally smile.gif
Invis1ble
Diakon
try {
// 1
}
catch (Exception $e) {
try {
// 2
}
catch (Exception $e) {
// 3
}
}


_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

mvg
Цитата (Invis1ble @ 11.12.2013 - 01:52)
Diakon
try {
  // 1
}
catch (Exception $e) {
  try {
    // 2 
  }
  catch (Exception $e) {
    // 3
  }
}

А чем 3 конфиг плох, что его исключение игнорируется?


try {
// 1
}
catch (Exception $e) {
try {
// 2
}
catch (Exception $e) {
try {
// 3
}
catch (Exception $e) {
echo $e->getMessage(), "\n";
}
}
}


Хорошо, когда функция request($config) имеет тип данных bool!
Тогда запись можно было бы сделать такой:

try { 	
Yii::app()->session['profile_type']='light';
$result = $this->request($config);

if (!$result) {
yii::app()->session['profile_type'] = 'extended';
$result = $this->request($config2);

if (!$result) {
Yii::app()->session['profile_type']='full';
$result = $this->request($config3);
}
else
throw new Exception("Config exception: load is stoped");
}
}

catch (Exception $e) {
Yii::app()->session['profile_type'] = NULL;
echo e->getMessage();
}


Потому, что try...catch имеет ввиду при появлении первого исключения переходить в блок catch. Из этого следует что при выбросе исключения первой попыткой загрузить конфиг вторая и последующие не выполняются. Это исходит из того смысла, что исключение не является результатом выполнения функции или отказом по какой-то причине загрузить конфиг при условии что физически конфиг существует, а результатом функции есть true - при успехе и false при неудачи.

... Попробовать получить результат true или false, а в случае исключения отобразить его содержание.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.