Lo que buscaba era tener instancias de la clase Zend_Db (de Zend Framework) sin tener que estar pasándole los parámetros de conexión o una instancia de Zend_Config.
Descubri que para que la nueva clase devuelva una instancia de Zend_Db (y no de ella misma) debía usar un método estatico.
El código siguiente es el resultado:
/**
* Crea una instancia de Zend_Db con los parametros de conexion ya preestablecidos.
*
* @copyright Copyright (c) 2008, Daniel Zegarra
* @access public
*/
class System_DB {
/**
* Direccion donde se encuentra el host de la base de datos
* @access private
*/
private static $_Server = "localhost";
/**
* Nombre de usuario de la base de datos
* @access private
*/
private static $_User = "root";
/**
* Contraseña de la cuenta
* @access private
*/
private static $_Pass = "123456";
/**
* Base de datos predeterminada a usar. Dejar en blanco para obligar a cada modulo a elegir la propia.
* @access private
*/
private static $_DB = "midb";
/**
* Adaptador Zend
* @access private
*/
private static $_zendadapter = "Pdo_Mysql";
/**
* Este es el metodo que manufactura.
*
* @param str $DB Nombre de la base de datos
* @param str $Server Host de la base de datos
* @param str $User Nombre de usuario de la cuenta
* @param str $Pass Contraseña de la cuenta
* @return Zend_Db
*/
public static function create($DB=null, $Server=null, $User=null, $Pass=null){
//Actualizando propiedades
if(!empty($DB) && is_string($DB))
self::$_DB = $DB;
if(!empty($Server) && is_string($Server))
self::$_Server = $Server;
if(!empty($User) && is_string($User))
self::$_User = $User;
if(!empty($Pass) && is_string($Pass))
self::$_Pass = $Pass;
return Zend_Db::factory(self::$_zendadapter, array(
'host' => self::$_Server,
'username' => self::$_User,
'password' => self::$_Pass,
'dbname' => self::$_DB
));
}
/**
* Realiza una conexion y consulta de prueba.
*
* @return str
*/
public function test(){
//Conectando a la BD
try {
$db = self::create();
$db->getConnection();
} catch (Zend_Db_Adapter_Exception $e) {
return 'Zend_Db_Adapter_Exception: '.$e->getMessage();
} catch (Zend_Exception $e) {
return 'Zend_Exception: '.$e->getMessage();
}
//Haciendo la consulta
$sql = "SELECT 'Prueba exitosa'";
return $db->fetchOne($sql);
}
}
El método test te ayudará a comprobar si la clase y los datos de conexión funcionan correctamente.
El código es libre.