OOP voorbeeld
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.
Bedankt allemaal!
Met vriendelijke groet,
Fth
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?
Goedemorgen. Stel ik heb een tabel met 2 velden:
Url:
Url1.html
Url2.html
Titel:
Titel 1
Titel 2
Hoe kan ik dit in OOP ophalen en in een HTML tabel tonen?
Ik wil het alleen maar als voorbeeld zodat ik kan zien hoe OOP in elkaar zit.
Zou jij een simpel voorbeeld kunnen plaatsen?
Bedankt!!
Mvg,
Fth
Gewijzigd op 11/04/2015 12:01:52 door Fth lalala
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).
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?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>
// 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.
Gewijzigd op 11/04/2015 12:31:31 door Thomas van den Heuvel
OOP is wel even wennen moet ik toegeven.
Gebruik jij overal OOP voor of?
Ik gebruik OOP wanneer ik het nodig heb (en een zekere toegevoegde waarde heeft) of wanneer ik niet anders kan :s. OOP is een middel, geen doel.
Ik heb inderdaad gelezen dat OOP een middel is en geen doel. Het is geen verplichting o.i.d.!
Zeer bedankt voor al je hulp!