[PHP] nut van func_get_args() *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Kan iemand mij uitleggen wat het nut is van de functie func_get_args? Php.net zegt het volgende:
func_get_args -- Returns an array comprising a function's argument list
Ik begrijp na het lezen van de voorbeelden dat je een optioneel aantal argumenten naar een functie kunt sturen, zoals het volgende voorbeeld aangeeft:
PHP:
1
2
3
4
function average(){
   return array_sum(func_get_args())/func_num_args();
}
print average(10, 15, 20, 25); // 17.5

Wat ik niet begrijp is: je kunt toch net zo goed een functie definieren met een array als argument? Een array kan ook een niet-vaststaand aantal elementen bevatten:
PHP:
1
2
3
4
function average($args){
   return array_sum($args)/count($args);
}
print average(array(10, 15, 20, 25)); // geeft ook 17.5

Ik vind dat eigenlijk nog netter ook. Maar voordat ik op verkeerde gronden voor mijn eigen oplossing kies: wat mis ik nu?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Met func_get_args hoef je in de aanroepende functie geen array aan te maken. Het is gewoon veel makkelijker in gebruik wanneer je average(12, 14, 15, 26, 100) gebruikt, dan wanneer daar ook nog eens array() omheen moet.
Verder verplicht niemand je natuurlijk om het één of het ander te gebruiken. Ik zou voor de func_get_args methode gaan, jij misschien voor het alternatief. Het heeft elk zijn eigen voordeel, en het gaat erom wat jij zelf als programmeur fijner vindt werken.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Denk aan het "printf()" equivalent, dan is het wel handig. Min of meer syntactic sugar wel, maar ja...

Acties:
  • 0 Henk 'm!

  • creative8500
  • Registratie: September 2001
  • Laatst online: 01-02 14:14

creative8500

freedom.

Je kunt niet, zoals in je voorbeeld, func_get_args direct als functieargument gebruiken, probeer maar. Waar het bijvoorbeeld handig voor is:

PHP:
1
$MySQL -> query ('SELECT * FROM some_table WHERE this = %1 AND that = %2', $this, $that);


Waarbij:
PHP:
1
2
3
4
abstract class Database {
    public function query ($SQL) {
    }
}

En waarbij je aan de hand van optionele extra argumenten de %# in $SQL vervangt door de (zo nodig) ge-escapede waarde van het functieargument.