<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/ref.misc.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'de',
  ),
  'this' => 
  array (
    0 => 'function.eval.php',
    1 => 'eval',
    2 => 'Wertet eine Zeichenkette als PHP-Code aus',
  ),
  'up' => 
  array (
    0 => 'ref.misc.php',
    1 => 'Sonstige Funktionen',
  ),
  'prev' => 
  array (
    0 => 'function.die.php',
    1 => 'die',
  ),
  'next' => 
  array (
    0 => 'function.exit.php',
    1 => 'exit',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'de',
    'path' => 'reference/misc/functions/eval.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.eval" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">eval</h1>
  <p class="verinfo">(PHP 4, PHP 5, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">eval</span> &mdash; <span class="dc-title">Wertet eine Zeichenkette als PHP-Code aus</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-function.eval-description">
  <h3 class="title">Beschreibung</h3>
  <div class="methodsynopsis dc-description">
   <span class="methodname"><strong>eval</strong></span>(<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$code</code></span>): <span class="type"><a href="language.types.mixed.php" class="type mixed">mixed</a></span></div>

  <p class="para rdfs-comment">
   Wertet die in <code class="parameter">code</code> enthaltene Zeichenkette als
   PHP aus.
  </p>
  <p class="para">
   Der ausgewertete Code erbt den
   <a href="language.variables.scope.php" class="link">Geltungsbereich der Variablen</a>
   von der Zeile, in der die Funktion <span class="function"><strong>eval()</strong></span> aufgerufen
   wird. Alle Variablen, die in dieser Zeile verfügbar sind, können im
   ausgewerteten Code gelesen und verändert werden. Alle definierten Funktionen
   und Klassen werden jedoch im globalen Namensraum definiert. Mit anderen
   Worten, der Compiler betrachtet den ausgewerteten Code so, als wäre er eine
   separate <a href="function.include.php" class="link">eingebundene</a> Datei.
  </p>
  <div class="caution"><strong class="caution">Achtung</strong>
   <p class="para">
    Das <span class="function"><strong>eval()</strong></span>-Sprachkonstrukt ist
    <em>sehr gefährlich</em>, weil es die Ausführung von beliebigem
    PHP-Code erlaubt.
    <em>Seine Verwendung wird daher nicht empfohlen.</em>
    Wenn sorgfältig überprüft wurde, dass es keine andere Möglichkeit gibt als
    dieses Konstrukt zu verwenden, ist besonders darauf zu achten
    <em>keine von Nutzern bereit gestellten Daten zu übergeben</em>
    ohne diese zuvor ordnungsgemäß zu validieren.
   </p>
  </div>
 </div>


 <div class="refsect1 parameters" id="refsect1-function.eval-parameters">
  <h3 class="title">Parameter-Liste</h3>
  <p class="para">
   <dl>
    
     <dt><code class="parameter">code</code></dt>
     <dd>
      <p class="para">
       Gültiger PHP-Code, der ausgewertet werden soll.
      </p>
      <p class="para">
       Der Code darf nicht in öffnende und schließende
       <a href="language.basic-syntax.phpmode.php" class="link">PHP-Tags</a>
       eingeschlossen sein, d. h. <code class="literal">&#039;echo &quot;Hi!&quot;;&#039;</code> muss anstelle
       von <code class="literal">&#039;&lt;?php echo &quot;Hi!&quot;; ?&gt;&#039;</code> übergeben werden.
       Es ist dennoch möglich den PHP-Modus durch die entsprechenden PHP-Tags zu
       verlassen und wieder zu betreten, z. B.
       <code class="literal">&#039;echo &quot;Im PHP-Modus!&quot;; ?&gt;Im HTML-Modus!&lt;?php echo &quot;Wieder im PHP-Modus!&quot;;&#039;</code>.
      </p>
      <p class="para">
       Abgesehen davon muss der übergebene Code gültiges PHP sein. Das
       beinhaltet, dass alle Anweisungen ordnungsgemäß mit einem Strichpunkt
       terminiert sein müssen. <code class="literal">&#039;echo &quot;Hi!&quot;&#039;</code>, zum Beispiel,
       verursacht einen Parse-Fehler, wohingegen
       <code class="literal">&#039;echo &quot;Hi!&quot;;&#039;</code> funktioniert.
      </p>
      <p class="para">
       Eine <code class="literal">return</code>-Anweisung beendet die Auswertung des
       Codes sofort.
      </p>
      <p class="para">
       Der Code wird im Geltungsbereich des <span class="function"><strong>eval()</strong></span>
       aufrufenden Codes ausgeführt. Daher bleiben sämtliche Variablen, die im
       <span class="function"><strong>eval()</strong></span> Aufruf definiert oder geändert werden, nach
       dessen Ende sichtbar.
      </p>
     </dd>
    
   </dl>
  </p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-function.eval-returnvalues">
  <h3 class="title">Rückgabewerte</h3>
  <p class="para">
   <span class="function"><strong>eval()</strong></span> gibt <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> zurück, außer wenn im
   ausgewerteten Code <code class="literal">return</code> aufgerufen wird, dann aber
   wird der an <code class="literal">return</code> übergebene Wert zurückgegeben.
   Von PHP 7 an, wird <span class="function"><strong>eval()</strong></span> im Falle eines Parse Errors im
   ausgewerteten Code eine <span class="classname"><a href="class.parseerror.php" class="classname">ParseError</a></span>-Exception werfen.
   Vor PHP 7 gab <span class="function"><strong>eval()</strong></span> in diesem Fall <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> zurück und
   der weitere Code wurde normal ausgeführt. Es ist in
   <span class="function"><strong>eval()</strong></span> nicht möglich, einen Parse Error mittels
   <span class="function"><a href="function.set-error-handler.php" class="function">set_error_handler()</a></span> abzufangen.
  </p>
 </div>


 <div class="refsect1 examples" id="refsect1-function.eval-examples">
  <h3 class="title">Beispiele</h3>
  <p class="para">
   <div class="example" id="example-1">
    <p><strong>Beispiel #1 <span class="function"><strong>eval()</strong></span>-Beispiel (einfache Texteinfügung)</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$string </span><span style="color: #007700">= </span><span style="color: #DD0000">'Bierglas'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$name </span><span style="color: #007700">= </span><span style="color: #DD0000">'Binding-Lager'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$str </span><span style="color: #007700">= </span><span style="color: #DD0000">'Das ist mein $string, voll mit $name.'</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">$str </span><span style="color: #007700">. </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />eval (</span><span style="color: #DD0000">"\$str = \"</span><span style="color: #0000BB">$str</span><span style="color: #DD0000">\";"</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">$str </span><span style="color: #007700">. </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p></div>
    <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">Das ist mein $string, voll mit $name.
Das ist mein Bierglas, voll mit Binding-Lager.</pre>
</div>
    </div>
   </div>
  </p>
 </div>


 <div class="refsect1 notes" id="refsect1-function.eval-notes">
  <h3 class="title">Anmerkungen</h3>

  <blockquote class="note"><p><strong class="note">Hinweis</strong>: <span class="simpara">Da dies ein Sprachkonstrukt
und keine Funktion ist, können Sie dieses nicht mit
<a href="functions.variable-functions.php" class="link">Variablenfunktionen</a> oder
<a href="functions.arguments.php#functions.named-arguments" class="link">benannten Parametern</a> verwenden.
</span></p></blockquote>

  <div class="tip"><strong class="tip">Tipp</strong><p class="simpara">Bei allem, dessen Ergebnisausgabe direkt
im Browser angezeigt wird, können Sie die
<a href="book.outcontrol.php" class="link">Funktionen zur Ausgabesteuerung</a> verwenden.
Damit lässt sich die Ausgabe dieser Funktion erfassen, und - zum Beispiel -
in einem <span class="type"><a href="language.types.string.php" class="type string">string</a></span> speichern.</p></div>
  <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
   <p class="para">
    Im Fall eines schweren Fehlers im augewerteten Code wird das komplette
    Skript beendet.
   </p>
  </p></blockquote>
 </div>


 <div class="refsect1 seealso" id="refsect1-function.eval-seealso">
  <h3 class="title">Siehe auch</h3>
  <p class="para">
   <ul class="simplelist">
    <li><span class="function"><a href="function.call-user-func.php" class="function" rel="rdfs-seeAlso">call_user_func()</a> - Ruft die Callback-Funktion auf, die als erster Parameter &uuml;bergeben wurde</span></li>
   </ul>
  </p>
 </div>

</div><?php manual_footer($setup); ?>