Supportnet / Forum / Skripte(PHP,ASP,Perl...)
eval()
Frage
Hallo,
ich habe in einem Beispiel die function eval() endeckt
(eval("parent."+ "topFrame"))
jetzt habe ich nachgelsen und dort steht:
"Interpretiert ein zu übergebendes Argument und gibt das Ergebnis zurück."
ok das lasse ich mir bei einer rechen aktion einreden...
aber in dem fall wird etwas mit frames "ausgerechnet"... was macht EVAL in dem beispiel w.o.
vielen dank brainb<§$%$%
Antwort 1 von hollowsphere
Hi Brainbug,
eval hat nix mit rechnen zu tun.
Bei eval wird der übergebenen String als PHP-Code gelesen und ausgeführen. Versuch mal das Beispiel, vielleicht wird es dann klarer.
Das Beispiel von Dir ist übrigens aus JavaScript, da gibt es diese Funktion auch.
Gruss
Andreas
eval hat nix mit rechnen zu tun.
Bei eval wird der übergebenen String als PHP-Code gelesen und ausgeführen. Versuch mal das Beispiel, vielleicht wird es dann klarer.
<?PHP
$var_1 = "Briefmarke";
$var_2 = "Mauritius";
$text ='Wer kennt nicht die wertvolle $var_1 von $var_2.';
echo $text
;echo "<br>";
eval ("\$text = \"$text\";");
echo $text;
?>
Das Beispiel von Dir ist übrigens aus JavaScript, da gibt es diese Funktion auch.
Gruss
Andreas
Antwort 2 von semi
Mit PHP hat es nichts zu tun. Zumindest nicht in diesem Zusammenhang (Frames)
Wenn Du dies aber in Javascript einsetzen würdest, würde als Ergebnis ein Frame zurückgeliefert werden (unter der Voraussetzung, dass es so ein Frame gibt).
Siehe SelfHTML (eval in Javascript)
Interessant ist so etwas, wenn Du den Zweiten Teil des Strings "topFrame" variabel machst.
z.B.
Gruss,
Michael
Wenn Du dies aber in Javascript einsetzen würdest, würde als Ergebnis ein Frame zurückgeliefert werden (unter der Voraussetzung, dass es so ein Frame gibt).
Siehe SelfHTML (eval in Javascript)
var frame = eval("parent." + "topFrame")
entspricht
var frame = parent.topFrame;
Interessant ist so etwas, wenn Du den Zweiten Teil des Strings "topFrame" variabel machst.
z.B.
function setURL(url, frameNr)
var frames = new Array(
"topFrame",
"leftFrame",
"rightFrame",
"bottomFrame"
);
if(frameNr<0 || frameNr>frames.length) {
alert("Falsches Frame");
return;
}
frame = eval("parent." + frames[frameNr]);
frame.location = url;
}
Gruss,
Michael
Antwort 3 von brainbug
irgendwie geht mir das nicht in die birne - wofür brauche ich des?
var frame = eval("parent." + "topFrame")entsprichtvar frame = parent.topFrame;
warum wird hier eval verwendet wenn es eh mit - parent.topFrame geht - da schreibe ich es ja gleich so, bevor ich
eval("parent." + "topFrame") verwende...
michael - beim zweiten beispiel verwendets du eval - wofür? kannst du nicht auch schreiben -->
frame = "parent." + frames[frameNr] ??
thanks für die hilfe!!!
var frame = eval("parent." + "topFrame")entsprichtvar frame = parent.topFrame;
warum wird hier eval verwendet wenn es eh mit - parent.topFrame geht - da schreibe ich es ja gleich so, bevor ich
eval("parent." + "topFrame") verwende...
michael - beim zweiten beispiel verwendets du eval - wofür? kannst du nicht auch schreiben -->
frame = "parent." + frames[frameNr] ??
thanks für die hilfe!!!
Antwort 4 von semi
Wenn Du es so schreibst
frame = "parent." + frames[frameNr];
dann hast Du der Variable frame eine Zeichenkette zugewiesen. Die eval Funktion "erkennt", dass es ein Objekt (ein Frame) ist und liefert dieses zurück.
Versuche mal folgendes Beispiel, dann siehst Du den Unterschied.
Gruss,
Michael
frame = "parent." + frames[frameNr];
dann hast Du der Variable frame eine Zeichenkette zugewiesen. Die eval Funktion "erkennt", dass es ein Objekt (ein Frame) ist und liefert dieses zurück.
Versuche mal folgendes Beispiel, dann siehst Du den Unterschied.
<html>
<head>
<script type="text/javascript">
<!--
var a = "Dies ist ein Test";
var b = "a";
var c = eval("a");
alert("b=" + b);
alert("c=" + c);
//-->
</script>
</head>
<body>
</body>
</html>
Gruss,
Michael
Antwort 5 von semi
Kleine Korrektur zu Antwort 2.
if(frameNr<0 || frameNr>=frames.length) {sollte dort stehen (>= statt >).Antwort 6 von brainbug
na bin ich dumm -JOOPS
danke für dein bespiel - ABER
-->alert("c=" + c);
warum nicht..
-->alert("c=" + "Die ist ein Test");
sorry - aber ich verstehe einfach den sinn nicht...
thanks
danke für dein bespiel - ABER
-->alert("c=" + c);
warum nicht..
-->alert("c=" + "Die ist ein Test");
sorry - aber ich verstehe einfach den sinn nicht...
thanks
Antwort 7 von semi
Ein Beispiel, welches bestimmte Funktionalität demonstriert, muss nicht unbedingt einen Sinn ergeben.
Die zwei "alerts" sind einfach dazu da, um den Unterschied zwischen variable = zeichenkette und variable = eval(zeichenkette) zu verdeutlichen.
In den meisten Fällen wirst Du es nicht brauchen, dennoch ist es damit möglich, basierend auf irgendeinem Algorithmus oder Benutzereingaben, Einfluss auf den Verlauf eines Skriptes zu nehmen.
Die zwei "alerts" sind einfach dazu da, um den Unterschied zwischen variable = zeichenkette und variable = eval(zeichenkette) zu verdeutlichen.
In den meisten Fällen wirst Du es nicht brauchen, dennoch ist es damit möglich, basierend auf irgendeinem Algorithmus oder Benutzereingaben, Einfluss auf den Verlauf eines Skriptes zu nehmen.

