OO: Implementatie database denkwijze
Nee dat hoeft niet... je kunt de verbinding eenmalig aanmaken. Daar zijn wel truukjes voor.
In de praktijk zal het niet zo snel voorkomen, en dat is met een boel problemen/oplossingen in oop het geval. Maar conceptueel is het wel netter. Oop doe je ook niet alleen omdat het praktisch is of omdat het goed werkt. Gewoon iteratief programmeren werkt ook goed, en gaat, zeker in het begin, zelfs een stuk gemakkelijker en sneller.
Eigenlijk stop je met oop meer in je code dan bij saai iteratief programmeren. Je programmeert niet alleen de bewerkingen die nodig zijn om input (de request) om te vormen tot resultaat (je response, de html) maar in je classes en hun onderlinge relaties leg je de concepten van het probleem vast. Je codeert hoe jij als mens erover nadenkt. Het is niet opmerkelijk dat oop en het maken van een ontologie zoveel op elkaar lijken. In het geval van oop kan je computer (nog) niets met die kennis die jij erin programmeert, maar andere programmeurs wel en daardoor wordt het probleem en jouw oplossing gemakkelijker te begrijpen.
Zo mooi mogelijk oo programmeren, zo goed mogelijk volgens de (ongeschreven?) regels, is gelijk aan zo duidelijk en precies mogelijk die kennis opschrijven.
Het makkelijkst is om in je base model een statisch veld te maken waar je je DB connectie/DBAL in opslaat. Net is het natuurlijk niet.
include_once("settings.php");
include_once("mysql.php");
$db = new mysql($db_host, $db_user, $db_password, $db_database) ;
Dan heeft settings.php de variable voor de DB verbinding.
Meestal werk ik dan met een functions.php en die include in dan, hoef je alles maar een keer te doen, en login gegevens zijn makkelijk te updaten.
Query wordt dan:
$db->query("UPDATE table SET iets='iets' WHERE id='idnum'") ;
En dan werk je zeker met global?
Code (php)
Maar ik probeer bij classes toch nog zoveel mogelijk via de constructor mee te geven. Dit is vooral als ik even snel er iets in hack, of als het om zo'n class gaat die je toch altijd maar op één plek wilt gebruiken, die heel specifiek is voor dat stukje code.
Met een mooie service container is dat toch ook makkelijk en dan heb je zo'n globaal register toch niet nodig?
Pim, is er iets mis met global dan?
Gebruik van globals is erg onoverzichtelijk, leidt tot onvindbare bugs en is niet te testen.