Nee via de link leer je over OOP. Een database connectie maken doe je het beste met een eigen geschreven class, al is het alleen maar dat je niet je hele programma wilt doorspitten wanneer je een iets andere "driver" wilt gebruiken. (Bijvoorbeeld Microsoft SQL ipv MySql). In de rest van je applicatie roep je methods van deze class aan in plaats van rechtstreeks mysqli_* functies (als voorbeeld). Nog sterker ik zou vanuit je controller een repositoryClass aanroepen waar je queries in geschreven zijn. Die repositoryClass zou ik je database class laten aanroepen.
Een super-summier voorbeeldje hoe je je OOP applicatie zou kunnen beginnen.
<?php
class ServiceContainer { // De service container bewaard een aantal classes die je veelvuldig gebruikt en makkelijk wilt raadplegen.
private: $services; // Deze classes noemt men ook wel services
public function __construct()
{
$this->add('config', new Config()); // een Config class die al je configuratie-instellingen kan lezen
$this->add('database', new Database()); // een Database class
$this->add('session', new Session()); // een Session class om van en naar de session te lezen of te schrijven
// ...
}
public function add($name, $instance) // voeg een service toe aan de services array
{
$this->services[$name] = $instance;
}
public function get($name) // verkrijg een service door de naam op te geven
{
if(isset($this->services[$name]))
return $this->services[$name];
return FALSE;
}
}
class Kernel { // De eerste class die geinstantieerd wordt. Tevens de enige class die vanaf de global-space instantieert.
private $container;
public function __construct()
{
$this->container = new ServiceContainer(); // Maak de servicecontainer aan
$this->router = new Router(); // Maak de router aan. De router gaat bepalen welke actie genomen moet worden en roept dan een controller aan.
} // bijvoorbeeld: indexAction, aboutAction of contactAction. (Lees iets over MVC)
public function getContainer()
{
return $this->container;
}
}
class Database {
private $container;
private $mysqli;
public function __construct()
{
$this->container = $GLOBALS['kernel']->getContainer(); // Als eerste moeten we de instantie van de servicecontainer hebben zodat we de Config class kunnen raadplegen.
$config = $this->container->get('config');
$this->mysqli = new mysqli( // Dan kunnen we vervolgens de database instellingen uitlezen en een connectie maken met de database.
$config->getParameter('database_host'),
$config->getParameter('database_user'),
$config->getParameter('database_password'),
$config->getParameter('database_db')
);
if ($mysqli->connect_error) {
throw new Exception('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}
}
public function query($sql) // een functie die als tussenlaag functioneert tussen programmalaag en database.
{ // (je mag geen mysqli* functies gebruiken buiten deze DB class !!!)
return $this->mysqli->query($sql);
}
// ... // nog meer functies zoals num_rows() en getError() etc etc.
}
$kernel = new Kernel(); // hier start je Applicatie en dit is tevens de enige regel op de global space !
?>
Kernel --> Router -> Controller en Action <-> Repository
\--> View
Kernel
De startmotor van je applicatie (zie voorbeeld boven)
Router
Bepaalt bij welke uri (deel van url) je naar welke controller en action gaat.
Bijvoorbeeld deze url:
www.mijnsite.nl/contact --> laadt de ContactController en de indexAction
ContactController: Dit is gewoon een class.
indexAction: Dit is een method (functie) in de ContactController Class
Controller
Hier ga je data verzamelen (bijvoorbeeld uit de database) en roep je een view aan.
<?php
class ContactController extends Controller
{
public function indexAction()
{
$repo = new ContactRepository();
// haal wat keuzemogelijkheden uit de database die je in een dropdown wilt weergeven in je contactformulier.
$choices = $repo->getContactFormSubjectChoices();
// geef de data mee aan de de view.
return $this->render('contact/index.html.php', array('choices' => $choices));
}
}
?>
Repository
Hier staan je queries
<?php
class ContactRepository extends Database
{
public function getContactFormSubjectChoices()
{
return $this->query('SELECT * FROM subject_choices');
}
}
?>
View
Dit is je template of html bestand:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Contact</title>
</head>
<body>
<form>
<select>
<?php foreach($choices as $choice) {
echo '<option>' . $choice['name'] . '</option>';
} ?>
</select>
</form>
</body>
</html>
[size=xsmall]
Toevoeging op 09/03/2016 23:33:50:[/size]
Natuurlijk maak je een logische directory structuur aan voor al deze classes:
project
|-configuration
|-controller
|-repository
|-system
|-view
|-default
|-contact
|-admin
[b]
En al snel kom je er achter dat een framework als Yii, codeigniter, Laravel of (mijn favo) Symfony handig zou zijn. Dan kun je jezelf weer richten op het echte werk: een toffe website bouwen :-)