Functie aanroepen doormiddel van string/variable/array
Ik heb een kleine vraag. Ik ben bezig met een website voor een klant. Nu wil ik doormiddel van
een GET statement een bepaalde functie aanroepen die bij de pagina hoort.
Voorbeeld:
www.site.nl/index.php?action=test
dan pakt hij een key uit een array met daar weer een array in:
Code (php)
Nou zoals in het voorbeeld hoort hij dus Action_Test te pakken. Wat ik nu wil is dat hij die functie
gaat aanroepen. Alleen heb ik atm geen flauw idee hoe ik een functie kan aanroepen doormiddel
van een string in een array. Iemand een idee?
Alvast bedankt.
Groet,
Mik
Gewijzigd op 16/07/2011 14:31:46 door Mik PHP
Is het eigenlijk mogelijk om als je bijvoorbeeld de volgende functie aanroep:
om dan vervolgens gewoon $var te echoen?
zo dus:
Want hoe ik het hierboven schrijf werkt niet. Is er een manier voor? Want
ik weet niet welke functie ik aanroep in het script aangezien het per $_GET['action'] gaat..
Groet,
Mik
Toevoeging op 16/07/2011 15:18:48:
Nevermind het is weer boven water gekomen:
Code (php)
Gewijzigd op 16/07/2011 15:14:02 door Mik PHP
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
function test($who)
{
return 'Hello '.$who;
}
echo call_user_func_array('test',array('you'));
?>
function test($who)
{
return 'Hello '.$who;
}
echo call_user_func_array('test',array('you'));
?>
resultaat: Hello you
@Ozzie ik laat het gebruik van parameters zien in combinatie met call_user_func_array();
Maar ik bedoelde wat is het verschil tussen:
echo test('you');
en
echo call_user_func_array('test',array('you'));
Met andere woorden, waarom gebruik je "call_user_func_array". Wat is het nut van die functie.
Je ziet dit bijvoorbeeld wel eens bij MVC modellen.
Maar ik dacht sowieso dat je functies variabel op onderstaande manier kon aanroepen:
$functie = 'test';
echo $functie('you');
Of zit ik er nu naast?
Het gebruik van $var($para) is niet echt netjes. Die originele phpfunctie wel.
Oké, maar als ik het geod begrijp doet het allebei dus hetzelfde, alleen de ene manier is onofficieel en daardoor minder netjes?
Ozzie PHP op 16/07/2011 17:52:19:
Oké, maar als ik het geod begrijp doet het allebei dus hetzelfde, alleen de ene manier is onofficieel en daardoor minder netjes?
Niet allebei hetzelfde, met call_user_func_array kan je meer:
Code (php)
en jouw notatie wordt ook al voor andere dingen gebruikt waar het meer op z'n plaats is:
Code (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
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
<?php
class Callback
{
public function __construct($reference)
{
$this->reference = $reference;
}
public function __invoke()
{
$args = func_get_args();
// Hoe zou je dit oplossen zonder call_user_func_array?
//return $this->reference(???) ???
// "Class Callback does not have a method 'reference'."
return call_user_func_array($this->reference, $args);
}
}
$clean = new Callback('htmlentities');
// Zelfde manier geschreven, maar doet iets anders
echo $clean('<ooh!>');
?>
class Callback
{
public function __construct($reference)
{
$this->reference = $reference;
}
public function __invoke()
{
$args = func_get_args();
// Hoe zou je dit oplossen zonder call_user_func_array?
//return $this->reference(???) ???
// "Class Callback does not have a method 'reference'."
return call_user_func_array($this->reference, $args);
}
}
$clean = new Callback('htmlentities');
// Zelfde manier geschreven, maar doet iets anders
echo $clean('<ooh!>');
?>
Gewijzigd op 16/07/2011 18:42:05 door Jelmer -
Wat bedoel je daarmee? Ik snap je voorbeelden niet helemaal, ik snap niet precies wat ze doen... maar dat zal aan mij liggen... en aan het late tijdstip wellicht.
?? omdat er geen manier is om het op de "onofficiële" manier niet kan. Het is niet echt een onofficiële manier, maar die manier, de naam van de functie die je aan wilt roepen vervangen door een variabele die de naam als string bevat, is beperkt. Je kan niet alle mogelijke functies ermee aanroepen.
Ah zo. Oké, heb er nog nooit mee gewerkt vandaar mijn vragen. Bedankt voor de toelichting.