O objetivo
A meu ver, seu objetivo neste caso é duplo:
- criar e manter uma conexão única/reutilizável por banco de dados
- certifique-se de que a conexão foi configurada corretamente
Solução
Eu recomendaria usar a função anônima e o padrão de fábrica para lidar com a conexão PDO. O uso dele ficaria assim:
$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 );
Em seguida, em um arquivo diferente ou inferior no mesmo arquivo:
$something = $factory->create('Something');
$foobar = $factory->create('Foobar');
A própria fábrica deve ser algo assim:
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 );
}
}
Dessa forma, você teria uma estrutura centralizada, que garante que a conexão seja criada apenas quando necessário. Também tornaria o processo de teste de unidade e manutenção muito mais fácil.
O provedor neste caso seria encontrado em algum lugar no estágio de bootstrap. Essa abordagem também forneceria um local claro onde definir a configuração que você usa para se conectar ao banco de dados.
Lembre-se de que este é um exemplo extremamente simplificado . Você também pode se beneficiar assistindo aos dois vídeos a seguir:
Além disso, recomendo fortemente a leitura de um tutorial adequado sobre o uso do PDO (há um log de mau tutorial online).