а как быть с конструкцией try-catch?
Никак. Если подумать, то эта конструкция здесь не нужна:
www.phpfaq.ru/pdo#exceptions
По поводу же синглтона, то если выкинуть всё лишнее, и использовать РНР5, то получится так
class DB
{
protected static $instance = null;
final private function __construct() {}
final private function __clone() {}
public static function instance()
{
if (self::$instance === null)
{
$dsn = 'mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset='.DB_CHARSET;
self::$instance = new PDO($dsn, DB_USER, DB_PASS);
self::$instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
self::$instance->query("SET NAMES ".DB_CHARSET);
}
return self::$instance;
}
public static function __callStatic($method, $args) {
return call_user_func_array(array(self::instance(), $method), $args);
}
}
и обращаться напрямую
$stmt = DB::prepare($query);