He!

Ik me gister even een beetje in OOP bediept en uiteindelijk mijn eerste gastenboek in elkaar geknutselt.

Hij werkt, dat is al een positief punt, ik wil hem alleen graag even hier laten zien zodat de meer ervaren OOP mensen er wat commentaar op kunnen geven aangezien ik zelf nogal weinig ervaring heb met OOP.

Ik heb twee classes:
een mysql class, voor de connectie, selectie en query e.d
en de guestbook class, voor het gastenbook (who would have guessed)

Klik hier voor de mysql class
Klik hier voor de guestbook class

Verder heb ik nog:
index.php
new_entry.php

Zo dat zijn eigenlijk alle bestanden.
Een werkend voorbeeld is hier te zien

Ik hoop dat jullie me kunnen vertellen wat ik goed doe, maar vooral wat ik fout doe - en waarom - zodat ik het allemaal beter kan begrijpen.

Thanks!
Arian schreef op 14.10.2008 18:45

Gooi de mysql class weg. Het is slechts een simpele wrapper van de mysql extensie van php. Gebruik gewoon de OOP methode van de mysqli of de PDO extensie. Deze class beperkt je alleen maar in je mogelijkheden.


heb zelf ook en mysql classe maar die extended en de classe PDO,
ik zou je mysql classe niet weg gooien maar bewerken en aanpassen.
en goed voorbeeld = [url =http://www.phphulp.nl/php/scripts/1/1376/]KLIK[/url]
Arian schreef op 14.10.2008 18:45

@ rvw: MVC is meestal OOP, maar OOP != MVC

mjah ok, daar in heb je gelijk.
Even een 'klein' code voorbeeltje:
Het zal vast niet direct werken, maar het gaat even om het idee ;)

Ook kan je je afvragen wat bij een gastenboek het nut is om van een entry een object te maken. Maar het gaat dus even om het principe ;)

<?php

class Gastenboek {

public function get_entries(){

$limit = $this->currentPage * $this->entriesPerPage - $this->entriesPerPage;
$sql = "SELECT id, message, user_name FROM entries LIMIT " . $this->entriesPerPage . " OFFSET " . $limit;
$this->db->query($sql);

$entries = array();
foreach($this->db->get_assoc() as $entry){
$entries[$entry['id']] = new Gastenboek_Entry($entry['id'],$entry);
}

$this->entries = $entries;
return $entries;
}

}

class Mijn_Gastenboek extends Gastenboek {

public function getEntry($id){
return isset($this->entries[$id]) ? $this->entries[$id] : false;
}

public function createEntry($options){
$this->db->insert('gastenboek',$options);
$id = $this->db->lastInsertId();
$this->entries[$id] = new Gastenboek_Entry($id,$options);
}

}

class Gastenboek_Entry {

protected $options;
protected $id;

public function __construct($id,$options){
$this->setOptions($options);
}

protected function setOptions($options){
$this->options['author'] = isset($options['author']) ? $options['author'] : '';
// ...
}

public function getAuthor(){
if(!isset($this->options['author'])){
return false;
}
return $this->options['author'];
}

public function setMessage($msg){
$this->db->update('gastenboek',array('message'=>$this->db->escape($msg)),'id = '.(int)$id);
}

// ...
}

$gastenboek = new Mijn_Gastenboek();

$entry = $gastenboek->getEntry(3);
if($entry !== false){
echo $entry->getAuthor();
if(!empty($_POST['msg'])){
$entry->setMessage($_POST['msg']);
}
}

?>
Mijn dank is groot Arjan! Ik ben weer even zoet.

Arian schreef op 14.10.2008 19:33

Ook kan je je afvragen wat bij een gastenboek het nut is om van een entry een object te maken. Maar het gaat dus even om het principe ;)

Haha, you brought it up!

Reageren