$database=new db();
function doe_iets
{
//Ik heb hier de database nodig,
//hoe doe ik dit zonder opniew verbinding te maken?
}
$database=new db();
function doe_iets
{
//Ik heb hier de database nodig,
//hoe doe ik dit zonder opniew verbinding te maken?
}
'global $database' Werkt natuurlijk, maar dat is niet echt proper.
En als ik '$db=new db();' gebruik in de functie, wordt er opnieuw verbinding gemaakt, terwijl er al een is.
Hoe los ik dit op? Ik had al iets gehoord van static, maar dat gebruik ik precies niet goed, want dat gaat niet bij mij.
class MySQLiClass {
private $db;
public function __construct($host, $user, $pass) {
$this->db = mysqli_connect($host, $user, $pass);
}
public function doeiets() {
//hier gebruik je $this->db voor de verbinding
}
}
$host = 'localhost';
$user = 'user';
$pass = 'pass';
// Aanroepen van de functie
$object = new MySQLiClass($host, $user, $pass);
$doeiets = $object->doeiets();
class MySQLiClass {
private $db;
public function __construct($db) {
$this->db = $db;
}
public function doeiets() {
//hier gebruik je $this->db voor de verbinding
}
}
$host = 'localhost';
$user = 'user';
$pass = 'pass';
$db = mysqli_connect($host, $user, $pass);
// Aanroepen van de functie
$object = new MySQLiClass($db);
$doeiets = $object->doeiets();
class MySQLiClass {
private$db;
publicfunction __construct($db){
$this->db=$db;
}
publicfunction doeiets(){
//hier gebruik je $this->db voor de verbinding
}
}
$host='localhost';
$user='user';
$pass='pass';
$db= mysqli_connect($host,$user,$pass);
// Aanroepen van de functie
$object=new MySQLiClass($db);
$doeiets=$object->doeiets();
In de eerste manier maak je dus bij elke aanroep van de class een connectie. Bij de tweede manier maak je 1x een connectie en deze gebruik je dan door al je classes ed heen.
Zelf maak ik gebruik van het registry design pattern. Hierin kan ik door heel mijn project scope gebruik maken van get en set functies. In mijn config zet ik dus gelijk het database object van de connectie in mijn registry, en kan deze dan overal gebruiken.
Ik geef aan dat dit simpele voorbeelden zijn er zijn namelijk nog vele voorbeelden meer. Gebruik maken van een database class bijvoorbeeld die alle handelingen doen naar je database. Deze geeft dan bijvoorbeeld alleen een array terug met je result set.
Zoals marten het zegt, had ik nu ook al, maar het gaat erom hoe ik die $database in een aparte functie gebruik. (In een functie kan geen var van erbuiten worden aangeroepen, tenzij mij 'global $database;').
Ik zal wel eens kijken naar dat singleton pattern.
@sliphead:
Het is voor sommige dingen gewoon gemakkelijker om een db class te gebruiken.
Zie mijn tweede manier? Anders geef je de db mee in de functie of je zet de db in een sessie mogelijkheden genoeg. Mooiste is natuurlijk de singleton of registry pattern.