[PHP] Parameters van een functie ophalen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Stel, ik heb de volgende functie:
PHP:
1
2
3
function foo($width, $height, $weight, $color = null) {
  // do stuff...
}

In deze functie zijn de parameters $width, $height en $weight verplicht. De parameter $color krijgt een default waarde mee. Mijn vraag: is het mogelijk een functie te bouwen die voor een andere functie de parameters ophaalt en in een array zet? Met andere woorden:
PHP:
1
2
3
4
5
function get_parameters($function) {
  // do stuff...
}

print_r(get_parameters(foo));

Bovenstaande zou geven:
code:
1
2
3
4
5
6
7
8
// [parameter] => default_value

array (
  [width] => 
  [height] =>
  [weight] =>
  [color] => null
)

Mijn eerste idee zou zijn om alle php bestanden te doorlopen op de exacte string "function foo" en dan de parameters met een regex eruit te filteren, met andere woorden:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
function get_parameters($file, $function) {
  $file = file_get_contents($file);
  $file = str_replace(array("\n", "\r"), ' ', $file);

  $hasMatch = preg_match_all("??", $file, $matches); 

  if ($hasMatch) {
    foreach ($matches as $match) {
      $parameters[$match['parameter']] = $match['value'];
    }
  }
  return $parameters;
}

Twee vragen:
  • is er geen eenvoudiger manier om de parameters van een functie te vinden?
  • wanneer niet, zou iemand mij dan kunnen helpen met de benodigde regex?

"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!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 18-09 22:29
Ik snap je probleem neit geheel maar wat ik denk is:
PHP:
1
foo(get_parameters())';


Waarbij get_parameters een array terug geeft, en foo gebruikt deze.

Acties:
  • 0 Henk 'm!

  • vogeltje
  • Registratie: December 2001
  • Laatst online: 10-08 19:30
Wellicht dat je met het keyword "reflection" wat verder komt?

binnenkort een hele dikke casemod :P


Acties:
  • 0 Henk 'm!

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Die haalt ze alleen op binnen de functie waarin ie aangeroepen wordt; dat is, als ik 't zo lees, niet wat de TS in gedachten heeft.

[licht offtopic]
Niet wat de TS nu zoekt of misschien gok ik verkeerd wat het uiteindelijke doel is, maar in PHPEdit kan je 'dynamisch' documentatie laten samenstellen op basis van comments in de source.
Als je deze concequent toevoegt aan functies heb je met 1 klik op de knop je documentatie te pakken
[/licht offtopic]

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Reflection is your friend. (Zoals vogeltje zegt.)

Je hebt er wel PHP5 voor nodig.

http://www.php.net/manual/en/language.oop5.reflection.php

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Grum
  • Registratie: Juni 2001
  • Niet online
Je zoekt http://php.net/call_user_func_array .. echter het is natuurlijk de minst elegante oplossing ;)

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Grum schreef op woensdag 26 juli 2006 @ 22:59:
Je zoekt http://php.net/call_user_func_array .. echter het is natuurlijk de minst elegante oplossing ;)
Hoe wil je daarmee de parameter interface van een functie uitlezen dan?

Noushka's Magnificent Dream | Unity

Pagina: 1