OOP en lussen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Voldemort

Voldemort

12/02/2006 20:14:00
Quote Anchor link
Ik zou OOP willen beginnen scripten. Ik dacht om mijn forum index te herscripten. Alleen daar staat een while lus. Ik kan een MySQL class maken en dan bij while dit doen

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?
 
PHP hulp

PHP hulp

21/11/2024 14:55:43
 
Voldemort

Voldemort

16/02/2006 10:28:00
Quote Anchor link
Niemand?
Gewijzigd op 16/02/2006 10:28:00 door Voldemort
 
Martijn Wieringa

Martijn Wieringa

16/02/2006 10:52:00
Quote Anchor link
Ik denk dat je al een denkfout maakt bij het indelen van je class...

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);
 
Mitch X

Mitch X

16/02/2006 11:00:00
Quote Anchor link
De databaseafhandeling gaat dan ook via een "Database Abstraction Layer" of als je alleen 1 database ondersteund gewoon een databaseclassje bijv.
 
Voldemort

Voldemort

16/02/2006 11:00:00
Quote Anchor link
Maar bij die getPostsByTopic zullen er meerdere posts in dat topic zijn, met jouw code zal er toch maar 1 uitkomen, want enkel bij lussen zullen er meer te zien zijn?

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
 
Winston Smith

Winston Smith

16/02/2006 11:09:00
Quote Anchor link
Je kan toch ook een array retourneren vanuit je klasse?
 
Voldemort

Voldemort

16/02/2006 11:17:00
Quote Anchor link
In je class een array aanmaken bedoel je en dan in de while steeds array_push() gebruiken?
Gewijzigd op 16/02/2006 11:45:00 door Voldemort
 
Martijn Wieringa

Martijn Wieringa

16/02/2006 11:58:00
Quote Anchor link
Je zou in de class een functie kunnen opnemen als:

$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.
 
Voldemort

Voldemort

16/02/2006 13:34:00
Quote Anchor link
Ik snap er niks meer van, als ik het volgens Pholeron zijn manier zou doen zijn we weer aan het begin, namelijk dat ik maar 1 functie heb met de while en m'n tabel, en dat is dus niet de bedoeling van een class denk ik, dus zo raak ik niet verder.

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.
 
Martijn Wieringa

Martijn Wieringa

16/02/2006 13:39:00
Quote Anchor link
: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 ;)
 
Mitch X

Mitch X

16/02/2006 13:40:00
Quote Anchor link
Je maakt een class maar zoals je wilt, OOP is echter meer dan de class alleen.
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
 
Voldemort

Voldemort

16/02/2006 13:52:00
Quote Anchor link
Dus jullie raden aan om dat buiten de class te doen?

Maar wat is het verschil tussen OOP en classes? Wat kan je nog meer in OOP dan in classes (PHP)?
 
Martijn Wieringa

Martijn Wieringa

16/02/2006 13:54:00
Quote Anchor link
OOP staat voor 'object georienteerd programmeren'..
Een 'class' is de definitie van een object..
 
Pim Vernooij

Pim Vernooij

16/02/2006 15:25:00
Quote Anchor link
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 :)
 
Voldemort

Voldemort

16/02/2006 16:02:00
Quote Anchor link
@Pholeron: Wat kan je dan nog meer in PHP OOP doen dan enkel classes?

@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?
 
Mitch X

Mitch X

16/02/2006 16:09:00
Quote Anchor link
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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
class Rekenen
{
    function
opTellen( $getalEen, $getalTwee )
    {

        return $getalEen + $getalTwee;
    }
}

$Object = new Rekenen;
echo $Object->opTellen( 1, 1 );
?>

Tuurlijk had ik ook echo kunnen gebruiken ipv return, maar dan is de flexibiliteit eraf.
Bijv. onderstaande hadden niet meer gekunt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo '<span style="color: red">' . $Object->opTellen( 1, 1 ) . '</span>';
?>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo 5 + $Object->opTellen( 1, 1 );
?>


Savvy? ;)
 
Martijn Wieringa

Martijn Wieringa

16/02/2006 16:14:00
Quote Anchor link
Het mooie achter classes vind je terug in structurering, overerving van andere classes, polymorfisme (te lastig om in 3 woorden uit te leggen), data beveiliging (d.m.v. private, protected en public functies en variabelen) em ga zo maar door..

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
 
Voldemort

Voldemort

16/02/2006 16:19:00
Quote Anchor link
@Mitch: Als ik 10 nieuwsberichten heb, bij elk moet ik het aantal reacties, titel, bericht, auteur, bron, datum en tijd ophalen. Dus dat moet in 1 array en dat dus nog 10 keer, dan moet ik er nog een | ofzo tussen zetten om te kunnen exploden (en dan dus een for lus). Dan gaat het toch lang moeten parsen?

@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.
 
Martijn Wieringa

Martijn Wieringa

16/02/2006 16:24:00
Quote Anchor link
PHP4 (wat ik ook nog gebruik) ondersteunt tot op zekere hoogte ook gewoon classes hoor.. PHP 5 is alleen een stuk uitgebreider ('k hoop dat onze server dan ook snel over gaat (:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?

// Classes in (o.a.) PHP 4

class Forum
{
    // Constructor
    function Forum()
    {
    }


    // Additionele functies
    function blaat()
    {

        echo "Functie blaat();";
    }
}


$forum = new Forum();
$forum->blaat();

?>
 
Martijn Wieringa

Martijn Wieringa

16/02/2006 16:29:00
Quote Anchor link
Wat betreft je probleem met 10 nieuwsberichtren... ooit gehoord van 2-dimensionale arrays?

$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?
 
Voldemort

Voldemort

16/02/2006 16:52:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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['']);
                 }
           }
      }

?>


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
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.