Goeiemorgen,

Na vele tutorials gelezen te hebben over OO wil ik zelf wel eens een classe schrijven.

Nadat ik gister een tutorial over de denkwijze van OO van PHPerik heb gelezen ben ik gaan twijfelen. Hoe schrijf ik nou precies een goede classe.

Ik wil het volgende gaan uitwerken. Een pm systeem. (Of is dit te moeilijk?)

Hoe zouden jullie de functions noemen? En hoeveel classen zou ik moeten maken??

Groeten

EDIT

Kan ik ook beter gebruik maken van PDO of is mysql ook gewoon goed?
Mooi werk Blanche, deze ga ik morgen eens heel goed doornemen.
Allereerst blanche,

Een hele goeie tut, weer aantal dingen die ik geleerd heb..

Ik heb nu de volgende classen aangemaakt voor mijn pm_box ben ik goed op weg?

mijn database class

<?php

class database_controller
{

public $db;

private $db_info['host'] = 'localhost';
private $db_info['database'] = 'pm_class';
private $db_info['gebruiker'] = 'root';
private $db_info['wachtwoord'] = '';

public function db_connect()
{

$mysqli = new mysqli($db['host'], $db['gebruiker'], $db['wachtwoord'], $db['database']);

if(mysqli_connect_errno())
{

trigger_error('Fout bij verbinding: '.$mysqli->error);

}

}

public function __construct ($mysqli)
{

$this->mysqli = $mysqli;

}

}

?>

mijn berichten class

<?php

class berichten
{

public function __construct()
{


}

public function inbox ()
{


}

public function nieuwbericht ()
{


}

public function verwijderen ($id)
{


}

public function leegmaken ()
{


}

public function prullenbak ()
{


}

}

?>

mijn class bericht_controller

<?php

class bericht_controller
{

public function __construct()
{

}

public function controleer_titel ()
{


}

public function controleer_bericht ()
{


}

public function verzend_bericht ()
{



}


}



?>

Ben ik op de goeie weg of moet ik het helemaal anders aanpakken?
Wat is de class berichten, en wat verschilt hij met de berichten_controller? Waarvan controleert de berichten_controller de berichten? Wat is uberhaupt een bericht? (of vriendelijker: je definieert niet wat een bericht is, je hebt er geen class voor)

Je hebt een definitie van een bericht-object nodig, en je heb iets nodig waar je de berichten uit kan halen en in kan stoppen (wat jij de berichten_controller noemt?)

Nog een hint voor naamgeving: Probeer je classes altijd naar een enkelvoudig zelfstandig naamwoord te vernoemen, en je methods in de gebiedende wijs.
<?php
class Berichten_Store
{
public function getInbox()
{
return array(new Bericht(), new Bericht());
}

public function verwijder(Bericht $bericht)
{
return true;
}

public function verstuur(Bericht $bericht)
{
return true;
}
}
?>
En als je methods verzint, moet je eigenlijk ook meteen de argumenten voor die methods uitdenken. Bijvoorbeeld Bericht::controleer_titel() zou inderdaad een goeie method zijn van een class, maar Bericht::controleer_titel($titel) zou je als static kunnen aanmerken omdat het niet langer gebonden is aan één specifiek bericht; Je kan ermee de titel voor ieder willekeurig bericht controleren.
Kort samengevat?

Ik moet overnieuw beginnne en een beetje op jouw manier verder gaan?

Opnieuw beginnen is zeker een goed plan, maar begin dan opnieuw met het herkennen van de objecten die je ziet. Lees vooral ook de hoofdstukken 'object georiënteerd denken' en 'foute denkwijze' uit die handleiding, dat is namelijk het punt waarop het bij jou nog fout gaat. Zodra je denkt dat je een overzicht van de benodigde objecten en hun functionaliteit, dan is het tijd om de classes voor die objecten te gaan schrijven.

Neem de tips van Jelmer mee en dan vooral die over de namen van je classes en methods. Daaruit kun je al afleiden of je op de goede weg bent.
@Blanche

Dat klopt helemaal, de denkwijze is voor mij nog lastig. Zodra ik dat in orde heb kan ik de code wel zo in elkaar flanzen..

Ik ga het nog eens proberen.

Jullie horen meer.

Bedankt voor de reacties
Het lukt me nog steeds niet.. Wil iemand mij een opzet geven?
Tot waar ben je zelf gekomen?
Het lukt me niet om goeie namen voor de functions te verzinnen zoals jij op die tutorial goed uitlegt. Dan snap ik het wel. Maar als ik het in de werkelijkheid zelf moet maken ga ik de mist in

EDIT

Moet ik nou met iets makkelijkers beginne of?
De namen van methods beschrijven altijd de handeling die uitgevoerd wordt. Dus setUsername(), deleteMessage(), send(), display(), etc.

Als je hebt bedacht wat een bepaalde method moet doen, hoeft het toch niet heel moeilijk te zijn om een naam te verzinnen?

Reageren