La meta
Como yo lo veo, su objetivo en este caso es doble:
- crear y mantener una conexión única/reutilizable por base de datos
- asegúrese de que la conexión se haya configurado correctamente
Solución
Recomendaría usar tanto la función anónima como el patrón de fábrica para tratar con la conexión PDO. El uso sería así:
$provider = function()
{
$instance = new PDO('mysql:......;charset=utf8', 'username', 'password');
$instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$instance->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
return $instance;
};
$factory = new StructureFactory( $provider );
Luego en un archivo diferente o inferior en el mismo archivo:
$something = $factory->create('Something');
$foobar = $factory->create('Foobar');
La fábrica en sí debería verse así:
class StructureFactory
{
protected $provider = null;
protected $connection = null;
public function __construct( callable $provider )
{
$this->provider = $provider;
}
public function create( $name)
{
if ( $this->connection === null )
{
$this->connection = call_user_func( $this->provider );
}
return new $name( $this->connection );
}
}
De esta manera, le permitiría tener una estructura centralizada, lo que garantiza que la conexión se cree solo cuando sea necesario. También facilitaría mucho el proceso de prueba y mantenimiento de unidades.
En este caso, el proveedor se encontraría en algún lugar de la etapa de arranque. Este enfoque también brindaría una ubicación clara donde definir la configuración que utiliza para conectarse a la base de datos.
Tenga en cuenta que este es un ejemplo extremadamente simplificado . También podría beneficiarse al ver los dos videos siguientes:
Además, recomendaría encarecidamente leer un tutorial adecuado sobre el uso de PDO (hay un registro de malos tutoriales en línea).