[PHP] Functie met meerdere argumenten

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • cytherea
  • Registratie: Oktober 2003
  • Laatst online: 12-09 10:22
Ik ben benieuwd of het binnen PHP mogelijk is om een functie te definieren die meerdere argumenten accepteert zonder dat je deze vantevoren hoeft op te geven.

In C bestaat zoiet en wordt het geschreven als
code:
1
void functienaam(int a, ...);

met de drie puntjes erachter.

Een interne functie van php (printf) ondersteunt het ook, en nu vraag ik me af of ik ze ook zelf kan maken. Ik weet dat ik ze zelf in C/C++ kan schrijven en als plugin in PHP kan gebruiken maar daar wordt mijn hoster niet vrolijk van denk ik.

Een mogelijke oplossing is dingen in array te verpakken en dan te extracten naar de lokale namespace maar om telkens een functie aan te roepen als:
code:
1
functie(array("var1"=>2, "var2"=>3, "var3"=>"test"));

vind ik een beetje slordig..

Acties:
  • 0 Henk 'm!

  • --MeAngry--
  • Registratie: September 2002
  • Laatst online: 19-09 16:35

--MeAngry--

aka Qonstrukt

Kijk eens in de PHP handleiding, want volgens mij hoef je gewoon helemaal geen attributen aan een functiebeschrijving mee te geven en kun je er gewoon alles instoppen wat je wilt. :) (Ik vind het zelf een slordige manier van programmeren, en waarom zou je het ook eigenlijk willen? Zo wordt het toch alleen maar onoverzichtelijk? :? )

[ Voor 30% gewijzigd door --MeAngry-- op 20-01-2005 12:05 ]

Tesla Model Y RWD (2024)


Acties:
  • 0 Henk 'm!

  • niwreG
  • Registratie: Augustus 2003
  • Laatst online: 17-10-2024

niwreG

^heeft dat geschreven->

volgens mij kun je gewoon:
PHP:
1
2
3
4
5
6
7
<?
functie functienaam ($a, $b, $c) {
hier de functie
}

echo functienaam(1,2,3);
?>

volgens mij kun je gewoon zo iets doen

^^eventueele typfouten zijn als vermaak bedoeld


Acties:
  • 0 Henk 'm!

  • cytherea
  • Registratie: Oktober 2003
  • Laatst online: 12-09 10:22
niwreG schreef op donderdag 20 januari 2005 @ 12:09:
volgens mij kun je gewoon:
PHP:
1
2
3
4
5
6
7
<?
functie functienaam ($a, $b, $c) {
hier de functie
}

echo functienaam(1,2,3);
?>

volgens mij kun je gewoon zo iets doen
Ja, dat snap ik... Mijn idee ging uit naar zoiets:
code:
1
2
3
4
5
function functie() {
  hier de variablen uitlezen
}

echo functie("hallo", 3, 5);

Acties:
  • 0 Henk 'm!

Verwijderd

Meerdere argumenten kan wel; je zet in je functie dat je er geen accepteert (of 1, of net wat je wil), en je kunt alle variabelen die daadwerkelijk mee zijn gegeven ophalen met func_get_args.

Helaas is er geen manier om ook keywords aan die extra parameters te hangen. Als het verder niet mogelijk is om een betekenis aan de parameters toe te kennen op basis van hun volgorde, zul je het toch met een associatieve array moeten doen.

Acties:
  • 0 Henk 'm!

  • cytherea
  • Registratie: Oktober 2003
  • Laatst online: 12-09 10:22
--MeAngry-- schreef op donderdag 20 januari 2005 @ 12:05:
Kijk eens in de PHP handleiding, want volgens mij hoef je gewoon helemaal geen attributen aan een functiebeschrijving mee te geven en kun je er gewoon alles instoppen wat je wilt. :) (Ik vind het zelf een slordige manier van programmeren, en waarom zou je het ook eigenlijk willen? Zo wordt het toch alleen maar onoverzichtelijk? :? )
Ik wil het gebruiken als ik een string wil vertalen op de printf manier.. Dan weet je vantevoren niet wat erin zit.
code:
1
2
3
4
5
6
7
define('LOGIN_SUCCES', "%s, je bent succesvol ingelogd");

function translate() {

}

echo translate(LOGIN_SUCCES, "ikke");

[ Voor 4% gewijzigd door cytherea op 20-01-2005 12:15 ]


Acties:
  • 0 Henk 'm!

  • cytherea
  • Registratie: Oktober 2003
  • Laatst online: 12-09 10:22
Verwijderd schreef op donderdag 20 januari 2005 @ 12:11:
Meerdere argumenten kan wel; je zet in je functie dat je er geen accepteert (of 1, of net wat je wil), en je kunt alle variabelen die daadwerkelijk mee zijn gegeven ophalen met func_get_args.

Helaas is er geen manier om ook keywords aan die extra parameters te hangen. Als het verder niet mogelijk is om een betekenis aan de parameters toe te kennen op basis van hun volgorde, zul je het toch met een associatieve array moeten doen.
tnx, dat is wat ik zocht!

Acties:
  • 0 Henk 'm!

Verwijderd

cytherea schreef op donderdag 20 januari 2005 @ 12:13:
[...]


Ik wil het gebruiken als ik een string wil vertalen op de printf manier.. Dan weet je vantevoren niet wat erin zit.
code:
1
2
3
4
5
6
7
define('LOGIN_SUCCES', "%s, je bent succesvol ingelogd");

function translate() {

}

echo translate(LOGIN_SUCCES, "ikke");
Je zult daar verder wel je redenen voor hebben (neem ik aan), maar wat is er mis met sprintf ?

Acties:
  • 0 Henk 'm!

  • cytherea
  • Registratie: Oktober 2003
  • Laatst online: 12-09 10:22
Verwijderd schreef op donderdag 20 januari 2005 @ 12:21:
[...]


Je zult daar verder wel je redenen voor hebben (neem ik aan), maar wat is er mis met sprintf ?
Er is niks mis met sprintf maar ik wil het graag in een klasse verpakken, om de semantiek wat te bevorderen :) (oftewel wat meer logisch en begrijpbaar te maken) En de klasse zal intern gewoon sprintf of printf gebruiken. Het gaat er mij om dat als je templates maakt je niks van sprintf hoeft af te weten maar gewoon de functie translate() gebruikt. als je ooit alle vertalingen in een database gaat opslaan hoef je alleen de klasse aan te passen en verder niks.
Pagina: 1