Hmm.. som du säger så funkar ju evalute_call och allt ser ju bra ut.. kan det vara så enkelt att det kanske funkar med att sätta variablen $ret som en Global variabel
Global $ret;
i början av skriptet?
3 svar · 145 visningar · startad av Patrik81
Hejsan, jag har ett litet problem här, det är inte helt omöjligt att jag har tänkt helt fel och kan komma på en smartare lösning, men jag har iaf. kommit fram till att jag i en databas måste lagra lite grejer och däribland en variabel, som sedan skall bli ett funktionsanrop...
<?php
function call_Agnus()
{
$ret = "Agnus";
return $ret;
}
function evaluate_call($call)
{
$before = "call_";
$after = "();";
$sum = $before.$call.$after;
// call_Agnus();
eval($sum);
return $ret;
}
$var_from_db = "Agnus";
$tillbaka = evaluate_call($var_from_db);
echo($tillbaka);
?>
så här långt har jag kommit, funktionen evaluate_call funkar och tar emot och fogar samman och kör till sist funktionen, men hur får jag tillbaka värdet från funktionen jag just kört?
Går det?
För jag antar att call_Agnus() returnerar sitt värde till evaluate_call() och hur får man då evaluate_call() att fatta att den skall returnera det vidare till scriptet igen, så att man kan lagra värdet i en variabel?
Någon som har en idé? För jag har testat o testat, men det vill sig inte... :/
Tack på förhand
MVH Patrik
Hmm.. som du säger så funkar ju evalute_call och allt ser ju bra ut.. kan det vara så enkelt att det kanske funkar med att sätta variablen $ret som en Global variabel
Global $ret;
i början av skriptet?
Re: "Funktion som skall returnera en annan funktions retur"-problem
<?php
function call_Agnus()
{
$ret = "Agnus";
return $ret;
}
function evaluate_call($call)
{
$before = "call_";
$sum = $before.$call;
// call_Agnus();
return $sum();
}
//eller om du tvunget vill använda eval
function evaluate_call_2($call)
{
$before = "call_";
$after = "();";
$sum = $before.$call.$after;
// call_Agnus();
eval("\$ret = " . $sum);
return $ret;
}
//borde fungera iaf
$var_from_db = "Agnus";
$tillbaka = evaluate_call($var_from_db);
echo($tillbaka);
?>
KLOCKRENT!
monAmour: jag testade det strax efter jag hade skrivit min fråga, och visst, det funkade ju, men då blev jag lite rädd för att jag kanske skulle skriva över den variabeln i en funktion om jag anropade mer än en funktion... så det blev inge bra :/
Däremot var pimmes´s förslag helt vad jag ville ha.
Hade jag vetat att man inte behövde använda eval så hade jag inte gjort det, för det verkar lite krångligt ibland. =)
men raden
return $sum();
gjorde hela skillnaden, himla nöjd är jag =)
Tack
MVH Patrik