OOP en lussen
class forumindex { functies voor een mysql query (query) te vormen en een fetch_array (fetch) }
$forum = new forumindex;
$result = $forum->query("SELECT * FROM leden");
while($fetch = $forum->fetch($result))
{
echo $fetch['username'];
}
Maar ik zou graag die while ook in de class hebben. Hoe doe ik dat best.
PS: in mijn while staat ook een grote html tabel met de info uit de database die moet dus ook mee in de class.
Maar als je de while in een functie zet en de pagina bestaat uit 2 while lussen (in elkaar), dan heb je maar 1 functie voor die forumindex class + 2 voor de MySQL. Dus 1 functie en 1 class voor de hele pagina, ik denk niet dat dit de bedoeling is, kunnen jullie enkele voorbeelden geven hoe dit op te lossen is?
Gewijzigd op 16/02/2006 10:28:00 door Voldemort
Je zou in een dergelijke class geen queries als parameter moeten geven lijkt me.. maar meer als:
$forum->getUsers(); // Geeft array met alle user_id's
$forum->getUserData($user_id); // Geeft user info
$forum->getTopics(); // Geeft array met alle topic_id's
$forum->getTopicData($topic_id) // Geeft topic info
$forum->getPostsByTopic($topic_id) // Geeft alle post_id's bij een topic_id
$forum->getPostsByUser($user_id); // Geeft alle post_id's bij een user_id
$forum->getPostData($post_id);
De databaseafhandeling gaat dan ook via een "Database Abstraction Layer" of als je alleen 1 database ondersteund gewoon een databaseclassje bijv.
Ik heb een DB class, maar als ik meerdere resultaten wil ophalen moeten die door een lus. En dat is het probleem nu net.
Gewijzigd op 16/02/2006 11:01:00 door Voldemort
Je kan toch ook een array retourneren vanuit je klasse?
Gewijzigd op 16/02/2006 11:45:00 door Voldemort
$forum->printUsers();
Die vervolgens alle users weergeeft. Ik gebruik echter liever dergelijke classes als een gestructureerde manier van data-opvraag en data-opslag dan als middel om het daadwerkelijk weergeven.
Met een array ophalen, en alles in de array zetten, dan moet ik het er achteraf weer met een for(each) lus uithalen, veel verschil zal het dus niet echt maken behalve dat m'n tabel nu buiten mijn class staat.
:P.. Het was een suggestie als je er persé op staat dat het printen van de users IN de class moet gebeuren.. maar ik raad ut niet aan ;)
Je hebt het dus over classes en lussen, niet OOP en lussen zoals je je probleem wilt oplossen.
Maarja, Linux ( ons befaamde OS :+ ) vind OOP ook evil, maar werkt wel heel lekker.
Met andere woorden, als je classes niet lukken, je kan zeker ook zonder! :)
Edit:
Nog even een toevoeging:
Wat hierboven gezegt wordt komt dus uit de spirit van 'een class heeft nooit output, alleen return waardes'.
Al het printen gebeurt dus buiten je class.
Gewijzigd op 16/02/2006 13:41:00 door Mitch X
Maar wat is het verschil tussen OOP en classes? Wat kan je nog meer in OOP dan in classes (PHP)?
Een 'class' is de definitie van een object..
als je de data vanuit je class print, kan je het achteraf niet meer editten... als je een array met data retourneerd, kan je het iedere gewenste opmaak geven, zonder dat je je class hoefd te wijzigen :)
@Pim Vernooij: Hoe bedoel je ik kan het niet meer bewerken? Ik kan toch gewoon alles in m'n class bewerken, daar kan ik toch ook de opmaak kiezen?
Voldemort:
@Pholeron: Wat kan je dan nog meer in PHP OOP doen dan enkel classes?
Hieruit blijkt dus dat jij denkt dat als je een class schrijft je gelijk OO bezig bent.
Dat is dus niet het geval.
Op google vind je mooie verhalen over OOP :)
Quote:
@Pim Vernooij: Hoe bedoel je ik kan het niet meer bewerken? Ik kan toch gewoon alles in m'n class bewerken, daar kan ik toch ook de opmaak kiezen?
Eigelijk zou ik hier hetzelfde kunnen zetten als hierboven.
Je maakt geen opmaak in je class, alleen de bewerkingen doe je in je classes.
Bijv.
Code (php)
Tuurlijk had ik ook echo kunnen gebruiken ipv return, maar dan is de flexibiliteit eraf.
Bijv. onderstaande hadden niet meer gekunt:
Savvy? ;)
Ander groot voordeel is dat code doorgaans inzichtelijker/leesbaarder wordt, beter 'modulair' op te bouwen en uit te breiden is.. enz.. te veel om op te noemen
@Pholeron: Het grote probleem is dat ik geen PHP 5 classes kan gebruiken. Maar op Google vind ik enkel info over classes in OOP :s.
$nieuwsitem1 = array("id" => 27, "titel" => "titel", "datum" => "01-01-2001", "omschrijving" => "Lorem ipsum..");
$nieuwsitem2 = array("id" => 54, "titel" => "titel", "datum" => "01-01-2001", "omschrijving" => "Lorem ipsum..");
$nieuwsitem3 = array("id" => 62, "titel" => "titel", "datum" => "01-01-2001", "omschrijving" => "Lorem ipsum..");
$arr = array(3);
$arr[0] = $nieuwsitem1;
$arr[1] = $nieuwsitem2;
$arr[2] = $nieuwsitem3;
'k weet niet of dit een lichtje doet branden?
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
class index
{
var $news = array();
function getlast($aantal)
{
$query = "SELECT n.*,l.gebruikersnaam
FROM nieuws n LEFT JOIN leden l
ON(n.door = l.id)
LIMIT ".$aantal;
$result = $db->query($query);
$fetch = $db->fetch($result);
}
function inwhile($fetch)
{
while($fetch = $fetch)
{
$this->news = array_push($news,$fetch['']);
}
}
}
?>
class index
{
var $news = array();
function getlast($aantal)
{
$query = "SELECT n.*,l.gebruikersnaam
FROM nieuws n LEFT JOIN leden l
ON(n.door = l.id)
LIMIT ".$aantal;
$result = $db->query($query);
$fetch = $db->fetch($result);
}
function inwhile($fetch)
{
while($fetch = $fetch)
{
$this->news = array_push($news,$fetch['']);
}
}
}
?>
Zeg dan es hoe ik het hier moet en hoe het dan zal moeten als ik zo'n 200 titels alleen eruit moet halen?
Gewijzigd op 16/02/2006 19:05:00 door Voldemort