php Function parameters
Een vraag over php functie met parameters.
Wat is de bedoeling:
Aanroepen ergens in het script met een 1e parameter gevolgd door nummers. De nummers kunnen variëren qua aantallen. (zie hieronder)
In de functie zelf moet een loop voor het aantal nummers dat is ingegeven.
Dat is voor bovenste functie 2
de middelste 4
en de laatste 1
De loop moet het volgende teruggeven
Bovenste functie
Middelste functie
Laatste functie
Hoe krijg ik die nummers nu geloopt? Moet ik dan een array maken met een foreach loop ?
Alvast bedankt :)
Gewijzigd op 08/03/2019 21:28:25 door Jop B
Code (php)
1
2
3
4
2
3
4
function myFuction($color, ...$items){
print("Color: $color\nItems: ");
print_r($items);
}
print("Color: $color\nItems: ");
print_r($items);
}
Gewijzigd op 08/03/2019 21:40:30 door Rob Doemaarwat
@Rob: Sinds welke PHP-versie is dat "..."
https://secure.php.net/manual/en/functions.arguments.php. Zou bij de meeste hosting boeren dus wel moeten werken.
Ik heb het even opgezocht voor je: sinds PHP 5.6 Waarom dan niet gewoon met een array werken zoals dat overal gebeurd?
En wat is er mis met een array als tweede parameter? :/
@thomas Hoe kan ik die tweede parameter als array kenmerken?
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
function myFuction($paramater1, $paramater2=array){
}
en hoe vul ik de aanroep dan?
myFunction(paramter1, parameter2 met nummers))
?>
function myFuction($paramater1, $paramater2=array){
}
en hoe vul ik de aanroep dan?
myFunction(paramter1, parameter2 met nummers))
?>
Gewijzigd op 08/03/2019 22:30:28 door Jop B
Code (php)
Voordeel van deze methode in dit geval is dat je direct een loop kunt uitvoeren op de items zonder dat je je parameters hoeft te inspecteren/te ontleden. Dus ook in dat opzicht lijkt het mij logisch dat je hiervoor een array gebruikt. Het is een lijst van items.
Rob Doemaarwat op 08/03/2019 22:13:09:
Ik heb het even opgezocht voor je: sinds PHP 5.6 https://secure.php.net/manual/en/functions.arguments.php. Zou bij de meeste hosting boeren dus wel moeten werken.
De link doet het niet.
Grappig ... ik kan me niet herinneren dat ik deze methode ooit ben tegengekomen.
Zitten er nog nadelen aan die methode? Is het om een of andere reden af te raden? Ik heb het namelijk niet eerder gezien.
Stel dat je bijv. een functie hebt die strings bewerkt en vervolgens aan elkaar plakt en returnt (ik verzin maar even wat), dan zou ik normaliter als argument een array meegeven met daarin de losse strings die bewerkt en aan elkaar geplakt moeten worden. Maar met deze methode kun je de strings dus gewoon rechtstreeks stuk voor stuk invoeren in plaatsa van via een array. Da's wel interessant lijkt me.
Wanneer zou je deze methode gebruiken in plaats van een array? Daar ben ik dan wel weer benieuwd aan. Aangezien ik deze methode nooit tegenkom ben ik benieuwd of er nadelen aan kleven.
één doel van een functie is dat je hem meerdere keren kunt aanroepen. Code herhaling voorkomen dus. Maar ik zie mezelf geen functie aanroepen met 30 parameters. Al helemaal niet als de benodigdheden al in een array of object zitten. Jij geeft verdomd net dat ene voorbeeldje waarin het misschien nog wel handig zou kunnen zijn.. het aan elkaar plakken van een paar strings. En dat terwijl PHP al implode heeft en de string Concatenation operator. Nee sorry Dit kan bij het rijtje "PHP rommel".
Toevoeging op 09/03/2019 01:09:19:
@Job vanaf PHP 7 kun je ook type hinting gebruiken:
Toevoeging op 09/03/2019 01:11:26:
Die : void wil zeggen dat de functie geen waarde teruggeeft (met een return statement)
Gewijzigd op 09/03/2019 01:10:11 door Frank Nietbelangrijk
Stel dat die strings ergens vandaan komen, getrimd en gefilterd moeten worden ... zomaar een voorbeeldje. Het gaat er dus eigenlijk om dat je dit kunt gebruiken als alternatief voor een numerieke array.
Ozzie PHP op 09/03/2019 00:51:06:
De link doet het niet.
Hij had de punt (eind zin) er bij gepakt -> https://secure.php.net/manual/en/functions.arguments.php
Ozzie PHP op 09/03/2019 00:51:06:
Wanneer zou je deze methode gebruiken in plaats van een array
Zelf niet zo vaak. Ik prop het dan ook gewoon liever meteen in een array. Waar ik het nog wel eens gebruik is als ik de aanroep van een functie / creëren van een object in een wrapper ("factory") stop en de parameters eigenlijk 1:1 doorgeef aan de achterliggende functie / constructor (minus de 1e bijvoorbeeld). Omdat je dan bijvoorbeeld de call naar de basis al uitgeschreven hebt (gewoon als losse parameters) is het wel prettig / vanzelfsprekend om dat naar de wrapper toe ook te doen.