OOP structuur
Ik ben al een enige tijd bezig met het programmeren in PHP (procedureel). Echter wil ik nu verder en ben ik me gaan verdiepen in PHP OOP (met kennis van Java en Actionscript 3). OOP denken is dus niet zo'n heel groot probleem.
Wat wel mijn probleem is is hoe bouw ik uiteindelijk zo'n mappen structuur op.
Ik weet de richtlijnen van het maken van classe bestanden en dat die in de map classes moet komen.
Maar hoe koppel je die vervolgens aan elkaar? Ik heb nu verscheidene OOP Scripts bekeken, maar krijg nergens een duidelijke structuur in? Wat doet men met index.php bijvoorbeeld? Ik weet dat je ze moet includen voordat je ze kan gebruiken, maar hoe gaat dat in werking? Blijft het de bedoeling dat je procedureel en OOP door elkaar gaat gebruiken?
Moet je dus ongeveer zo gaan werken in je index.php bestand?
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$guestbook = new Guestbook('guestbook.txt');
$user = new User('xxxx', 'xxxx', 'xxxx');
$user->placeMessage($guestbook, 'xxxxx');
echo $guestbook->viewMessage();
?>
$guestbook = new Guestbook('guestbook.txt');
$user = new User('xxxx', 'xxxx', 'xxxx');
$user->placeMessage($guestbook, 'xxxxx');
echo $guestbook->viewMessage();
?>
Hoe ziet men dat?
Gewijzigd op 06/03/2011 15:00:38 door Leander ---
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$guestbook = new Guestbook;
$user = User::loadFromId($id);
//of
$user = new User($name);
$message = new Message;
$message->setUser($user);
$message->setBody($body);
$guestbook->post($message);
foreach($guestbook->getMessages() as $message)
echo $message->getUser()->getName().': '.$message->getBody()."\n";
?>
$guestbook = new Guestbook;
$user = User::loadFromId($id);
//of
$user = new User($name);
$message = new Message;
$message->setUser($user);
$message->setBody($body);
$guestbook->post($message);
foreach($guestbook->getMessages() as $message)
echo $message->getUser()->getName().': '.$message->getBody()."\n";
?>
Dit vereist wel wat ingewikkelder code, omdat bij Guestbook#getMessage() ook de user moet worden geladen. Dit kan je handmatig doen, of je kan al het werk overlaten aan een ORM als Doctrine
Gewijzigd op 06/03/2011 16:42:12 door Pim -
Ja oke, maar het blijft dus wel dat je zulke code (soort van procedureel) blijft houden in je bestanden (wel met objecten) in combinatie met classes?
Als je een mvc framework gebruikt, zitten dit soort handelingen in actie-methodes in een controller-klasse.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
class GuestbookController extends Controller
{
public function postAction($name, $body)
{
$guestbook = new Guestbook;
$user = User::loadFromId($id);
//of
$user = new User($name);
$message = new Message;
$message->setUser($user);
$message->setBody($body);
$guestbook->post($message);
// Stuur de berichten naar de template en render die
return $this->render('guestbook', $guestbook->getMessages());
}
}
?>
class GuestbookController extends Controller
{
public function postAction($name, $body)
{
$guestbook = new Guestbook;
$user = User::loadFromId($id);
//of
$user = new User($name);
$message = new Message;
$message->setUser($user);
$message->setBody($body);
$guestbook->post($message);
// Stuur de berichten naar de template en render die
return $this->render('guestbook', $guestbook->getMessages());
}
}
?>
Het MVC framework zorgt er dan voor dat de juiste action wordt aangeroepen.
MVC tut
Symfony een van de beste frameworks, wel vrij complex
Ik denk dat ik me ook maar eens moet verdiepen in die frameworks..