De grap is... het is dus iets trager dan een if/else vergelijking. Ik dacht altijd dat het juist sneller was. Overigens is het verwarloosbaar trager, maar stel dat je het in een loop zet, dan is het de moeite waard om even een meting te doen wat sneller is, een normaal if-statement of een verkort if-statement.
Zelf gebruik ik het eigenlijk vooral om regels code te besparen. Zoals je in het voorbeeld in mijn eerste bericht ziet: 5 regels versus 1 regel. Maar gek genoeg is het toch iets trager.
@Ward:
Grappige manier hoe jij dat zo onder elkaar schrijft. Zet je het altijd op deze manier onder elkaar? Ook als het een korte statement betreft zoals dit?
<?php
$foo = $test ? 'ja' : 'nee';
?>
Er is trouwens nog een manier geloof ik:
<?php
$foo = $foo ?: false;
?>
In dit geval als $foo evalueert naar true, dan krijgt $foo de waarde van $foo (ofwel, de waarde blijft ongewijzigd). En als ie niet evalueert naar true dan wordt ie false.
Je kan dan zoiets doen:
<?php
$username = $username ?: 'onbekend';
echo $username;
?>
Ik weet alleen niet of ik dit wel zo'n mooie methode vindt, want je evalueert nu een string-waarde naar true. Wat vinden jullie daarvan?
>> Grappige manier hoe jij dat zo onder elkaar schrijft. Zet je het altijd op deze manier onder elkaar? Ook als het een korte statement betreft zoals dit?
Nee, alleen als de gehele expressie fors langer wordt dan 80 karakters (à la PSR) of als de logische test of een van de true/false-uitkomsten complex is.
Verder gebruik ik de ternary operator alleen bij een eenvoudige toewijzing met = of een echo. In overige gevallen ben ik het helemaal met Snelle Jaap eens en is een uitgeschreven if/elseif/else netter en praktischer.
>> Nee, alleen als de gehele expressie fors langer wordt dan 80 karakters (à la PSR) of als de logische test of een van de true/false-uitkomsten complex is.
Dus als de gehele expressie lang wordt, dan handhaaf je nog wel steeds de verkorte versie? Je zou dan ook kunnen overstappen op de normale versie, maar dat doe jij dus niet als ik je goed begrijp?
>> Verder gebruik ik de ternary operator alleen bij een eenvoudige toewijzing met = of een echo. In overige gevallen ben ik het helemaal met Snelle Jaap eens en is een uitgeschreven if/elseif/else netter en praktischer.
Mee eens, hoewel het in een return ook nog wel eens handig kan zijn.
De grap is... het is dus iets trager dan een if/else vergelijking. Ik dacht altijd dat het juist sneller was. Overigens is het verwarloosbaar trager, maar stel dat je het in een loop zet, dan is het de moeite waard om even een meting te doen wat sneller is, een normaal if-statement of een verkort if-statement.
Zucht ..........
Om op het onderwerp terug te komen: een verkorte if is handig als je een simpel if statement hebt (dus niet té ingewikkeld) en als je van plan bent om het resultaat van je if te returnen.
>> Om op het onderwerp terug te komen: een verkorte if is handig als je een simpel if statement hebt (dus niet té ingewikkeld) en als je van plan bent om het resultaat van je if te returnen.
Je hoeft het resultaat helemaal niet te returnen.
@Ward:
Inderdaad, die methode gebruik ik zelf ook vaak. Als een if-statement op 1 regel past zoals in dit geval, dan zou ik zelfs dit doen:
<?php
if (isset($foo)) return $foo;
return 'unknown';
?>
Maar zoals je ziet heb je nu 2x return. Dan is zo'n ternary operator wellicht een mooiere oplossing.
Bij dat laatste stuk waar je het over hebt, daar geef je alleen aan: <?php if (isset($foo)) return $foo; ?>
Maar wat gebeurd er als die om wat voor rede dan ook $foo niet kan returnen, wat voor foutmelding geeft die dan?
Waarom zou ie foo niet kunnen returnen? Je controleert eerst met isset() of $foo bestaat. Als foo bestaat, dan kun je 'm ook returnen. Als $foo niet bestaat, dan gaat ie verder op de volgende regel. Snap je?