[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: мультиобработчик catch
Гость_Dmitry
Существует ли в php multi-catch, подобный Java?
например так catch(FExcepttion | SException $e)



Спустя 10 минут, 6 секунд (27.05.2012 - 13:44) alexbel2404 написал(а):
try {

}
catch(FExcepttion $ex){

}
catch(SExcepttion $ex){

}

Спустя 7 минут, 2 секунды (27.05.2012 - 13:51) Гость_Dmitry написал(а):
т.е. дублирования избежать никак не удается при одинаковой обработке разных исключений?

Спустя 42 минуты, 18 секунд (27.05.2012 - 14:34) Invis1ble написал(а):
ну если тебе не нравится много блоков catch, идущих подряд - проверяй тип исключения
try {
if (...) {
throw new MyException1('');
}
else {
throw new MyException2('');
}
}

catch (Exception $e) {
if ($e instanceof MyException1) {

}

elseif ($e instanceof MyException2) {

}
}


class MyException1 extends Exception {}
class MyException2 extends Exception {}

Спустя 21 час, 49 минут, 49 секунд (28.05.2012 - 12:23) alexbel2404 написал(а):
как-то не красиво получается, имхо)

Спустя 13 дней, 12 часов, 46 минут, 34 секунды (12.06.2012 - 01:10) Guest написал(а):
пипец а
catch(Exception $e)

отменили? он и есть общий тип перехвата исключений

try
{
//офигеть сколько не перехваченных исключений
}
catch(Exception $e)
{

}

Спустя 2 минуты, 4 секунды (12.06.2012 - 01:12) Guest написал(а):
Единый ответ на все! перехваченные исключения только через Exception

Спустя 3 часа, 37 минут, 24 секунды (12.06.2012 - 04:49) Invis1ble написал(а):
Guest
Цитата
пипец а
catch(Exception $e)

отменили? он и есть общий тип перехвата исключений

а здесь http://phpforum.ru/index.php?showtopic=0&v...dpost&p=1870214 я что показал?

Спустя 9 часов, 22 минуты, 40 секунд (12.06.2012 - 14:12) Guest написал(а):
Цитата (Invis1ble @ 12.06.2012 - 01:49)
Guest
Цитата
пипец а
catch(Exception $e)

отменили? он и есть общий тип перехвата исключений

а здесь http://phpforum.ru/index.php?showtopic=0&v...dpost&p=1870214 я что показал?

А теперь,чем вот то, отличается от этого
try {

} catch(MyException1 $ex){

} catch(MyException2 $ex){

}

biggrin.gif

Смысл в том что бы один сценарий на все! исключения (давайте прочувствуем)

Спустя 5 минут, 12 секунд (12.06.2012 - 14:17) Invis1ble написал(а):
Обычно, кроме того, чтобы поймать исключение, нужно еще и среагировать на каждый тип по-своему. Я показал альтернативу нескольким catch подряд, твой же пример лишь ловит все исключения.

Спустя 1 час, 5 минут, 4 секунды (12.06.2012 - 15:22) Guest написал(а):
Цитата (Invis1ble @ 12.06.2012 - 11:17)
Обычно, кроме того, чтобы поймать исключение, нужно еще и среагировать на каждый тип по-своему. Я показал альтернативу нескольким catch подряд, твой же пример лишь ловит все исключения.

Читаем ТС
Цитата
Существует ли в php multi-catch, подобный Java?
например так catch(FExcepttion | SException $e)


И хотя бы смотрим JAVA. Смысл в том что конструкции на каждые исключения при едином сценарии слишком громоздки и неудобочитаемы.

Спустя 3 минуты, 37 секунд (12.06.2012 - 15:26) Invis1ble написал(а):
Цитата
Смысл в том что конструкции на каждые исключения при едином сценарии слишком громоздки и неудобочитаемы.

И? Убери условия из catch-блока в моем примере, если тебя они смущают, и будет тоже самое, что и ты написал. Или тебе просто захотелось поспорить?

Спустя 3 часа, 9 минут (12.06.2012 - 18:35) SlavaFr написал(а):
invis1ble делать можно по разному, но так как предложил @Guest более привычно. Именно так в java, c# и c++ ловят ошибки. Просто желательно держатся общих правил.


Спустя 38 минут, 31 секунда (12.06.2012 - 19:14) Invis1ble написал(а):
SlavaFr
И чем же его способ отличается от моего, кроме того, что у него в catch нет проверок типа? Не пойму никак...
АУ, ОБЪЯСНИТЕ МНЕ СКРЫТЫЙ СМЫСЛ, ЛЮДИ! smile.gif Или мой код не ловит все исключения, также как и код от гуеста? biggrin.gif

Спустя 30 минут, 20 секунд (12.06.2012 - 19:44) SlavaFr написал(а):
ну зачем проверять вообще тип ехception если пхп само распознает тип и прыгнет в нужный catch блок?


Спустя 2 минуты (12.06.2012 - 19:46) Invis1ble написал(а):
Я не писал, что это необходимо делать. Просто как дополнительный пример, т.к. это довольно частая задача на практике. smile.gif

Спустя 3 часа, 27 минут, 13 секунд (12.06.2012 - 23:13) Guest написал(а):
Цитата (Invis1ble @ 12.06.2012 - 16:14)
SlavaFr
И чем же его способ отличается от моего, кроме того, что у него в catch нет проверок типа? Не пойму никак...
АУ, ОБЪЯСНИТЕ МНЕ СКРЫТЫЙ СМЫСЛ, ЛЮДИ! smile.gif Или мой код не ловит все исключения, также как и код от гуеста? biggrin.gif

Мы или не умеем думать или ......
Catch блок и есть блок условия распознавания типа объекта.
Я чего то не допоннимаю в Ваших сознаниях или не пойму blink.gif

На пальцах:
есть задача что бы для всех исключений был единый сценарий - для этого используем единый блок catch с типом Exception что эквивалентно if($e instanceof Exception) подробнее - Exception есть класс основатель исключений ВСЕХ м ещё раз к ТС обратитесь, в котором указывается Е Д И Н Ы Й сценарий для всех видов исключений, но у Вас эквивалент if()if()if() к -> catch(.....)catch(.....)catch(....)
честно говоря я не ожидал такой ....

Спустя 10 минут, 25 секунд (12.06.2012 - 23:23) Guest написал(а):
ТС имеет ввиду чтобы блок исключений срабатывал исключительно для списка типов исключений, но ни как не исполняя блок.

Спустя 2 минуты, 4 секунды (12.06.2012 - 23:26) Guest написал(а):
И ещё раз вот этот кодж ловит
Цитата
все исключения, также как и код от гуеста?

catch(Exception $e){}

Спустя 2 часа, 55 минут, 9 секунд (13.06.2012 - 02:21) SlavaFr написал(а):
ужас, столько гостей, что не развереш кто о чем пишет. Да и я собственно увидев "multi catch" не заметил что требуется
catch(FExcepttion | SException $e) 

Нет, к сожалению так в пхп неполучится. Остается действительно делать как @Invis1ble предложил или кидать дополнительно новую Ехception которую ты обработаеш на другом уровне.
гдето так:

<?php
/**
*
* for php5.3 or later.
* Test with Exception handling
*/

namespace de\bituniverse\test;
class TestException1 extends \Exception{}
class TestException2 extends \Exception{}
class TestException3 extends \Exception{}
class TestException4 extends \Exception{}
class IncorrectParameterException extends \Exception{}

/**
*
* simple class for throws Exception
*
*/

class Test
{
/**
*
* for Exception_Test
*
@param string $ExceptionNumber
*
@throws TestException.$ExceptionNumber
*/

public function __construct($ExceptionNumber = null)
{

$exception = __NAMESPACE__.'\\TestException' . $ExceptionNumber;
throw new $exception('Test'.$ExceptionNumber, $ExceptionNumber);
}
}


/**
*
* class for Exception Handlin
*
@author slava
*
*/

class Main
{
/**
*
* start Exception handling test
*
@param mixed $exceptionnumber
*/

public static function go($exceptionnumber = 1 ) {
try{
echo "Start with Exception = {$exceptionnumber}\n-------------------\n";
if(!in_array($exceptionnumber,array(1,2,3)))
{
throw new IncorrectParameterException("incorrect parameter, allowed is 1,2,3\n");
}

//start exception handling for Test class
try {
new Test($exceptionnumber);
}
//TestException1 | TestException2
catch ( TestException1 $e1) {
//
echo 'если нужна специфическая обработка для этой ошибки, '.
"то делай это здесь 1\n" ;
throw new TestException4("Obrabotka1\n", 4);
}
catch ( TestException2 $e2) {
echo 'если нужна специфическая обработка для этой ошибки, '.
"то делай это здесь 2\n" ;
throw new TestException4("Obrabotka2\n", 4);
}

//normal
catch ( TestException3 $e3) {
echo "обработка 3\n";
}

}

catch ( TestException4 $exception4) {
echo "1 | 2 обрабатывай здесь\n";
}
catch (IncorrectParameterException $incorrect) {

echo $incorrect->getMessage();
}

echo "------------------End-------------------\n\n";
}
}


##############################

//Test

header('Content-Type: text; charset=utf-8');

//TestException1 | TestException2
Main::go(1);
Main::go(2);

//normal handling
Main::go(3);

Main::go('unallowed');

?>


Спустя 14 часов, 30 минут, 30 секунд (13.06.2012 - 16:51) Guest написал(а):
жёсткий идио...
Е Д И Н Ы Й С Ц Е Н А Р И Й Н А В С Е Т И П Ы И С К Л Ю Ч Е Н И Й!!! определённой линии типов.
Да как же такого не понять ужос ohmy.gif blink.gif

Спустя 8 минут, 51 секунда (13.06.2012 - 17:00) Invis1ble написал(а):
Guest
Цитата
И ещё раз вот этот кодж ловит

Не тупи, и твой и мой код ловит "В С Е Т И П Ы И С К Л Ю Ч Е Н И Й!!!"
Быстрый ответ:

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