summaryrefslogtreecommitdiff
path: root/php/Connection.php
blob: e944f69c0da529839c6e2282eb7c0c3378770609 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
// php/Connection.php

// cette classe suit le pattern "singleton"
// but: ne permettre qu'une seule instance de la classe (laquelle sera éventuellement globale)

// comment?
// - Un attribut privé et statique qui conservera l'instance unique de la classe
// ainsi si un enfant de la classe "connection" est instancié plusieurs fois, il n'y aura toujours qu'une seule instance de PDO
// - Un constructeur privé afin d'empêcher la création d'objet depuis l'extérieur de la classe
// - Une méthode statique qui permet soit d'instancier la classe soit de retourner l'unique instance créée.
// impossible de créer deux instances (ici de PDO)

class Connection extends PDO
{
    // paramètres du constructeur de PDO, avec sqlite seul le premier est nécessaire
    public static $dsn = ''; // Data Source Name = 1er paramètre
    //~ public static $user = '';
    //~ public static $password = '';
    //~ public static $options = '';
    private static $Instance;
    
    private function __construct()
    {
        try
        {
            parent::__construct(self::$dsn); // renseigne la variable $dsn de la classe PDO
            $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // $this pour la méthode du parent PDO
        }
        catch(PDOException $e)
        {
            die('Erreur : '.$e->getMessage());
        }
    }
    
    // créer son objet avec: $bdd = Connection::getInstance();
    public static function getInstance(): self
    {
        if(self::$Instance === null)
        {
            self::$Instance = new self();
        }
        return self::$Instance;
    }
}