Bonjour à tous.

Alors voilà, actuellement le schéma que j'utilise pour faire un singleton en PHP est celui-ci:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
class ConnexionManager
{
    private static $instance;
    private $arrConn;
 
    private function __construct()
    {
    	$this->arrConn = array();
    }
 
    public static function getInstance() 
    {
        if (empty(self::$instance))
            self::$instance = new ConnexionManager();
 
        return self::$instance;
    }
 
    public function __clone()
    {
        trigger_error('Le clônage n\'est pas autorisé.', E_USER_ERROR);
    }
 
    // ... le reste est tronqué
}

Vous allez dire que je suis peut-être exigeant, mais je trouve un peu désagréable de devoir toujours faire:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
$dbMgr = ConnexionManager::getInstance();
Au lieu de ce qu'on s'attendrait normalement:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
$dbMgr = new ConnexionManager();

Alors je me suis demandé s'il était possible de rendre le singleton plus... agréable, et j'en suis venu à penser à ceci:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
class ConnexionManager
{
    private static $instance;
    private $arrConn;
 
    public function __construct() //Constructeur du singleton
    {
        if (!is_object(self::$instance))
        {
            $this->init(func_get_args());
            self::$instance = $this; //L'idée est ici.
        }
        return self::$instance;
    }
 
    public function __clone()
    {
        trigger_error('Le clônage n\'est pas autorisé.', E_USER_ERROR);
    }
 
    private function init($arrParam) //Constructeur de l'objet
    {
         $this->arrConn = array();
    }
    // ... le reste est tronqué
}


Cependant, j'ai une sorte de mauvais présentiment, alors je me suis dit que si l'idée était mauvaise, vous aurriez tôt fait de m'indiquer les raisons.


Alors, vous en pensez quoi ?