Goede avond,


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)

<?php
myFuction(blue, 1, 3);

myFuction(blue, 1, 3, 6, 10);

myFuction(blue, 11;
?>


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

<li>item 1</li>
<li>item 3</li>


Middelste functie

<li>item 1</li>
<li>item 3</li>
<li>item 6</li>
<li>item 10</li>


Laatste functie

<li>item 11</li>



Hoe krijg ik die nummers nu geloopt? Moet ik dan een array maken met een foreach loop ?


Alvast bedankt :)
Met func_get_args() of heel hip met "..."

function myFuction($color, ...$items){
  print("Color: $color\nItems: ");
  print_r($items);
}
@Rob: Sinds welke PHP-versie is dat "..."
>> In de functie zelf moet een loop voor het aantal nummers dat is ingegeven.

Waarom dan niet gewoon met een array werken zoals dat overal gebeurd?
En wat is er mis met een array als tweede parameter? :/
Dank voor de reacties.

@thomas Hoe kan ik die tweede parameter als array kenmerken?


<?php
function myFuction($paramater1, $paramater2=array){
}
en hoe vul ik de aanroep dan?

myFunction(paramter1, parameter2 met nummers))
?>
<?php
// definitie
function myFunction($var1, $var2=array()) {
    // ...
}

// aanroep
myFunction('whatever', array(1,2,3));
?>

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.
>> 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.

éé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".



[size=xsmall]Toevoeging op 09/03/2019 01:09:19:[/size]

@Job vanaf PHP 7 kun je ook type hinting gebruiken:

<?php
function whatever(array $arr): void
{
}
?>

[size=xsmall]Toevoeging op 09/03/2019 01:11:26:[/size]

Die : void wil zeggen dat de functie geen waarde teruggeeft (met een return statement)
>> Jij geeft verdomd net dat ene voorbeeldje waarin het misschien nog wel handig zou kunnen zijn..

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.

Reageren