весьма оригинальное мнение на этот счети исключения - не панацея, а костыль, чтобы можно было использовать цепочки.
спорить бессмысленнодавайте лучше поспорим
function connect(Config $conf) {
$dsns =& $conf->searchPath(array('config', 'db'));
if ($dsns === FALSE) throw new Example_Config_Exception(
'Unable to find config/db section in configuration.'
);
$dsns =& $dsns->toArray();
foreach($dsns as $dsn) {
try {
$this->connectDB($dsn);
return;
} catch (Example_Datasource_Exception e) {
// Some warning/logging code recording the failure
// to connect to one of the databases
}
}
throw new Example_Datasource_Exception(
'Unable to connect to any of the configured databases'
);
}
if (empty($conf['db'])) {/*ахтунг, нет настроек! */}
$erordns= array();
foreach ($conf['db'] as $dsn) $db->connectDB($dsn) or $errordns[]= $dns;
if ($errordns) /* ахтунг, к некоторым dns не приконнектились */