Versio

Oneindig aantal argumenten

Overzicht Reageren

Rolf

Rolf

03/01/2007 20:04:00
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
public string Functie(string[] args)
{
...
}

?>

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
function Functie($args){ ... }
$args = array('string1', 'string2', 'string3');
Functie($args);
?>
Gewijzigd op 01/01/1970 01:00:00 door Rolf
 
PHP hulp

PHP hulp

25/05/2012 12:38:19
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Jan Koehoorn

Jan Koehoorn

03/01/2007 20:09:00
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
    function mijn_functie ($arg1, $arg2 = false, $arg3 = true) {
    // hier de functie-body
    }
?>

Je kunt deze functie dan met 1, 2, of 3 argumenten aanroepen.
 
Rolf

Rolf

03/01/2007 20:18:00
Quote Anchor link
De language construct echo kan wel meerdere parameters aan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo 'string1', 'string2', 'string3'...
?>

Dat maakte me benieuwd of het bij functies ook kon, helaas niet dus. Toch bedankt :)
 
Jan Koehoorn

Jan Koehoorn

03/01/2007 20:21:00
Quote Anchor link
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
 
Rolf

Rolf

03/01/2007 20:26:00
Quote Anchor link
Thnx Jan, hier ga ik even mee experimenteren.
 
Jan Koehoorn

Jan Koehoorn

03/01/2007 20:28:00
Quote Anchor link
Als ik deze code van die voorbeeldpagina gebruik:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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");
?>

Dan werkt het prima! (lokaal getest)
 
Rolf

Rolf

03/01/2007 20:42:00
Quote Anchor link
Dit is precies wat ik zocht, weer een stapje dichter bij superelegante code
Het volgende
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
functie("Onderwerp", "Bericht", "email1", "email2", "email3");
?>

is voor mij in ieder geval duidelijker dan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
functie("Onderwerp", "Bericht", array("email1", "email2", "email3") );
?>
Gewijzigd op 01/01/1970 01:00:00 door Rolf
 

03/01/2007 20:45:00
 
Rolf

Rolf

03/01/2007 20:50:00
Quote Anchor link
Webmakerij schreef op 03.01.2007 20:45:

Dat zijn idd de functies die uitgelegd worden op de site die Jan gaf.
 
Jan Koehoorn

Jan Koehoorn

03/01/2007 20:50:00
Quote Anchor link
@ 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.
 
Bo az

Bo az

03/01/2007 21:02:00
Quote Anchor link
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 ...
 
Rolf

Rolf

03/01/2007 21:23:00
Quote Anchor link
Als je een argument wilt toevoegen dan zul je toch al aan de functie moeten sleutelen. Zoals je in het volgende voorbeeld ziet...
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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');
?>

... is het slechts een kwestie van in de regel...
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
for($i = 1; $i < func_num_args(); $i++) {
?>

... $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
 
Bo az

Bo az

03/01/2007 21:27:00
Quote Anchor link
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.
 
Rolf

Rolf

03/01/2007 21:30:00
Quote Anchor link
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
 



Overzicht Reageren