PDA

Volledige versie bekijken : PHP: Static



50Euro
22 april 2004, 18:11
Het volgende wou ik eens proberen bij wijze van oefening...


<?php
function Test()
{
static $a = 0;
echo $a;
$a++;
}
for ($i=0; $i!=11; $i++) {
Test();
}
echo '<hr>';
echo "De teller staat op " . $a;
echo '<hr>';
echo "De teller staat op " . Test();
?>
Dit werkt dus langs geen kanten.. Het is trouwens volledig nutteloos, ik wil gewoon weten of het mogelijk is..

Kan ik op de één of andere manier "$a" uit die functie halen terwijl ze in de "for" lus zit?
Of kan ik "$a" uit de functie gebruiken in men voorwaarde voor de "for" lus?

Bv
for ($a!=10) {
Test();
}Dit werkt niet maar is het op een andere manier mogelijk?

Vraag meer uitleg als de uitleg of vragen niet duidelijk zijn..

THX

50Euro
22 april 2004, 18:18
Bij deze
<?php
function Test()
{
static $a = 0;
echo $a;
$a++;
}
echo 'De teller staat op ' .Test();
echo '<br>';
echo 'De teller staat op ' .Test();
echo '<br>';
echo 'De teller staat op ' .Test();
echo '<br>';
echo 'De teller staat op ' .Test();
echo '<br>';
echo 'De teller staat op ' .Test();
echo '<br>';
echo 'De teller staat op ' .Test();
echo '<br>';
?> is dit het resultaat...

0De teller staat op
1De teller staat op
2De teller staat op
3De teller staat op
4De teller staat op
5De teller staat op

Waarom staat het cijfer telkens voor de zin?

DarkBone
22 april 2004, 18:45
Die functie retourneert niets, hij keert niets terug naar het statement dat het oproepte, er wordt dus ook niks afgedrukt.

De reden waarom je het getal voor andere de uitvoer ziet: de functie wordt uitgevoerd, binnen die functie zit een echo, die waarde wordt geprint, de functie is ten einde, keert niets terug, er wordt teruggekeerd naar de echo waarin de functie werd opgeroepen en nu wordt daar de output afgedrukt alvorens verder te gaan.

50Euro
22 april 2004, 18:52
Kan je het iets simpeler uitleggen?

Welke Functie retourneert niets?

killgore
22 april 2004, 19:23
for ($a!=10) {
Test();
}

logisch dat dit niet werkt he! for aanvaard 3 parameters, hier moet je while hebben of dit:
for(;$a!=10; )

voor het feit van voor de zin:

als je een echo doet wordt eerst de argumentaties (dus alles tussen echo en ; ) ge-evalueerd. Die string geeft geen problemen, maar dan kom je aan die functie.

Binnen de functie heb je ook een aparte echo, die voorrang heeft op de gewone echo waarin die functie werd aangeroepen. Zo wordt dus eerst de functie-echo verwerkt en het getal getoond en dan pas die tekst.

Om dit op te lossen kan je return-values gebruiken:


function Test()
{
static $a = 0;
return $a++;
}


zo wordt (simpel gezegd) de functie-aanroep bij het uitvoeren van de code 'vervangen' door zijn return-value

echo "nummer: ".Test();
zal in dit geval dus Nummer: 0 als output geven.