Functie aanroepen doormiddel van string/variable/array

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mik PHP

Mik PHP

16/07/2011 14:31:16
Quote Anchor link
Goeden middag allemaal!

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$actions
= array(
"test" => array("Action_Test"),
"test2" => array("Action_Test2")
);

function
Action_Test() {
    
    $pagevariable = 'test.php';
}
function
Action_Test2() {
    
    $pagevariable = 'test2.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
 
PHP hulp

PHP hulp

25/11/2024 02:26:05
 
Jelmer -

Jelmer -

16/07/2011 14:54:49
 
Mik PHP

Mik PHP

16/07/2011 15:13:23
Quote Anchor link
Thank you! :)

Is het eigenlijk mogelijk om als je bijvoorbeeld de volgende functie aanroep:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
function test() {
    $var = 'Hello world';
}

test();
?>

om dan vervolgens gewoon $var te echoen?
zo dus:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
function test() {
    $var = 'Hello world';
}


test();

echo $var;
?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php

function test() {
    global $var;
    $var = 'Hello world';
}


test();

echo $var;
?>
Gewijzigd op 16/07/2011 15:14:02 door Mik PHP
 
Noppes Homeland

Noppes Homeland

16/07/2011 15:51:45
Quote Anchor link
Nu alleen nog afleren om blindelings variabelen global te definieeren!!
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
funtion test() {
    return 'Hello World';
}


echo test();
?>
 
TJVB tvb

TJVB tvb

16/07/2011 16:25:01
Quote Anchor link
Mik th, als je de link van Jelmer leest zie je dat je parameters voor je functie me kunt geven. En het resultaat van de functie krijg je als resultaat van je aanroep.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
function test($who)
{

    return 'Hello '.$who;
}

echo call_user_func_array('test',array('you'));
?>

resultaat: Hello you
 
Ozzie PHP

Ozzie PHP

16/07/2011 16:29:52
Quote Anchor link
@TJVB: wat is het verschil tussen jouw manier en de manier van Noppes?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
function test($who)
{

    return 'Hello '.$who;
}

echo test('you');
?>
 
TJVB tvb

TJVB tvb

16/07/2011 16:31:50
Quote Anchor link
@Ozzie ik laat het gebruik van parameters zien in combinatie met call_user_func_array();
 
Ozzie PHP

Ozzie PHP

16/07/2011 16:36:27
Quote Anchor link
Ja, dat zeg ik :)
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.
 
TJVB tvb

TJVB tvb

16/07/2011 16:38:11
Quote Anchor link
Het nut van die functie is het gebruiken van variabele functies (waar de TS om vroeg)

Je ziet dit bijvoorbeeld wel eens bij MVC modellen.
 
Ozzie PHP

Ozzie PHP

16/07/2011 16:45:55
Quote Anchor link
Hmmm oke, dan kan het ooit nog eens van pas komen.

Maar ik dacht sowieso dat je functies variabel op onderstaande manier kon aanroepen:

$functie = 'test';

echo $functie('you');

Of zit ik er nu naast?
 
- SanThe -

- SanThe -

16/07/2011 17:46:54
Quote Anchor link
Het gebruik van $var($para) is niet echt netjes. Die originele phpfunctie wel.
 
Ozzie PHP

Ozzie PHP

16/07/2011 17:52:19
Quote Anchor link
Oké, maar als ik het geod begrijp doet het allebei dus hetzelfde, alleen de ene manier is onofficieel en daardoor minder netjes?
 
Jelmer -

Jelmer -

16/07/2011 18:40:46
Quote Anchor link
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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php

class Template
{
    public function render()
    {

        return "Hello World";
    }
}


$page = new Template();

$var = ???

echo $var();

echo call_user_func_array(array($page, 'render'), array());
?>


en jouw notatie wordt ook al voor andere dingen gebruikt waar het meer op z'n plaats is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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!>');
?>
Gewijzigd op 16/07/2011 18:42:05 door Jelmer -
 
Ozzie PHP

Ozzie PHP

16/07/2011 23:30:28
Quote Anchor link
$var = ???

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.
 
Jelmer -

Jelmer -

17/07/2011 00:03:08
Quote Anchor link
?? 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.
 
Ozzie PHP

Ozzie PHP

17/07/2011 01:02:39
Quote Anchor link
Ah zo. Oké, heb er nog nooit mee gewerkt vandaar mijn vragen. Bedankt voor de toelichting.
 
Pim -

Pim -

22/07/2011 05:27:21
Quote Anchor link
@Jelmer. Vanaf php 5.4 werkt het volgende:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$callback
= array($object, 'method');
$callback();
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.