Bonsoir,
1ers pas en Orienté Objet... J'avoue c'est encore vague pour moi.
Je tente une 1ère classe. Ce sera une classe Singleton pour la connexion (en PDO).
J'aimerais avoir les avis et critiques, voir si je continue sur cette base quelque chose de plus complet, voir si je m'y prend pas trop mal...
Ce n'est pas évident et les notions sont encore bien floues, aussi, je vous demanderais d'être compréhensifs (et simples)...
Merci de votre aide
index.php
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 28 29 30 31 32 33 34 35 36 37
|
<?php
//CONFIG includes
define('INCLUDES','includes/');
set_include_path(get_include_path().PATH_SEPARATOR.INCLUDES);
//CONFIG bdd + classes
require_once('config.inc');
//CONSTANTES bdd
$config['driver'] = DRIVER;
$config['dbname'] = DBNAME;
$config['host'] = HOST;
$config['user'] = USER;
$config['password'] = PASSWORD;
$config['dsn'] = $config['driver']
. ':dbname=' . $config['dbname']
. ';host=' . $config['host'];
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<?php
//$connexion =
$connexion = Connexion::getInstanceConnexion($config);
var_dump($connexion);
$host = Connexion::getHost();
var_dump($host);
echo 'Hote : '.$host;
?>
</body>
</html> |
config.inc
//constantes de ma connexion
//spl autoload pour mes classes
Connexion.class.php
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
<?php
// Connexion = classe Singleton
class Connexion
{
//durée d'execution du script
private $_startTime;
private $_endTime;
private $_time;
//valeurs de la connexion à la BDD à null
public static $_connexionBdd = null;
private static $_instanceConnexion = null;
private static $_host = null;
private static $_bdd = null;
private static $_login = null;
private static $_pswd = null;
private function __construct($config=false)
{
//si fction construct déclenchée, tps départ en microsecondes
$this->_startTime = round(microtime(), "6");
self::$_host = $config['host'];
self::$_bdd = $config['dbname'];
self::$_login = $config['user'];
self::$_pswd = $config['password'];
//connexion
try
{
self::$_connexionBdd=new PDO($config['dsn'],$config['user'],$config['password']);
}
//gestion des erreurs
catch(PDOException $e)
{
echo 'Erreur de connexion au serveur MySQL ! <br /> Erreur détectée : '.$e->getMessage();
exit();
}
}
//"anti-cloning"
private function __clone()
{
}
/* 2nd type d'"anti-cloning" :
public function __clone()
{
throw new Exception('ERREUR DE MANIPULATION : Tentative de clônage de la classe Singleton Connexion !');
}
*/
//lancement de la connexion
public static function getInstanceConnexion($config)
{
//si la propriété $_instanceConnexion vaut null, créée la connexion, sinon renvoit sa valeur
if (is_null(self::$_instanceConnexion))
{
self::$_instanceConnexion = new Connexion($config);
}
return self::$_instanceConnexion;
}
//fctions publiques pour obtenir et lire les infos de connexion
public static function getHost()
{
return self::$_host;
}
public static function getBdd()
{
return self::$_bdd;
}
public static function getLogin()
{
return self::$_login;
}
public static function getPswd()
{
return self::$_pswd;
}
//destructeur
public function __destruct()
{
//calcul du temps d'éxecution du script de connexion BDD en microsecondes
//fin du script
$this->_endTime = round(microtime(), "6");
//calcul
$this->_time = $this->_endTime - $this->_startTime;
$this->_time = round($this->_time, "6");
echo '<hr />Tps dbt : ' . $this->_startTime
.'<br />Tps fin : ' . $this->_endTime
.'<br />Temps d\'éxecution du script : ' . $this->_time;
}
}
?> |
Merci d'avance de vos conseils