[PHP] Variable in functienaam

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Voor een script heb ik 3 functies: getCountryIcon, getOsIcon en getBrowserIcon.

Nu zit ik met het probleem dat, afhankelijk van een variabele die ik meestuur in de URL, een van deze functies aangeroepen moet worden. Dus als de variabele Country is dan moet getCountryIcon aangeroepen worden. Is het mogelijk om de een variabele in de naam van een functie in te bouwen??? Dus iets als get[$variabele]Icon....

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-09 08:50

gorgi_19

Kruimeltjes zijn weer op :9

Wellicht dat je met eval aan de gang kan, maar is een simpele case ook niet mogelijk, waarin je een soortement van factory / strategy maakt?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 11:35
Gewoon wrappen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
switch($var)
{  case "a":
     $func = 'getCountryIcon';
     break;
   case "b":
     $func = 'getOsIcon';
     break;
   case "c":
     $func = 'getBrowserIcon';
     break;
}

$func();


//Edits: grrrrr typo's :(

[ Voor 64% gewijzigd door Morrar op 03-12-2004 13:53 ]


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Morrar schreef op vrijdag 03 december 2004 @ 13:52:
Gewoon wrappen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
switch($var)
{  case "a":
     $func = ''getCountryIcon';
     break;
   case "b":
     $func = ''getOsIcon';
     break;
   case "c":
     $func = ''getBrowserIcon';
     break;
}

$func();
Nuttig... voer dan direct de functie uit in de case/switch...

Acties:
  • 0 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 11:35
Bosmonster schreef op vrijdag 03 december 2004 @ 13:53:
[...]


Nuttig... voer dan direct de functie uit in de case/switch...
D'oh. De TS vroeg om een variabele functie aanroep dus ik was daar lekker mee aan het pielen geslagen, maar de funtie meteen inde switch uitvoeren is wel wat eenvoudiger ja :) Tenzij de TS de functie 10x wil gaan aanroepen op verschillende plaatsen...

Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 18-09 16:24

mulder

ik spuug op het trottoir

Morrar schreef op vrijdag 03 december 2004 @ 13:58:
[...]
Tenzij de TS de functie 10x wil gaan aanroepen op verschillende plaatsen...
Dan nog is het nog steeds handiger direct de functie aan te roepen ;)

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 11:35
Don Facundo schreef op vrijdag 03 december 2004 @ 14:00:
[...]


Dan nog is het nog steeds handiger direct de functie aan te roepen ;)
Hehe ja 1x aanroepen en return resultaat opslaan... Maar... dat gaat niet op als ie verschillende argumenten mee wil sturen bij die 10x want dan zou de TS steeds die switch eromheen moeten zetten. Dus bijvoorbeeld getOSIcon(100, 100) en getOSIcon(50, 50) voor icon van 100 x 100 en 50 x 50. Dan is die $func wel nuttig... Anyways het hangt er dus een beetje vanaf wat TS wil en als hij zegt dat ie een variabele functie nodig heeft dan kan ie die krijgen ook :+ ;)

Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 18-09 16:24

mulder

ik spuug op het trottoir

doelde meer op:
code:
1
2
3
4
5
6
7
8
9
func = 'doSomeFunction'
function doFunction(func)
{
   switch func
     func()
}
doFunction(func)
...
doFunction(func)


parameters zou je nog optioneel mee kunnen geven

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php

abstract class Icon
{
    abstract function getIcon();
}

class CountryIcon extends Icon
{
    function getIcon()
    {
        // ...
    }
}

class OsIcon extends Icon
{
    function getIcon()
    {
        // ...
    }
}

class BrowserIcon extends Icon
{
    function getIcon()
    {
        // ...
    }
}

$iconClass = $_GET['icon'] . "Icon";

$iconObject = new $iconClass();

$icon = $iconObject->getIcon();

?>

Oftwel wat gorgi_19 ook bedoelde met een Strategy. Dit lijkt mij wel een geschikte methode.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • FlowinG
  • Registratie: Maart 2003
  • Laatst online: 19-09 17:00
Dit is wel een beetje overkill. Het kan gewoon veel gemakkelijker. Om even in de gedachte van ts te blijven:
PHP:
1
"get".$_GET[$variabele]."Icon"();


Ik weet dan alleen niet over het wel zo'n veilig idee is. Wat je dan bijvoorbeeld kan doen is om de juiste functies (functies die dus wel mogen uitgevoerd worden) in een array te zetten:
PHP:
1
2
3
4
5
$valid_functions['Country'] = "getCountryIcon";
$valid_functions['Os'] = "getOsIcon";
$valid_functions['Browser'] = "getBrowserIcon";

$valid_functions[$_GET[$variabele]]();

eigenlijk is dit laatste ook weer een verkapte case, alleen wat overzichtelijker om uit te breiden

[ Voor 10% gewijzigd door FlowinG op 03-12-2004 15:02 ]


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Ik gokte er eigenlijk op dat de TS nog meer acties aan de hand van een type als dit wilde gaan uitvoeren. Bij meerdere functies in het beter om dit te groeperen in een class en bij extra types is het ook een stuk gemakkelijker uitbereidbaar.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
In ieder geval hebben jullie een heleboel varianten voor mijn probleem. Thanx for the help!!!
Pagina: 1