[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Блоки try catch
blazze
Подскажите пожалуйста есть код:


public function __construct()
{
$this->_comeFromLnk = $_SERVER['HTTP_REFERER'];
$this->_userIp = $_SERVER['REMOTE_ADDR'];
$this->_setReferer($this->_comeFromLnk);

//перехват здесь
$this->_accessDB();
//обработка здесь
}

//////здесь еще методы а вот здесь

private function _accessDB()
{
//перехват здесь
$this->_db = mysql_connect(self::$_host,self::$_user,self::$_password);

if (!$this->_db) {
throw new Exception('Can\'t access to db proper work is unavailable');
}

$this->_handler = mysql_select_db ();
if (!$this->_handler) {
throw new Exception('Can\'t select db proper work is unavailable');
//обработка здесь
}
}




Сабственно вопрос, как где правильно перехватывать эксепшины(я обозначил позиции: перехват здесь,обработка здесь)? Зараннее благодарен за совет.



Спустя 22 минуты, 53 секунды (20.05.2011 - 21:54) Greg1978 написал(а):
внизу метода _accessDB() для метода _accessDB()
private function _accessDB()
{
try {
//перехват здесь
$this->_db = mysql_connect(self::$_host,self::$_user,self::$_password);

if (!$this->_db) {
throw new Exception('Can\'t access to db proper work is unavailable');
}

$this->_handler = mysql_select_db ();
if (!$this->_handler) {
throw new Exception('Can\'t select db proper work is unavailable');
}
}

catch(Exception $e){
// Если есть наследники исключений типа ChildExeption можно строить
// цепочку обработчиков тода Exception будет вызван последним если его даже не задать явно
//обработка здесь

}
}

Спустя 2 дня, 11 часов, 24 минуты, 14 секунд (23.05.2011 - 09:18) linker написал(а):
Нет не здесь, а вот здесь
class ClassName
{
public function __construct()
{
$this->_asscessDB();
}

private function _accessDB()
{
throw new Exception();
}
}


try
{
$Db = new ClassName();
}
catch(Exception $E)
{
die($Exception->getMessage());
}

Спустя 7 часов, 41 минута (23.05.2011 - 16:59) Greg1978 написал(а):
Не правильное построение.
Представьте себе если это было бы так, вот такая ситуация получилась и не иначе, а класс ещё в придачу подключался через автолоад где ни будь это раз, и метод является закрытым что уже само по себе раскрывает инкапсуляцию и абстракцию класса:


class ClassName
{
public function __construct()
{
$this->_asscessDB();
}

private function _accessDB()
{
throw new Exception();
}
}


.............


200 строк кода
// Нельзя применять нелинейность когда это сужает удобочитаемость да ещё и
//раскрывает в некоторой степени абстракцию класса так как в обработчике
//может быть не только вывод сообщения но и своя логика, кстати не
//обязательно системного "обрыва"

.....................
try
{
$Db = new ClassName();
}
catch(Exception $E)
{
die($Exception->getMessage());
}

Спустя 15 часов, 26 минут, 58 секунд (24.05.2011 - 08:26) linker написал(а):
Greg1978
Ты о чём? Почитай про исключения и для чего они нужны. Это полный п. писать так:
try
{
throw new Exception('Тут говнокодище');
}
catch(Exception $Exception)
{
die($Exception->getMessage());
}
в твоём примере это именно так.

В том-то вся и фишка исключений, что у тебя может быть и 200 строк кода и 1000, но в случае чего, ты всегда получишь ожидаемый и контролируемый результат. Чтобы правильно применять исключения, нужно запомнить правило: непосредственно внутри try {} не должно быть явных throw.


_____________
On this planet You will die..
Быстрый ответ:

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