Oneindig aantal argumenten
In C++ kun je (volgens mij, ik ben er niet zo bedreven in) een functie maken die oneindig veel argumenten kan slikken door iets te typen als:
De argumenten zjin van het type string en worden in een array opgeslagen. Nu vraag ik me af of dat ook in php kan, zonder eerst de argumenten in een array te zetten en die aan de functie te geven zoals in het volgende voorbeeld.
De argumenten zjin van het type string en worden in een array opgeslagen. Nu vraag ik me af of dat ook in php kan, zonder eerst de argumenten in een array te zetten en die aan de functie te geven zoals in het volgende voorbeeld.
Code (php)
1
2
3
4
5
2
3
4
5
<?php
function Functie($args){ ... }
$args = array('string1', 'string2', 'string3');
Functie($args);
?>
function Functie($args){ ... }
$args = array('string1', 'string2', 'string3');
Functie($args);
?>
Gewijzigd op 01/01/1970 01:00:00 door Rolf Flikker op
Op die manier werkt het in PHP niet. Het is ook een beetje onzin om een oneindig aantal argumenten aan een functie mee te willen geven, als je ook arrays en objecten aan een functie mee kunt geven.
Je kunt in PHP wel optionele argumenten meegeven:
Je kunt deze functie dan met 1, 2, of 3 argumenten aanroepen.
Je kunt in PHP wel optionele argumenten meegeven:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
function mijn_functie ($arg1, $arg2 = false, $arg3 = true) {
// hier de functie-body
}
?>
function mijn_functie ($arg1, $arg2 = false, $arg3 = true) {
// hier de functie-body
}
?>
Je kunt deze functie dan met 1, 2, of 3 argumenten aanroepen.
De language construct echo kan wel meerdere parameters aan:
Dat maakte me benieuwd of het bij functies ook kon, helaas niet dus. Toch bedankt :)
Dat maakte me benieuwd of het bij functies ook kon, helaas niet dus. Toch bedankt :)
Nu je het zegt, er zijn ook PHP functies waarbij het kan, zoals unset. Toch even zoeken hoe die werken.
Edit:
Misschien heb je iets aan deze pagina
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
Thnx Jan, hier ga ik even mee experimenteren.
Als ik deze code van die voorbeeldpagina gebruik:
Dan werkt het prima! (lokaal getest)
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
function dynamic_args() {
for($i = 0 ; $i < func_num_args(); $i++) {
echo "Argument $i = ".func_get_arg($i)."<br />";
}
}
dynamic_args("a", "b", "c", "d", "e");
?>
function dynamic_args() {
for($i = 0 ; $i < func_num_args(); $i++) {
echo "Argument $i = ".func_get_arg($i)."<br />";
}
}
dynamic_args("a", "b", "c", "d", "e");
?>
Dan werkt het prima! (lokaal getest)
Dit is precies wat ik zocht, weer een stapje dichter bij superelegante code
Het volgende
is voor mij in ieder geval duidelijker dan:
Het volgende
is voor mij in ieder geval duidelijker dan:
Gewijzigd op 01/01/1970 01:00:00 door Rolf Flikker op
@ Webmakerij: klopt, dat hadden we inmiddels al ontdekt ;-)
@ Rolf: ik merk in de dagelijks praktijk dat ik bijna nooit functies ontwerp met meer dan vier, vijf argumenten. Als het er nog meer worden ga ik al heel snel naar een array als argument. Maar het is mooi dat PHP de mogelijkheid biedt om te doen wat jij wilt.
@ Rolf: ik merk in de dagelijks praktijk dat ik bijna nooit functies ontwerp met meer dan vier, vijf argumenten. Als het er nog meer worden ga ik al heel snel naar een array als argument. Maar het is mooi dat PHP de mogelijkheid biedt om te doen wat jij wilt.
Het is mooi dat de mogelijkheid er is al zou ik het in dit geval toch met een array oplossen gezien je anders altijd rekening moet houden wat de eerdere argumenten betekenen.
En mocht je bij nader inzien nog een argument toe willen voegen ...
En mocht je bij nader inzien nog een argument toe willen voegen ...
Als je een argument wilt toevoegen dan zul je toch al aan de functie moeten sleutelen. Zoals je in het volgende voorbeeld ziet...
... is het slechts een kwestie van in de regel...
... $i = 1; veranderen in $i = 2 en voila je hebt weer plek voor nog een parameter. Of je deze functies gebruikt is een kwestie van persoonlijke voorkeur.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
function implode_str($glue) {
$string = "";
for($i = 1; $i < func_num_args(); $i++) {
$string .= $glue;
$string .= func_get_arg($i);
}
return $string;
}
echo implode_str('-', 'This', 'is', 'a', 'test');
?>
function implode_str($glue) {
$string = "";
for($i = 1; $i < func_num_args(); $i++) {
$string .= $glue;
$string .= func_get_arg($i);
}
return $string;
}
echo implode_str('-', 'This', 'is', 'a', 'test');
?>
... is het slechts een kwestie van in de regel...
... $i = 1; veranderen in $i = 2 en voila je hebt weer plek voor nog een parameter. Of je deze functies gebruikt is een kwestie van persoonlijke voorkeur.
Gewijzigd op 01/01/1970 01:00:00 door Rolf Flikker op
Omdat je een argument in PHP een standaard waarde kan geven is het erg makkelijk een argument aan het einde toe te voegen. Op die manier hoe je niet overal in je code waar je die functie gebruikt te gaan wijzigen.
Ah zo bedoel je, ik vatte hem even niet :). Tja dan heb je inderdaad niks aan deze methode. Overigens, dat voorbeeld van die emails was even snel uit de lucht gegrepen.
Gewijzigd op 01/01/1970 01:00:00 door Rolf Flikker op




