"Klasa DIC"
class DataBaseConnection { protected $pdo; protected $mysqlHost = 'Host'; protected $mysqlLogin = 'Login'; protected $mysqlPassword = 'Haslo do bazy'; protected $mysqlDatabase = 'Baza'; public function __construct() { try { $this->pdo = new PDO('mysql:dbname='.$this->mysqlDatabase.';host='.$this->mysqlHost.';', $this->mysqlLogin, $this->mysqlPassword); $this->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $exception) { } } public function prepare($sql) { return $this->pdo->prepare($sql); } }
Pomijając kwestię iż trzymam dane do połączenia w klasie, czy ma mniej więcej tak to wyglądać ? Ciekawi mnie dlaczego musiałem zdefiniować funkcję prepare ... jak jej nie dopiszę to wywala mi później że nie istnieje ;x
Klasa User:
class User { private $login; private $query; public function __construct($baza) { $this->pdo = $baza; } public function selectUser($user) { $this->login = $user; $this->query = $this->pdo->prepare('SELECT * FROM users WHERE login =:login'); $this->query->bindParam(':login', $this->login, PDO::PARAM_STR); $this->query->execute(); if($this->query->rowCount() > 0) { $row=$this->query->fetch(); $this->nazwa = $row['data']; } public function getUserData() { return $this->nazwa; } }
Kod napisany tylko żeby sprawdzić czy się uruchamia.
A wywołuje metody tak:
$user = new User(new DataBaseConnection()); $user->selectUser('jakisUser');
Ogólnie działa, no chyba że skasuje metode prepare w klasie DataBaseConnection to wtedy już nie ;p Tylko pytanie jak już wcześniej napisałem czy dobrą drogą idę ?