Is het op een of andere manier mogelijk om een functie te gebruiken in een array?

Bijvoorbeeld:
<?php
$array = [ 'item1' => ['item1a' => 'foo', 'item1b' => functie(), 'item1c' => andere-functie()],
['item2a' => 'bar', 'item2b' => functie(), 'item2c' => andere-functie()]
];
?>
Nee. Maar je kunt wel namen van functies opslaan en deze dan middels call_user_func() de functie die je wilt doen aanroepen.

Pas wel op bij publieke sites kan dit een ernstig beveiligingslek geven.
Kan gewoon:
<?php
function bar ()
{
return "baz";
}

$a = [ 'foo' => bar() ];

print_r($a);

?>
Geeft als output:

Array
(
    [foo] => baz
)


Of zelfs:
<?php
function bar ()
{
return [ 'bar' => 'baz' ];
}

$a = [ 'foo' => bar() ];

print_r($a);

?>
geeft:

Array
(
    [foo] => Array
        (
            [bar] => baz
        )

)
Hmmm Achteraf ook wel logisch. Ik wist dat het middels een variabele kon.
Overigens kun je dit ook doen met array keys:
<?php
$a = [ foo() => 'bar' ]
?>
De documentatie van PHP zegt overigens niet heel erg expliciet dat het kan (althans, ik heb het niet kunnen vinden) maar hier en daar vind je wel voorbeelden waarin iets staat als "$array=array(foo=>array())".

[Overigens is dat een slecht voorbeeld van mij, want array() is geen functie...]
Ik zal er weer eens in duiken.
Zoals het eerste voorbeeld van Willem vp heb ik het geprobeerd. Maar dan krijg ik helemaal geen output. Zelfs met error reporting aan doet het helemaal niks meer. Krijg dan zo'n mooi wit scherm. :)

Staat er wel een foutmelding in de Apache errorlog? (ik neem even aan dat je Apache gebruikt ;-) )

Welke PHP-versie gebruik je? Ik weet niet of je de verkorte notatie om een array aan te maken met [ ] vaker gebruikt, maar die werkt pas vanaf PHP 5.4. Met oudere PHP-versies krijg je dan een parse error, en dat geeft dan zo'n mooi wit scherm. In de errorlog zou dan in ieder geval wel een foutmelding moeten staan.

Reageren