Singleton sans constructeur privé
Bonjour à tous.
Alors voilà, actuellement le schéma que j'utilise pour faire un singleton en PHP est celui-ci:
Code:
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:
1 2
|
$dbMgr = ConnexionManager::getInstance(); |
Au lieu de ce qu'on s'attendrait normalement:
Code:
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:
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 ?