Conectare baza de date - OOP
Moderator: Moderatori
Conectare baza de date - OOP
Cum este mai bine sa te conectezi la o baza de date in cadrul unui proiect in care se foloseste conceptul OOP: sa faci un fisier separat (ex. connection.php) pe care sa-l incluzi in fiecare clasa unde este necesar sau sa te connectezi in fiecare clasa separat ?
-
- Senior Member
- Mesaje: 1264
- Membru din: Mar Iun 22, 2010 3:17 pm
Ideea este sa nu il incluzi de 100 de ori.
Creezi conexiunea o singura data, apoi o folosesti oriunde vrei, de-a lungul scriptului. Ai cateva variante: globale, pattern-ul Singleton, pattern-ul Registry sau combinatia ultimelor doua. Poate or mai fi. Uite cum ar fi Singleton-ul:
Pune-ti clasele intr-un folder ("lib", de ex.) si pune-l in include_path. Mai poti folosi spl_autoload_register() pentru asta. Pune o singura clasa intr-un fisier, fa clasele specializate etc.
Creezi conexiunea o singura data, apoi o folosesti oriunde vrei, de-a lungul scriptului. Ai cateva variante: globale, pattern-ul Singleton, pattern-ul Registry sau combinatia ultimelor doua. Poate or mai fi. Uite cum ar fi Singleton-ul:
Cod: Selectaţi tot
<?php
/**
* Singleton wrapping a PDO connection.
*/
class Connection
{
/**
* @var Connection
*/
protected static $instance;
/**
* @var PDO
*/
protected $conn;
/**
* Singleton.
*
* @return Connection
*/
public static function getInstance()
{
if (null === self::$instance) {
self::$instance = new self();
// self::$instance = new static(); // LSB - PHP 5.3+
}
return self::$instance;
}
// disallow; only through getInstance()
protected function __construct() {}
protected function __clone() {}
/**
* @param PDO $conn
*/
public function setConnection(PDO $conn)
{
$this->conn = $conn;
}
/**
* @return PDO
*/
public function getConnection()
{
return $this->conn;
}
}
// setarea conexiunii o faci cat mai devreme in script (index.php, boostrap-phase etc.)
$conn = new PDO('mysql:dbname=test;host=127.0.0.1', 'root', '');
Connection::getInstance()->setConnection($conn);
// use connection wherever
var_dump(Connection::getInstance()->getConnection());
Pune-ti clasele intr-un folder ("lib", de ex.) si pune-l in include_path. Mai poti folosi spl_autoload_register() pentru asta. Pune o singura clasa intr-un fisier, fa clasele specializate etc.
Cine este conectat
Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 4 vizitatori