Siinähän se ongelma jo tulikin. Tarvitsisi siis saada funktion parametriksi määriteltyä toinen funktio.
Eli tähän tapaan:
<?php function f2() { echo "jotain"; } function f1(fp()) { // virhe tässä rivissä fp(); } f1(f2()); ?>
pitäisi tulostaa "jotain" mutta tulostuu vain virhe...
Parse error: syntax error, unexpected '(', expecting '&' or T_VARIABLE
...koskien ko. yllä merkattua riviä.
EDIT: Ja kysymys oli siis, että miten? Tuon ongelman ratkaisemista tarvitsen siis eräässä toisessa koodissa, joten pitäisi saada nimenomaan tuolleen, muttakun valittaa että väärän tyyppinen. Onko tuo mitenkään mahdollista saada?
Toimisiko call_user_func? PHP:ssä on myös muuttujafunktioita.
Funktion parametrit on muuttujia. Eli sinne funktion määrittelyn sulkeiden sisään pitää laittaa muuttujia ( $jotain ) eikä kutsua siellä jotain funktiota ( fp() )
Eli siis
<?php function f2() { echo "jotain"; } function f1($funktionimi) { $funktionimi(); } f1('f2');
Jos on vanha PHP, joka ei tue tätä niin sitten Jaskan call_user_func-linkin mukaisesti. (Ja Jaska editoikin myös maininnan näistä muuttujafunktioista, joita esimerkissäni käytin)
Grez kirjoitti:
Funktion parametrit on muuttujia. Eli sinne funktion määrittelyn sulkeiden sisään pitää laittaa muuttujia ( $jotain ) eikä kutsua siellä jotain funktiota ( fp() )
Funktion parametriksi voi kyllä antaa muutakin kuin vain muuttujia, esimerkiksi vakioita (DIRECTORY_SEPARATOR), lausekkeita ($a > 3 tai $a < $b ? 2 : 3), funktiokutsuja (strlen($a)) ja anonyymejä funktioita. Funktio saa parametrien arvot muuttujissa käsiteltävikseen.
Tuo anonyymi funktio (klosuuri) voisi olla se mitä tässä haetaan. Sen sijaan että annetaan parametrina funktion nimi, voidaan suoraan antaa funktion määrittely näin:
function_that_takes_function_as_parameter(function() { echo "parameter function"; } );
ja käyttö vastaavasti kuin Grezin esimerkissä:
function function_that_takes_function_as_parameter($func) { $func(); }
Toki anonyymin funktion voi myös tallettaa muuttujaan ja antaa sen muuttujan parametrina.
Tukki kirjoitti:
Funktion parametriksi voi kyllä antaa muutakin kuin vain muuttujia, esimerkiksi vakioita (DIRECTORY_SEPARATOR), lausekkeita ($a > 3 tai $a < $b ? 2 : 3), funktiokutsuja (strlen($a)) ja anonyymejä funktioita. Funktio saa parametrien arvot muuttujissa käsiteltävikseen.
Puhuin funktion parametreista ja funktion määrittelystä. Toki funktioita kutsuttaessa ko. muuttujien arvot voi määrittää "lennossa" eli funktiokutsun sisällä.
Vai meinaatko tosissasi, että tällainen olisi kelpo funktio:
function TukinFunktio(DIRECTORY_SEPARATOR, $a < $b ? 2 : 3) { echo "$a ja $b"; }
Grez kirjoitti:
Vai meinaatko tosissasi, että tällainen olisi kelpo funktio:
function TukinFunktio(DIRECTORY_SEPARATOR, $a < $b ? 2 : 3) { echo "$a ja $b"; }
En meinaa. Kommenttisi ensimmäisen lauseen perusteella saattaa vaan vaada sen käsityksen että väität että tämäkään ei olisi mahdollista:
TukinFunktio(DIRECTORY_SEPARATOR, $a < $b ? 2 : 3);
ja tarkensin ettei näin ole. Tässä on kaksi eri asia: se miten funktiolle voi antaa arvoja parametrina ja se miten funtkio saa nuo arvot käsiteltäväkseen. Toinen pointti oli se että parametrina annettava arvo voi olla suoraan funktiomäärittely eikä sen tarvitse olla funktion nimi.
Tukin mainitsemat asiat ovat argumentteja eivätkä parametreja.
Aihe on jo aika vanha, joten et voi enää vastata siihen.