Door
Jasper DS
op 08-03-2011 22:37
gewijzigd op 08-03-2011 22:59
4.905 views
Hallo,
<?php
switch ($_GET['pagina'])
{
case home:
include 'home.php';
break;
case contact:
include 'contact.php';
break;
case over:
include 'over.php';
break;
}
?>
[php]switch[/php], [php]include[/php]
home.php kan er dan zo uitzien:
<?php
echo 'hallo, ik ben jasper';
?>
ik zal alvast gaan zoeken naar [php]constant[/php] en [php]string[/php]
Het probleem is dus dat ik nu een constant gebruik in de case en dit mag alleen een string zijn.. (of zo heb ik het begrepen). Hoe zorg ik er nu voor dat ik een string krijg?
@roel ik wist niet dat je ook zo een switch kon openen/sluiten
@karl precies wat ik net dus zij veel overzichtelijker
Blijkbaar kan dat dus met if-statements ook. Wist ik niet eens (ooit wel eens vaag van gehoord dan)
Ik denk dan achteraf gezien dat het niet veel uitmaakt of je { en } of : gebruikt.
Ik gebruik zelf altijd bij if-statements gewoon { en }, maar bij switch wel :
Het gaat om efficiency. Er zit wel degelijk een verschil tussen een if-else statement en een switch-constructie.
Bij een if-else statement worden er continu evaluaties gedaan, terwijl bij een switch-constructie een specifieke 'case' (op z'n Nederlands casus) wordt aangeroepen.
Stel dat jouw website uit 1.000 pagina's bestaat en je zou deze 1.000 pagina's in een if-else statement hebben staan, wat zou er dan gebeuren als iemand de 1.000e pagina aanroept? Ik zal het vertellen: er worden 999 nutteloze vergelijkingen gedaan, namelijk: is het pagina 1? Nee... Is het pagina 2? Nee... Is het pagina 3? enz. enz. totdat je bij de 1.000e pagina bent: Nee... Is het pagina 1.000? Ja! Hoera... include nu pagina 1.000. Kortom, omdat we gebruik hebben gemaakt van een if-else statement hebben we de server 999 zinloze vergelijkingen laten uitvoeren.
Hadden we nu echter eem switch gebruikt en zou iemand pagina 1.000 aanroepen, dan werd direct de juiste 'case' aangeroepen en dus ook direct de juiste pagina geinclude.
En dat mijne dames en heren is het verschil tussen het gebruik van een if-else statement en een switch-constructie.
(en uiteraard ga je niet 1.000 pagina's in een switch-constructie zetten, maar gebruik je hier normaliter een database voor)
Toevoeging op 08/03/2011 23:50:09:
Roel van de Water op 08/03/2011 23:33:36
Overigens open je een switch zo:
<?php
switch($_GET['test']):
case 1: default:
echo 1;
break;
case 2:
echo 2;
break;
endswitch;
?>
Dat kan, maar dit is absoluut geen verplichting. Het is gewoon een van de manieren, maar de andere manier is ook goed.
?
Onbekende gebruiker
08-03-2011 23:54
gewijzigd op 08-03-2011 23:56
Ozzie, euhm, switch is trager dan een if structuur... Dat is al eeuwen zo. Maar dan nog, bij 1000 aanroepingen kost het nog steeds maar een paar nanoseconde.
Paar versies terug was een switch significant trager dan een if constructie. Dit kwam (denk ik) doordat de switch naar een if werd omgezet en dan nog eens uitgevoerd.
Blijkbaar kan dat dus met if-statements ook. Wist ik niet eens (ooit wel eens vaag van gehoord dan)
Ik denk dan achteraf gezien dat het niet veel uitmaakt of je { en } of : gebruikt.
Ik gebruik zelf altijd bij if-statements gewoon { en }, maar bij switch wel :
Dat noemen ze de alternative syntax, dit werkt bij if, while, for, foreach en switch.
Het is handig als je deze statements gebruikt om iets te echoën. Bijv. met menu items echoën uit een database:
Nu wordt het stukje <li></li> per item geëchoëd. Dit staat mooier dan:
[code=php]<ul id="nav">
<?php while($row = mysql_fetch_assoc($result)) {
echo '<li>'.$row['name'].'</li>';
}?>
</ul>