Désolé pour le mauvais anglais, je suis brésilien, et encore pire parler de la programmation. Allons-y. J'ai ceci:Singleton PDO Modèle - Hiérarchie
class DataBase extends PDO
{
/**
* @var object PDO
*/
private static $instance;
/**
* Cria uma instância do PDO representando a conexão ao banco de dados e torna a instância disponível como "singleton"
*
* @param string $dsn O DSN completo, ex.: mysql:host=localhost;dbname=testdb
* @param string $username O nome de usuário para a string DSN. Esse parâmetro é opcional para alguns drivers do PDO.
* @param string $password A senha para a string DSN. Esse parâmetro é opcional para alguns drivers do PDO.
* @param array $driver_options Um array key => value de opções de conexão específicas do driver
*
* @return PDO
*/
public
function __construct()
{
global $config;
$dsn = "mysql:dbname={$config['database'][AMBIENTE]['banco']};host={$config['database'][AMBIENTE]['url']}";
$username = $config['database'][AMBIENTE]['usuario'];
$password = $config['database'][AMBIENTE]['senha'];
if (!isset (self::$instance))
{
try
{
self::$instance = parent::__construct($dsn , $username , $password);
}
catch (PDOException $e)
{
Functions::Log('Erro de conexão de banco de dados: ' . $e->getMessage());
header('HTTP/1.1 500 Internal Server Error');
}
}
$this->storage = new ArrayObject();
}
public static
function getInstance()
{
if (!self::$instance)
{
self::$instance = new DataBase;
}
return self::$instance;
}
}
et le modèle qui étend la DataBase classe:
class Model extends DataBase
{
protected $TABLE_NAME;
protected $TABLE_PREFIX;
/* all logic here, like getters, setters and methods like update, delete and insert... */
}
Mais je ne peux pas utiliser cette variable $ pour accéder aux méthodes PDO comme requête OU préparer. Il est dit que je ne suis pas appelé le constructeur PDO, même si le constructeur de ma classe Model appelle getInstance.
C'est possible?
Pourquoi le constructeur de votre base de données est-il public? – busypeoples
cocher self :: $ instance. C'est là que votre problème est. Si vous avez besoin d'un exemple de code, faites-le moi savoir. – busypeoples
Pouvez-vous @busypeoples éclairer mes erreurs? Je pensais que toutes les méthodes magiques devraient être publiques par défaut. Je voudrais avoir un exemple! –