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
Ты о чём? Почитай про исключения и для чего они нужны. Это полный п. писать так:
В том-то вся и фишка исключений, что у тебя может быть и 200 строк кода и 1000, но в случае чего, ты всегда получишь ожидаемый и контролируемый результат. Чтобы правильно применять исключения, нужно запомнить правило: непосредственно внутри try {} не должно быть явных throw.
Ты о чём? Почитай про исключения и для чего они нужны. Это полный п. писать так:
tryв твоём примере это именно так.
{
throw new Exception('Тут говнокодище');
}
catch(Exception $Exception)
{
die($Exception->getMessage());
}
В том-то вся и фишка исключений, что у тебя может быть и 200 строк кода и 1000, но в случае чего, ты всегда получишь ожидаемый и контролируемый результат. Чтобы правильно применять исключения, нужно запомнить правило: непосредственно внутри try {} не должно быть явных throw.
_____________
On this planet You will die..