Supportnet Computer
Planet of Tech

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.


<?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)

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!!!


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.

<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

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.



Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: