2013-08-14 3 views
1

J'ai utilisé pour étendre la classe de connexion Db dans chaque classe qui doit se connecter à la base de données. Je pense que c'est la manière la plus courante. Mais, en suivant cette procédure, vous ouvrez et fermez une nouvelle connexion dans chaque instance de classe qui étend la classe de connexion db. Dernièrement, j'ai pensé que je pourrais créer un objet pdo et le passer dans le constructeur de la classe. Ainsi, chaque instance de classe qui a besoin d'accéder à la base de données utilise la même connexion. Cela fonctionne mais je ne suis pas sûr si c'est un moyen efficace de le faire. Aussi, j'ai une fonction appelée closeCon que j'appelle à la fin du script afin de fermer la connexion via null et unset. J'aimerais connaître votre opinion à ce sujet aussi. Merci d'avance:)La classe étend la classe dbConnection VS en passant la variable PDO dbConnection dans le constructeur de la classe

MÉTHODE 1: La nouvelle classe étend la classe dbConnection.

class Db { 

    public $pdo; 

    public function __construct($usr, $pwd, $db) { 

     $this->pdo = new PDO("mysql:host=localhost;dbname=".$db.";charset=utf8", $usr, $pwd); 
    } 
} 

class Users extends Db{ 

    public function __construct(){ 

     parent::__construct($usr, $pwd, $db); 
    } 
} 

MÉTHODE 2: Connectez-vous à DB en passant la variable PDO dbConnection dans le constructeur de la nouvelle classe.

class Db { 

    public $pdo; 

    public function __construct($usr, $pwd, $db) { 

     $this->pdo = new PDO("mysql:host=localhost;dbname=".$db.";charset=utf8", $usr, $pwd); 
    } 

    public function closeCon(){ 

     $this->pdo = null; 
     unset($this->pdo); 
    } 
} 

class Users { 

    protected $pdo; 

    public function __construct($con){ 

     $this->pdo = $con; 
    } 
} 

$db = new Db($usr, $pwd, $db); 

$posts = new Users($db->pdo); 

$db->closeCon(); 

Répondre

-2

Bon travail. C'est beaucoup plus efficace que d'ouvrir une connexion à chaque fois, et vous vous débarrassez correctement de vos connexions lorsque vous avez terminé.

+0

Bon travail pour quelle méthode? –

1

Il est absolument inutile d'étendre les classes d'application de la classe DB. Donc - Plan B.

1

Le seul cas où la méthode 1 pourrait être serait acceptable si Users était un modèle. Toutefois, cette approche est généralement une mauvaise pratique en raison du couplage, des limitations d'héritage multiples, etc. Et dans votre cas, crée plusieurs connexions à la base de données.

La méthode 2, est une meilleure approche des deux. C'est une forme de dependency injection.

Questions connexes