[PHP] Inhoud van een tabel doorgeven via een methode

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een klasse (evenement), met daarin de statische methode returnAllEvents. Het is de bedoeling dat deze methode een tabel uitleest en al de waarden van deze tabel returnt, met zo weinig mogelijk koppeling.

Hoe ik het nu gemaakt heb:
de klasse en de methode:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
class evenement
{
    public static function returnAllEvents()
    {
        $q = mysql_query("...");
        while ($row = mysql_fetch_array($q))
        {
            $lijst[] = $row;
        }
        return $lijst;
    }
}

Zoals je ziet maak ik er per rij een array aan. Al deze arrays stop ik dan weer een verzamelings-array, en die return ik.

Het stukje code dat de methode aan roept:
PHP:
1
2
3
4
5
$lijst = evenement::returnAllEvents();
foreach($lijst as $rij_array)
{
    //verwerking van de rij-array
}


Dit werkt, maar hier ben ik niet tevreden over. Ik vind dat er te veel koppeling is. Ik zou liever hebben dat de methode de rij-array keer per keer door gaf, op zo'n soort manier dus:
PHP:
1
2
3
4
while($rij_array = evenement::returnAllEvents())
{
    //verwerking van de rij_array
}

Het zou dus de bedoeling moeten zijn dat de while lus telkens de methode returnAllEvents() aanroept, deze geef de rij-array terug van rij1, het script verwerkt de array, daarna roept de while lus returnAllEvents() weer aan, nu moet deze methode de rij-array van rij2 terug geven, enz...

Ik heb zoiets proberen maken met onderstaande code, maar dat werkte niet zo goed:
PHP:
1
2
3
4
5
6
7
8
9
10
11
class evenement
{
    public static function returnAllEvents()
    {
        $q = mysql_query("...");
        while ($row = mysql_fetch_array($q))
        {
            return $row;
        }
    }
}


En de aanroeping:
PHP:
1
2
3
4
while($rij_array = evenement::returnAllEvents())
{
    //verwerking van de rij_array
}


Dit werkte echter niet zoals ik gehoopt had, ik kreeg een oneindige lus die telkens de rij-array van de eerste rij 1 kreeg. Achter af gezien was dit natuurlijk heel logisch, maar ik wou het toch eens proberen :P

Mijn vraag is nu dus: Hoe kan ik mijn methode het beste programmeren? Ik wil zo weinig mogelijk koppeling, en een rij-array leek mij dan de mooiste oplossing. Als er betere manieren zijn wil ik die natuurlijk ook graag horen :)

Acties:
  • 0 Henk 'm!

Verwijderd

Ik heb het idee dat je een probleem probeert op te lossen op de verkeerde manier. Kun je misschien zeggen waarom je wilt dat die functie steeds maar 1 row moet ophalen?

Overigens is het vrij simpel te doen in je voorbeeld, je geeft gewoon een boolean var aan je functie mee waarmee je aangeeft of je de query wilt uitvoeren of niet. Als je alleen bij de eerste keer aanroepen de query uitvoert is je probleem namelijk verholpen (tenminste, als je ondertussen niet andere query's uitvoert etc, dan moet je een db-class gaan schrijven). (edit: en de result set moet je wel ff opslaan in je class anders ben je die na uitvoeren van je functie kwijt)

[ Voor 9% gewijzigd door Verwijderd op 17-04-2008 16:58 ]


Acties:
  • 0 Henk 'm!

Verwijderd


Acties:
  • 0 Henk 'm!

  • Morax
  • Registratie: Mei 2002
  • Laatst online: 20-09 00:30
Even er van uitgaande dat de klasse Evenement meer functionaliteit bevat dan alleen die statische methode, waarom laat je die functie niet gewoon een array van Evenement-instanties returnen ?

What do you mean I have no life? I am a gamer, I got millions!


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Morax schreef op donderdag 17 april 2008 @ 17:00:
Even er van uitgaande dat de klasse Evenement meer functionaliteit bevat dan alleen die statische methode, waarom laat je die functie niet gewoon een array van Evenement-instanties returnen ?
Dit is inderdaad ook een mooie oplossing. Maar ik doe verder niks met deze gegevens van de tabel, ik print ze alleen maar. Is het dan niet sneller om deze even in een array te stoppen dan er instanties van maken?
Verwijderd schreef op donderdag 17 april 2008 @ 16:56:
Ik heb het idee dat je een probleem probeert op te lossen op de verkeerde manier. Kun je misschien zeggen waarom je wilt dat die functie steeds maar 1 row moet ophalen?
Bedankt voor je antwoord. Ik heb mijn code aangepast zoals jij het zei en nu werkt het! :)
De reden waarom ik maar 1 row per keer wil: ik vind dat netter staan.
Dit ben ik nog even aan het bekijken, alvast bedankt

Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php 
class evenement 
{ 
    public static function returnAllEvents() 
    { 
        static $q;
        if($q === null)
            $q = mysql_query("..."); 

        return mysql_fetch_array($q);
    } 
} 
?>


overigens kan je nu ook lekker allerlei andere queries enzo gaan zitten uitvoeren in de tussentijd. geen DB class oid nodig.

[ Voor 20% gewijzigd door Verwijderd op 17-04-2008 19:12 ]

Pagina: 1