webForumDet fria alternativet

"Funktion som skall returnera en annan funktions retur"-problem

PHP

3 svar · 145 visningar · startad av Patrik81

Medlem sedan okt. 2001538 inlägg
Frågan#1

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

Medlem sedan dec. 2002258 inlägg
#2

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?

Medlem sedan sep. 20011 086 inlägg
#3

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);
?>
Medlem sedan okt. 2001538 inlägg
#4

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

258 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)