Door
Ozzie PHP
op 15-08-2012 08:40
gewijzigd op 15-08-2012 08:41
3.430 views
Beste,
Wat vinden jullie mooier / hoe doen jullie dit?
Stel je wil een waarde returnen. Als het goed gaat dan wordt de waarde gereturned en als het fout gaat dan wordt false gereturned. Nu vraag ik me af wat mooier is. Zowel in het "if" en het "else" gedeelte een return zetten? Of de waarde toekennen aan een variabele en eenmaal die variabele returnen buiten het if/else statement?
Om het wat duidelijker te maken... zou jij dit doen:
<?php
// hier hebben we dus 2x een return
if (true) {
return 'mijn_waarde';
} else {
return false;
}
?>
of dit:
<?php
// hier hebben we 1x een return
if (true) {
$waarde = 'mijn_waarde';
} else {
$waarde = false;
}
return $waarde;
?>
Erwin, ik snap je niet helemaal... Als je de if in gaat zal de executie er nooit meer uitkomen vanwege de return. Dat snap ik. Maar als je de if niet in gaat, dan zou je automatisch de else in gaan. Wat is dan precies het verschil of je "return false" eronder zet, of in de else?
Er is weinig verschil en je kan zonder problemen die else in. Maar je hoeft geen else te hebben. Waar het voornamelijk handiger is, is als je meerdere opties hebt. Niet alleen deze if, maar nog een geneste if, en nog een.
<?php
function test( $value ){
if is_array( $value ){
if ( count( $value ) > 0 ){
if ( isset( $value['iets'] ) ){
if ( $value['iets'] != '' ){
return $value['iets'];
}
} elseif( isset( $value['iets_anders'] ) ){
return $value['iets_anders'];
}
}
} else {
if ( $value > 0){
return $value;
}
}
//default
return false
}
?>
Uiteraard kan je bij elke if hier een else zetten en daarin false retourneren, maar 1 default aan het einde is dan veel korter en m.i. overzichtelijker. Je weet direct wat de waarde is als het in feite fout is gegaan.
Heb je maar 1 conditie dan maakt het inderdaad niet veel uit. En zoals Santhe al heeft aangetoond, je kan ook best een situatie vinden waarin die default return aan het einde niet mogelijk is. Waar het wel mogelijk is gebruik ik het op deze manier.
Andersom kan het overigens ook. Denk aan een user registratie functie waarin je een aantal zaken wilt testen. Bij elke test geef je een return als het niet is gelukt of je gooit een error. Kom je uiteindelijk helemaal aan het einde dan geef je een true terug, want alle testen zijn doorlopen.
<?php
function register( $username, $password1, $password2 ){
//check of username aan eisen voldoet
if ( !usernameOk( $username ) return false;
//check of password 1 en 2 gelijk zijn
if ( $password1 != $password2 ) return false;
//check of password foute tekens bevat
if ( !passwordOk( $password1 ) ) return false;
//check of username al bestaat
if ( usernameExists( $username ) ) return false;
//maak een user record aan
if ( !createUser( $username, $password ) ) return false;
ik gebruik alleen wel de andere syntax voor de if statements:
<?PHP
$state = false;
if ($something):
$state = true
elseif ($something_else):
$state = true;
else:
$state = false;
endif;
?>
maakt eigenlijk niets uit want ze doen beide hetzelfde vind dit alleen wat netter / makkelijker / overzichtelijker (mits je netjes codeert)
Marco, jouw voorbeeldje klopt niet. Het heeft dan geen toegevoegde waarde meer om in de laatste else de $state op false te zetten, want die heb je al op false gezet.
Ik gebruik de 1e manier zelf ook, maar wel afhankelijk van de situatie.
Stel dat die state moet worden opgehaald via een aantal stappen (wat dus tijd kost) dan zou ik een if/else gebruiken.