Goedenavond allemaal, sinds kort met ik bezig met OOP (PHP).
Op het internet zie ik veel voorbeelden langskomen en ze zijn allemaal anders.
Hierdoor raak ik helaas wel in de war.
Stel ik heb een database en ik wil een afbeelding url en een titel willen ophalen. Hoe zou dit er dan ongeveer uitzien in OOP?
Ik hoop dat iemand hier een simpele voorbeeld kan plaatsen zodat ik een idee krijg.
Je zou OOP kunnen gebruiken voor het declareren en gebruiken van database-klasses, of nog een stapje verder kunnen gaan en hier ook nog een abstractielaag bovenop zetten zodat je "praat" met objecten in plaats van database-tabellen.
En de code waarin je een afbeelding en een URL wilt ophalen, wat voor ding is dat? Of wat doe je ermee? Genereer je een HTML-pagina, maak je een RSS-feed, stuur je deze mee in een e-mail? Afhankelijk van die "context" zou je de code die gebruik maakt van je database-klasses ook zelf weer kunnen vatten in klasses.
Ook is het niet helemaal duidelijk wat je bedoelt - gaat het om de algehele (structurele) aanpak met betrekking tot OOP, of ben je gewoon op zoek naar een set van klasses waarmee je gemakkelijk kunt communiceren met je database?
* shameless self plug *
Je zou de laatste 4 klasses in dit bericht kunnen kopiƫren. Ik zeg niet dat deze klasses nou echt super zijn, kijk vooral ook verder ff rond :).
Dan een voorbeeld van gebruik. Hierbij ga ik uit van de aanname dat je tabellen de UTF-8 (utf8 in MySQL) character encoding hebben. Zoniet, dan moet er het eea veranderd worden in je script. De organisatie van de 4 bovengenoemde klasses in directories en bestanden volgt de naamgeving (in het script hieronder staat waar je deze neer zou moet zetten).
<?php
// include de scripts - het zou natuurlijk handiger zijn als je een autoloader had...
require './classes/database.php';
require './classes/database/mysqli.php';
require './classes/database/result.php';
require './classes/database/result/mysqli.php';
// maak een database object aan
// als je database afwijkende instelling heeft (port, host, charset) dan kun je deze in de
// laatste parameter invullen, anders kun je deze leeg laten
$db = new Database_MySQLi('username', 'password', 'database_name', array());
// hulpfunctie voor het escapen van output - mogelijk bevat je data user input, deze mag je dan niet vertrouwen
function escape($in) {
return htmlspecialchars($in, ENT_QUOTES, 'UTF-8');
}
// maak een volledig en kloppend HTML document; geef aan dat het hele document UTF-8 is
header('Content-Type: text/html; charset=UTF-8');
?>
<!DOCTYPE html>
<html>
<head>
<title>database test</title>
</head>
<body><?php
// zet de rest van je code in een try-catch blok; je kunt er ook voor kiezen om dit hele PHP-document in een try-catch blok te zetten, maar dan zou je de die()-statements in de klasses om moeten programmeren
try {
// voer de query uit
$res = $db->query(
'SELECT Url, Titel
FROM tabel
ORDER BY Titel'
);
if ($res->numRows() > 0) {
// bouw tabelletje ofzo...
?><table>
<thead>
<tr><th>Url</th><th>Titel</th></tr>
</thead>
<tbody><?php
// resultaten - doorloop deze
while ($row = $res->fetchRow()) {
// escape ook deze waarden bij het afdrukken
?><tr>
<td><a href="<?php echo escape($row['Url']) ?>" title="">link</a></td>
<td><?php echo escape($row['Titel']) ?></td>
</tr><?php
}
?></tbody>
</table><?php
} else {
// geen resultaten
?><p>Geen resultaten gevonden bij het uitlezen van Tabel.</p><?php
}
// geef het resultaat vrij
$res->freeResult();
} catch(Exception $e) {
// print foutboodschap
// ook de foutboodschap kan user input bevatten, deze moet dus ook onschadelijk worden gemaakt
?><h2>error</h2>
<p><?php echo escape($e->getMessage()) ?></p><?php
}
?></body>
</html>
Het bovenstaande script is verder niet getest, dus hier zitten ongetwijfeld nog wat fouten in, maar dit is ongeveer de opzet.