Je suis nouveau dans la communauté et comme beaucoup de monde je suis venu pour une petite question
J'ai mit un peu de temps avant de savoir comment formuler ma question le plus simplement possible, j'espère donc que tout le monde comprendra
Voilà, j'ai lu pas mal de trucs sur php5 et la POO, car je voudrais créer une classe pour gérer ma connexion à la base de données. Beaucoup d'articles sur le design pattern "Singleton" reviennent mais personellement, peut être à cause de mon manque de connaissances, je trouve ça un peu overkill.
Donc j'ai écrit ma classe, qui à l'air de fonctionner comme il faut, mais je voudrais l'avis des experts.
Dois-je impérativement implémenter le pattern "Singleton" ou est-ce que ma solution sera suffisante pour m'assurer que mon objet de connexion n'est pas instantié plus d'une fois?
Merci
class SqlHelper
{
# Fields
private static $_host = 'localhost';
private static $_user = 'user';
private static $_password = 'password';
private static $_dbname = 'dbname';
private static $_pdoInstance = null;
# Getter for $_pdoInstance
private static function PdoInstance()
{
if( is_null( self::$_pdoInstance ) )
{
try
{
self::$_pdoInstance = new PDO( 'mysql:host=' . self::$_host . ';dbname=' . self::$_dbname, self::$_user, self::$_password );
self::$_pdoInstance->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
}
catch ( PDOException $e )
{
die( 'Connection failed or database cannot be selected : ' . $e->getMessage() );
}
}
return self::$_pdoInstance;
}
# "Overloads"
// plus un forward qu'un overload mais en static
public static function Query( $statement )
{
return self::PdoInstance()->query( $statement );
}
}
Cette solution me permet de lancer une query de la façon suivante (que j'apprécie, c'est pour ça que je m'embête pour si peu diront certains SqlHelper::Query( 'SELECT * FROM tb_Table' );
Just une petite note sur le "forward", la methode static pour Query, j'imagine qu'elle peut laisser pas mal de gens perplexe, mais je compte la remplacer pour la version 5.3.0 par:
public static function __callStatic( $method, $args )
{
if( method_exists( self::PdoInstance(), $method ) )
call_user_func_array( array( self::PdoInstance(), $method ), $args );
}