- Je accéder à ma base de données MySQL via PDO. Je suis à la configuration de l'accès à la base de données, et ma première tentative a été d'utiliser les éléments suivants:
La première chose que j'ai pensé de est - global
:
$db = new PDO('mysql:host=127.0.0.1;dbname=toto', 'root', 'pwd');
function some_function() {
global $db;
$db->query('...');
}
Ceci est considéré comme une mauvaise pratique. Après un peu de recherche, j'ai fini avec le pattern Singleton, qui
"s'applique à des situations dans lesquelles il doit y avoir une seule instance d'une classe."
Selon l'exemple dans le manuel, nous devrions faire ceci:
class Database {
private static $instance, $db;
private function __construct(){}
static function singleton() {
if(!isset(self::$instance))
self::$instance = new __CLASS__;
return self:$instance;
}
function get() {
if(!isset(self::$db))
self::$db = new PDO('mysql:host=127.0.0.1;dbname=toto', 'user', 'pwd')
return self::$db;
}
}
function some_function() {
$db = Database::singleton();
$db->get()->query('...');
}
some_function();
Pourquoi ai-je besoin de relativement grande classe quand je peux le faire?
class Database {
private static $db;
private function __construct(){}
static function get() {
if(!isset(self::$rand))
self::$db = new PDO('mysql:host=127.0.0.1;dbname=toto', 'user', 'pwd');
return self::$db;
}
}
function some_function() {
Database::get()->query('...');
}
some_function();
Ce dernier fonctionne parfaitement et je n'ai pas besoin de vous soucier $db
plus.
Comment puis-je créer une petite classe singleton, ou est-il un cas d'utilisation pour les singletons que je suis absent en PHP?