IMAC, como estás...
Si vos hacés que CADA clase que trabaja con base de datos, tenga los datos de conexión, te vas a volver loco a la hora de cambiarlos de lugar. Yo te recomiendo hacer algo asi:
Código PHP:
<?php
class DB
{
protected $_config = array();
protected $_conn = null;
protected $_stmt = null;
public function __construct($config)
{
$this->_config = $config;
}
public function connect()
{
$this->_conn = new PDO(
$this->getConnString(),
$this->_config['user'],
$this->_config['password']);
}
public function isConnected()
{
return $this->_conn != null;
}
public function getConn()
{
return $this->_conn;
}
public function query($query)
{
$this->_stmt = $this->_conn->query($query);
}
/** etc, etc, etc, acá implementás los métodos que te sean útiles
O directamente podés utilizar los objetos que te ofrece PDO */
}
class MySQLDB extends DB
{
public function getConnString()
{
return 'mysql:'
.'host='.$this->_config['host'].';'
.'dbname='.$this->_config['dbname'];
}
}
class SQLiteDB extends DB
{
public function getConnString()
{
return 'sqlite:'.$this->_config['file'];
}
}
Con esto, ya unificaste en un par de clases todo lo que es la creación de nuevas conexiones, incluso de distintos tipos de conexiones. Ya podés reutilizar este código en otros lados :
Código PHP:
/** Conexión 1 */
$config = get_configuracion(); // Esto saldrá de algún lado.
$mysql = new MySQLDB($config);
/** Conexión 2 */
$mysql2 = new MySQLDB(array(
'host' => '127.0.0.1',
'user' => 'webstudio',
'password' => 'nosedicenlospasswords',
'dbname' => 'nilosnombresdedb',
));
/** Conexión 3 - otro motor de base de datos */
$sqlite = new SQLiteDB(array('/var/www/foros/usuarios.sqlite'));
Entonces, si tenés distintos tipos de clases que interactúan con distintos tipos de datos en tu sistema, pasando la instancia específica, ya podés usar la base de datos sin tener que preocuparte, por qué tipo es, ni reescribiendo código.
Código PHP:
class Model
{
protected $_db = null;
public function __construct(DB $db)
{
$this->setDb($db));
}
public function setDb(DB $db)
{
$this->_db = $db;
}
}
class Product extends Model
{
public function getProducts()
{
$conn = $this->_db->getConn();
return $conn->query('SELECT * from products');
}
}
class User extends Model
{
public function getById($id)
{
$conn = $this->_db->getConn();
$query = $conn->prepare('SELECT blabla FROM users WHERE id = :id');
return $query->execute(array(':id' => $id));
}
}
$users = new User($sqlite);
$user = $users->getById(5);
$products = new Products($mysql);
$all = $products->getProducts();
Como te darás cuenta, al estar utilizando PDO, casi que no te importa ahora qué tipo de base de datos estás utilizando en tus objetos, simplemente funcionan porque comparten la misma API.
Saludos y espero que te sirva.