BlogSysteempje maken
Ik ga beginnen met het maken van blogsysteempje.
Maar omdat ik mijn oop eens wil testen zal ik dat maken dmv oop.
Hierbij is mijn vraag, wat voor classen ga ik moeten aanmaken?
Ik wil niet dat het gwn allemaal classen zijn maar dat ze ook effectief samen werken zoals dat hoort bij oop.
Iemand tips?
mvg, Manaus
Gewijzigd op 01/01/1970 01:00:00 door Manaus
Begin met het maken van een lijst wat je systeem meot kunnen
en dan mooie schema's gaan teken in UML :)
Als je dat hebt gedaan ga je kijken welke objecten er nodig zijn (zie nieuwe tutorial: object geörienteerd denken).
De volgende stap is welke methods (functies) bij welk object horen. En wat de eigenschappen van elke object moeten zijn. (Standaard dingen zoals een pdo object kun je hier voor het overzicht nog even weg laten).
Als het goed is heb je nu een lijstje met alle classes die je moet gebruiken, met de methods en properties. Vaak blijkt dat je een paar functies bent vergeten, voeg die dan direct toe!.
Nu ga je kijken naar de visabilty van de methods en properties (public, protected of private).
Nu kan je beginnen met het uitprogrammeren van de classes en gaan testen.
Als je niet zeker weet of je het goed heb gedaan vraag je hier ff om kritiek over je opzet.
Succes!
Gewijzigd op 01/01/1970 01:00:00 door Citroen Anoniem Graag
Als ik klaar ben met mijn systeempje zal ik zeker hier posten om kritiek en wat beter kan.
Edit:
Ik ben begonnen met men lijstje, zoveel moet de blog niet kunnen natuurlijk.
Hieronder vind je mijn lijstje, is dit een goeie manier?
- een blog maken
-> blog maken
-> blog ophalen
-> blog aanpassen
-> blog verwijderen
- reacties
-> reactie maken
-> reactie opmaken
-> reactie aanpassen (kijken voor de juiste rechten)
-> reactie verwijderen (kijken voor de juiste rechten)
- admin functie
-> blog maken
-> blog verwijderen
-> blog aanpassen
-> inloggen
-> uitloggen
mvg, Manaus
Gewijzigd op 01/01/1970 01:00:00 door Manaus
manaus:
-> inloggen
-> uitloggen
-> uitloggen
Misschien nog wat extra dingen:
Wachtwoord genereren (voor zowel opvragen als registreren handig)
Activeren (naja kun je ook nog wachtwoord genereren voor gebruiken om als activatie code te dienen)
Wachtwoord opvragen via email / gebruikersnaam
(her)activeren, stel dat iemand zijn wachtwoord via email/gebruikersnaam opvraagt dat hij/zij een link in de email krijgt met daarin een link die een nieuw wachtwoord genereert en die opstuurt. Dit voorkomt misbruik van die functie. (leuk om mensen mee te "klieren")
Ban/Straf functie? Je zou misschien aan posts een reactie meter kunnen hangen. Is de post leuk/grappig etc. dat andere kunnen stemmen op die reactie. Zo kun je punten weg "punishen" bij ongewenst gedrag
Gewoon een edit profile: misschien dat ze kunnen kiezen uit meerdere templates? Wachtwoord wijzigen, email wijzigen etc.
Gewijzigd op 01/01/1970 01:00:00 door Michel W
In- en Uitloggen is voor de admin, dus al die functies die je zegt hoeven niet ;)
Bannen is wel een goed idee.
-> reactie maken
-> reactie opmaken
-> reactie aanpassen (kijken voor de juiste rechten)
-> reactie verwijderen (kijken voor de juiste rechten)
Ik zou niet willen dat iemand anders reacties zou kunnen maken onder mijn naam ^^
Owja ik ben iemand die soms wat over creatief kan zijn met zijn ideeen ^^
Gewijzigd op 01/01/1970 01:00:00 door Michel W
Denken jullie dat ik goed bezig ben of totaal niet?:
Gewijzigd op 01/01/1970 01:00:00 door Manaus
tutorial van PHPErik nog een keertje doorlezen, en het loont om een keer te kijken naar hoe bijvoorbeeld MySQLi en PDO zijn opgebouwd.
Als je daar naar kijkt zal het je opvallen dat PDO bij PDO::query() niet een pointer meegeeft die je bij andere functies kan gebruiken, maar een object, PDO_Statement, waar je direct je methods op aan kan roepen. De resultaten worden behandeld als een object, als een op zichzelf staand ding. Jij behandeld ze eerder als een notitie die je doorgeeft aan je andere methods. Je doet eigenlijk precies fout wat iedereen die begint met OOP fout doet: je maakt van klassen setjes functies. Je geeft het zelf ook nog eens aan doordat je constant "static" & self gebruikt.
Maar als je nu eerst even de details - hoe je met de database gaat praten - buiten beschouwing laat: Hoe ga je je blog indelen? Voor welk ding maak je een object, en waar komen de methods die de blog-posts ophalen en de reacties erbij zoeken?
Misschien moet je die Als je daar naar kijkt zal het je opvallen dat PDO bij PDO::query() niet een pointer meegeeft die je bij andere functies kan gebruiken, maar een object, PDO_Statement, waar je direct je methods op aan kan roepen. De resultaten worden behandeld als een object, als een op zichzelf staand ding. Jij behandeld ze eerder als een notitie die je doorgeeft aan je andere methods. Je doet eigenlijk precies fout wat iedereen die begint met OOP fout doet: je maakt van klassen setjes functies. Je geeft het zelf ook nog eens aan doordat je constant "static" & self gebruikt.
Maar als je nu eerst even de details - hoe je met de database gaat praten - buiten beschouwing laat: Hoe ga je je blog indelen? Voor welk ding maak je een object, en waar komen de methods die de blog-posts ophalen en de reacties erbij zoeken?
-> blog maken
-> blog ophalen
-> blog aanpassen
-> blog verwijderen
- admin functie extends blog maken
-> inloggen
-> uitloggen
Denk dat het zo iets handiger is :) classes zijn om dubbel werk te voorkomen
Ben ik nu goed bezig ofniet?
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?php
/**
* @author
* @copyright 2008
*/
class reactie{
private $id;
private $author;
private $title;
private $content;
private $blog;
private $datum;
private $ip;
private $db;
public function __construct(db $db, $id){
$this->db = $db;
$this->id = $id;
}
public function load(){
$query = $this->db->query("SELECT title, content, datum, ip, author, blog, bewerkdatum, bewerkt FROM reacties
WHERE id = ".$this->db->quote($this->db));
if($this->db->totaal($query) > 0){
$row = $this->db->fetch($query);
$this->author = $row['author'];
$this->title = $row['title'];
$this->content = $row['content'];
$this->datum = $row['datum'];
$this->ip = $row['ip'];
$this->blog = $row['blog'];
}
else{
throw new Exception("Reactie niet gevonden in database!");
}
}
public function edit($title, $content){
$query = $this->db->query("UPDATE reacties SET
content = ".$this->db->quote($content).",
title = ".$this->db->quote($title).",
bewerkdatum = NOW(),
bewerkt = '1'
WHERE id = ".$this->db->quote($this->id)."
");
}
public function delete(){
$query = $this->db->query("DELETE FROM reacties WHERE id = ".$this->db->quote($id));
}
public function ban(){
$this->db->query("INSERT INTO ban SET (datum, reden, ip) VALUES
(NOW(), ".$this->db->quote($reden).", ".$this->db->quote($this->ip).")
");
}
}
class reacties{
private $reacties = array();
private $db;
public function __construct(db $db){
$this->db = $db;
}
public function load($id){
unset($this->reacties);
$reactie = new reactie($this->db, $id);
$reactie->load();
$this->reacties[] = $reactie;
}
public function loadmore($blog_id){
unset($this->reacties);
$query = $this->db->query("SELECT id FROM reacties WHERE blog = ".$this->db->quote($blog_id));
while($row = $this->db->fetch($query)){
$reactie = new reactie($this->db, $row['id']);
$reactie->load();
$this->reacties[] = $reactie;
}
}
public function edit($id, $title, $content){
if(admin::ingelogd){
$reactie = new reactie($this->db, $id);
$reactie->edit($title, $content);
}
else{
throw new Exception("Je bent niet ingelogd als admin!");
}
}
public function delete($id){
if(admin::ingelogd){
$reactie = new reactie($this->db, $id);
$reactie->delete();
}else{
throw new Exception("Je bent niet ingelogd als admin!");
}
}
}
?>
/**
* @author
* @copyright 2008
*/
class reactie{
private $id;
private $author;
private $title;
private $content;
private $blog;
private $datum;
private $ip;
private $db;
public function __construct(db $db, $id){
$this->db = $db;
$this->id = $id;
}
public function load(){
$query = $this->db->query("SELECT title, content, datum, ip, author, blog, bewerkdatum, bewerkt FROM reacties
WHERE id = ".$this->db->quote($this->db));
if($this->db->totaal($query) > 0){
$row = $this->db->fetch($query);
$this->author = $row['author'];
$this->title = $row['title'];
$this->content = $row['content'];
$this->datum = $row['datum'];
$this->ip = $row['ip'];
$this->blog = $row['blog'];
}
else{
throw new Exception("Reactie niet gevonden in database!");
}
}
public function edit($title, $content){
$query = $this->db->query("UPDATE reacties SET
content = ".$this->db->quote($content).",
title = ".$this->db->quote($title).",
bewerkdatum = NOW(),
bewerkt = '1'
WHERE id = ".$this->db->quote($this->id)."
");
}
public function delete(){
$query = $this->db->query("DELETE FROM reacties WHERE id = ".$this->db->quote($id));
}
public function ban(){
$this->db->query("INSERT INTO ban SET (datum, reden, ip) VALUES
(NOW(), ".$this->db->quote($reden).", ".$this->db->quote($this->ip).")
");
}
}
class reacties{
private $reacties = array();
private $db;
public function __construct(db $db){
$this->db = $db;
}
public function load($id){
unset($this->reacties);
$reactie = new reactie($this->db, $id);
$reactie->load();
$this->reacties[] = $reactie;
}
public function loadmore($blog_id){
unset($this->reacties);
$query = $this->db->query("SELECT id FROM reacties WHERE blog = ".$this->db->quote($blog_id));
while($row = $this->db->fetch($query)){
$reactie = new reactie($this->db, $row['id']);
$reactie->load();
$this->reacties[] = $reactie;
}
}
public function edit($id, $title, $content){
if(admin::ingelogd){
$reactie = new reactie($this->db, $id);
$reactie->edit($title, $content);
}
else{
throw new Exception("Je bent niet ingelogd als admin!");
}
}
public function delete($id){
if(admin::ingelogd){
$reactie = new reactie($this->db, $id);
$reactie->delete();
}else{
throw new Exception("Je bent niet ingelogd als admin!");
}
}
}
?>
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
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
<?php
/**
* @author
* @copyright 2008
*/
class db{
private $connected;
public $queries = 0;
public function connect($host, $username, $password, $db){
if($this->connected == NULL){
if($connection = mysqli($host, $username, $password, $db)){
self::$connected = $connection;
}
else{
throw new Exception("Er kon geen database verbinding gemaakt worden!");
}
}
else{
}
}
public function query($sql){
if($this->connected == NULL){
throw new Exception("Er is nog geen database verbinding gemaakt!");
}else{
$query = mysqli_query($this->connected,$sql);
if($query){
$this->queries++;
return $query;
}
else{
throw new Exception(mysqli_error());
}
}
}
public function fetch($query){
return mysqli_fetch_assoc($query);
}
public function totaal($query){
return mysqli_num_rows($query);
}
public function quote($string){
return "'".mysqli_real_escape_string($string)."'";
}
}
?>
/**
* @author
* @copyright 2008
*/
class db{
private $connected;
public $queries = 0;
public function connect($host, $username, $password, $db){
if($this->connected == NULL){
if($connection = mysqli($host, $username, $password, $db)){
self::$connected = $connection;
}
else{
throw new Exception("Er kon geen database verbinding gemaakt worden!");
}
}
else{
}
}
public function query($sql){
if($this->connected == NULL){
throw new Exception("Er is nog geen database verbinding gemaakt!");
}else{
$query = mysqli_query($this->connected,$sql);
if($query){
$this->queries++;
return $query;
}
else{
throw new Exception(mysqli_error());
}
}
}
public function fetch($query){
return mysqli_fetch_assoc($query);
}
public function totaal($query){
return mysqli_num_rows($query);
}
public function quote($string){
return "'".mysqli_real_escape_string($string)."'";
}
}
?>
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
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
<?php
/**
* @author
* @copyright 2008
*/
class admin{
public static $ingelogd;
private $username;
private $password;
private $db;
public function __construct(db $db){
$this->check_ingelogd();
$this->loadinfo();
$this->db = $db;
}
public function loadinfo(){
$query = $this->db->query("SELECT password, username FROM instellingen WHERE id = '1'");
$row = $this->db->fetch($query);
$this->username = $row['username'];
$this->password = $row['password'];
}
public function check_ingelogd(){
if(isset($_SESSION['ingelogd'])){
self::$ingelogd = TRUE;
}
else{
self::$ingelogd = FALSE;
}
}
public function login($username, $password){
if($username == $this->$username && sha1($password) == $this->$password){
self::$ingelogd = TRUE;
$_SESSION['ingelogd'] = 1;
}
else{
self::$ingelogd = FALSE;
}
}
}
?>
/**
* @author
* @copyright 2008
*/
class admin{
public static $ingelogd;
private $username;
private $password;
private $db;
public function __construct(db $db){
$this->check_ingelogd();
$this->loadinfo();
$this->db = $db;
}
public function loadinfo(){
$query = $this->db->query("SELECT password, username FROM instellingen WHERE id = '1'");
$row = $this->db->fetch($query);
$this->username = $row['username'];
$this->password = $row['password'];
}
public function check_ingelogd(){
if(isset($_SESSION['ingelogd'])){
self::$ingelogd = TRUE;
}
else{
self::$ingelogd = FALSE;
}
}
public function login($username, $password){
if($username == $this->$username && sha1($password) == $this->$password){
self::$ingelogd = TRUE;
$_SESSION['ingelogd'] = 1;
}
else{
self::$ingelogd = FALSE;
}
}
}
?>
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<?php
/**
* @author
* @copyright 2008
*/
class blog{
private $id;
private $title;
private $content;
private $datum;
private $db;
public function __construct(db $db, $id){
$this->id = $id;
$this->db = $db;
}
public function load(){
$query = $this->db->query("SELECT title, content, datum, bewerkt, bewerkdatum
FROM blogs
WHERE id = ". $this->db->escape($this->id) ."
");
if($this->db->totaal($query) > 0){
$row = $this->db->fetch($query);
$this->title = $row['title'];
$this->content = $row['content'];
$this->datum = $row['datum'];
}
else{
throw new Exception("Blog bestaat niet!");
}
}
public function edit($title, $content){
$this->db->query("UPDATE blogs
SET title = ".$this->db->escape($title).",
content = ".$this->db->escape($content).",
bewerkt = '1',
bewerkdatum = NOW()
WHERE id = ".$this->db->escape($this->id)."
");
return TRUE;
}
public function delete(){
$this->db->query("DELETE FROM blogs WHERE id = '".$this->db->escape($this->id)."' LIMIT 0,1");
return TRUE;
}
}
class blogs{
private $blogs = array();
private $db;
public function __construct(db $db){
$this->db = $db;
}
public function load($id){
unset($this->blogs);
$blog = new blog($id);
$blog->load();
$blogs[] = $blog;
}
public function load_more($where){
unset($this->blogs);
$query = $this->db->query("SELECT id FROM blogs WHERE ".$where);
while($row = $this->db->fetch($query)){
$blog = new blog($this->db, $row['id']);
$blog->load();
$blogs[] = $blog;
}
}
public function edit($id, $title, $content){
$blog = new blog($this->db, $id);
$blog->edit($title, $content);
}
public function delete($id, $title, $content){
$blog = new blog($this->db, $id);
$blog->delete();
}
public function load_reacties($id){
}
}
?>
/**
* @author
* @copyright 2008
*/
class blog{
private $id;
private $title;
private $content;
private $datum;
private $db;
public function __construct(db $db, $id){
$this->id = $id;
$this->db = $db;
}
public function load(){
$query = $this->db->query("SELECT title, content, datum, bewerkt, bewerkdatum
FROM blogs
WHERE id = ". $this->db->escape($this->id) ."
");
if($this->db->totaal($query) > 0){
$row = $this->db->fetch($query);
$this->title = $row['title'];
$this->content = $row['content'];
$this->datum = $row['datum'];
}
else{
throw new Exception("Blog bestaat niet!");
}
}
public function edit($title, $content){
$this->db->query("UPDATE blogs
SET title = ".$this->db->escape($title).",
content = ".$this->db->escape($content).",
bewerkt = '1',
bewerkdatum = NOW()
WHERE id = ".$this->db->escape($this->id)."
");
return TRUE;
}
public function delete(){
$this->db->query("DELETE FROM blogs WHERE id = '".$this->db->escape($this->id)."' LIMIT 0,1");
return TRUE;
}
}
class blogs{
private $blogs = array();
private $db;
public function __construct(db $db){
$this->db = $db;
}
public function load($id){
unset($this->blogs);
$blog = new blog($id);
$blog->load();
$blogs[] = $blog;
}
public function load_more($where){
unset($this->blogs);
$query = $this->db->query("SELECT id FROM blogs WHERE ".$where);
while($row = $this->db->fetch($query)){
$blog = new blog($this->db, $row['id']);
$blog->load();
$blogs[] = $blog;
}
}
public function edit($id, $title, $content){
$blog = new blog($this->db, $id);
$blog->edit($title, $content);
}
public function delete($id, $title, $content){
$blog = new blog($this->db, $id);
$blog->delete();
}
public function load_reacties($id){
}
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Manaus
Zelf probeer ik altijd een model te maken, een blogpost (jij noemt het een blog, ook goed) en een klasse die die blogs beheert. Ik maak deze dan verantwoordelijk voor het opslaan, ophalen, sorteren, terugvinden en whatever er met die blogs gebeurt, de blog zelf is alleen verantwoordelijk voor zijn eigen inhoud en dat deze klopt en hoeft zich niet druk te maken over opslag en escapen van data.
Voorbeeldje van hoe ik het zou doen:
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<?php
class Blog {
static public function loadFromArray(array $data) {
$blog = new self();
$blog->id = $data['id'];
$blog->title = $data['title'];
$blog->content = $data['content'];
$blog->datum = $data['datum'];
return $blog;
}
protected $id;
protected $title;
protected $content;
protected $datum;
public function id() {
return (int) $this->id;
}
public function title() {
return (string) $this->title;
}
public function content() {
return (string) $this->content;
}
public function datum() {
return new DateTime($this->datum);
}
public function setTitle($title) {
if(strlen(trim($title)) < 1) {
throw new Exception('Titel is leeg. blog::$title moet minstens 1 karakter (geen spatie) lang zijn');
}
$this->title = $title;
}
public function setContent($content) {
$this->content = $content;
}
public function setDatum(DateTime $datum) {
$this->datum = $datum->format('Y-m-d H:i:s');
}
}
class BlogStorage {
protected $db;
public function __construct(DB $db) {
$this->db = $db;
}
public function getRecent($count = 5) {
$result = $this->db->query(sprintf('SELECT ... FROM blogs ORDER BY datum DESC LIMIT %d', $count));
$blogs = array();
while($blog_data = mysql_fetch_assoc($result)) {
$blogs[] = Blog::loadFromArray($blog_data);
}
return $blogs;
}
public function getBlogByID($id) {
$result = $this->db->query(sprintf('SELECT ... FROM blogs WHERE id = %d', $id));
return Blog::loadFromArray(mysql_fetch_assoc($result));
}
public function put(Blog $blog) {
if($blog->id() !== 0) {
$this->db->query('UPDATE...')
} else {
$this->db->query('INSERT...');
}
}
public function delete($id) {
$this->db->query('DELETE...');
}
}
?>
class Blog {
static public function loadFromArray(array $data) {
$blog = new self();
$blog->id = $data['id'];
$blog->title = $data['title'];
$blog->content = $data['content'];
$blog->datum = $data['datum'];
return $blog;
}
protected $id;
protected $title;
protected $content;
protected $datum;
public function id() {
return (int) $this->id;
}
public function title() {
return (string) $this->title;
}
public function content() {
return (string) $this->content;
}
public function datum() {
return new DateTime($this->datum);
}
public function setTitle($title) {
if(strlen(trim($title)) < 1) {
throw new Exception('Titel is leeg. blog::$title moet minstens 1 karakter (geen spatie) lang zijn');
}
$this->title = $title;
}
public function setContent($content) {
$this->content = $content;
}
public function setDatum(DateTime $datum) {
$this->datum = $datum->format('Y-m-d H:i:s');
}
}
class BlogStorage {
protected $db;
public function __construct(DB $db) {
$this->db = $db;
}
public function getRecent($count = 5) {
$result = $this->db->query(sprintf('SELECT ... FROM blogs ORDER BY datum DESC LIMIT %d', $count));
$blogs = array();
while($blog_data = mysql_fetch_assoc($result)) {
$blogs[] = Blog::loadFromArray($blog_data);
}
return $blogs;
}
public function getBlogByID($id) {
$result = $this->db->query(sprintf('SELECT ... FROM blogs WHERE id = %d', $id));
return Blog::loadFromArray(mysql_fetch_assoc($result));
}
public function put(Blog $blog) {
if($blog->id() !== 0) {
$this->db->query('UPDATE...')
} else {
$this->db->query('INSERT...');
}
}
public function delete($id) {
$this->db->query('DELETE...');
}
}
?>
Blogposts ophalen gaat nu zo:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$db = new DB(..);
$blog_storage = new BlogStorage($db);
$recent_blogs = $blog_storage->getRecent(10);
foreach($recent_blogs as $blog) {
echo '<li>' . htmlentities($blog->title()) . '</li>';
}
?>
$db = new DB(..);
$blog_storage = new BlogStorage($db);
$recent_blogs = $blog_storage->getRecent(10);
foreach($recent_blogs as $blog) {
echo '<li>' . htmlentities($blog->title()) . '</li>';
}
?>
En een nieuwe post toevoegen ongeveer zo:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$db = new DB(..);
$blog_storage = new BlogStorage($db);
$new_blog = new Blog();
$new_blog->setTitle($_POST['title']);
$new_blog->setContent($_POST['content']);
$new_blog->setDatum(new DateTime());
$blog_storage->put($new_blog);
?>
$db = new DB(..);
$blog_storage = new BlogStorage($db);
$new_blog = new Blog();
$new_blog->setTitle($_POST['title']);
$new_blog->setContent($_POST['content']);
$new_blog->setDatum(new DateTime());
$blog_storage->put($new_blog);
?>
Zie je dat het nu wat logischer allemaal wordt? Je kan een Blog gebruiken om hem op te slaan in de database, maar je zou ook een BlogXMLStorage klasse kunnen maken die de blogs opslaat in XML in plaats van een database. De blog is nu niet meer direct gekoppeld aan de database waardoor je hem voor veel meer doeleinden kan gebruiken.
Het heeft ook wat meer weg van de werkelijke wereld. Je zegt niet tegen je papiertje "sla jezelf op!". Instead stop jij het papiertje in een map of prik je het op je prikbord. Jij blijft in controle, jij bepaald wat er gebeurt. Niet hoe het gebeurt (maakt jouw het uit hoe het mechanisme van een map werkt, of wat de formule van de kurk in je prikbord is) maar wat er gebeurt. Dat is niet aan je papiertje, aan je blog-object, om te weten. Met klassen is het bijna hetzelfde als met mensen. Hoe minder ze weten, hoe beter >:)
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
Hartelijk bedankt!! Hier kan ik mee verder. Zeer duidelijk trouwens;)
Jelmer schreef op 08.08.2008 12:48:
Met klassen is het bijna hetzelfde als met mensen. Hoe minder ze weten, hoe beter >:)
Dan is het met jou niet zo goed gesteld: jij weet echt veels-te-veel af van OOP, dat wil ik ook!