1
0
mirror of https://github.com/php/doc-de.git synced 2026-03-24 15:22:14 +01:00
Files
Martin Samesch b3d18c00e7 Sync with EN
2024-06-16 22:30:08 +02:00

173 lines
5.5 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 78d17c25eeecc78cb7098b1a01d42391e36af2c1 Maintainer: hholzgra Status: ready -->
<refentry xml:id="function.eval" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>eval</refname>
<refpurpose>Wertet eine Zeichenkette als PHP-Code aus</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>mixed</type><methodname>eval</methodname>
<methodparam><type>string</type><parameter>code</parameter></methodparam>
</methodsynopsis>
<para>
Wertet die in <parameter>code</parameter> enthaltene Zeichenkette als
PHP aus.
</para>
<para>
Der ausgewertete Code erbt den
<link linkend="language.variables.scope">Geltungsbereich der Variablen</link>
von der Zeile, in der die Funktion <function>eval</function> 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 <link linkend="function.include">eingebundene</link> Datei.
</para>
<caution>
<para>
Das <function>eval</function>-Sprachkonstrukt ist
<emphasis>sehr gefährlich</emphasis>, weil es die Ausführung von beliebigem
PHP-Code erlaubt.
<emphasis>Seine Verwendung wird daher nicht empfohlen.</emphasis>
Wenn sorgfältig überprüft wurde, dass es keine andere Möglichkeit gibt als
dieses Konstrukt zu verwenden, ist besonders darauf zu achten
<emphasis>keine von Nutzern bereit gestellten Daten zu übergeben</emphasis>
ohne diese zuvor ordnungsgemäß zu validieren.
</para>
</caution>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>code</parameter></term>
<listitem>
<para>
Gültiger PHP-Code, der ausgewertet werden soll.
</para>
<para>
Der Code darf nicht in öffnende und schließende
<link linkend="language.basic-syntax.phpmode">PHP-Tags</link>
eingeschlossen sein, &dh; <literal>'echo "Hi!";'</literal> muss anstelle
von <literal>'&lt;?php echo "Hi!"; ?&gt;'</literal> übergeben werden.
Es ist dennoch möglich den PHP-Modus durch die entsprechenden PHP-Tags zu
verlassen und wieder zu betreten, &zb;
<literal>'echo "Im PHP-Modus!"; ?&gt;Im HTML-Modus!&lt;?php echo "Wieder im PHP-Modus!";'</literal>.
</para>
<para>
Abgesehen davon muss der übergebene Code gültiges PHP sein. Das
beinhaltet, dass alle Anweisungen ordnungsgemäß mit einem Strichpunkt
terminiert sein müssen. <literal>'echo "Hi!"'</literal>, zum Beispiel,
verursacht einen Parse-Fehler, wohingegen
<literal>'echo "Hi!";'</literal> funktioniert.
</para>
<para>
Eine <literal>return</literal>-Anweisung beendet die Auswertung des
Codes sofort.
</para>
<para>
Der Code wird im Geltungsbereich des <function>eval</function>
aufrufenden Codes ausgeführt. Daher bleiben sämtliche Variablen, die im
<function>eval</function> Aufruf definiert oder geändert werden, nach
dessen Ende sichtbar.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
<function>eval</function> gibt &null; zurück, außer wenn im
ausgewerteten Code <literal>return</literal> aufgerufen wird, dann aber
wird der an <literal>return</literal> übergebene Wert zurückgegeben.
Von PHP 7 an, wird <function>eval</function> im Falle eines Parse Errors im
ausgewerteten Code eine <classname>ParseError</classname>-Exception werfen.
Vor PHP 7 gab <function>eval</function> in diesem Fall &false; zurück und
der weitere Code wurde normal ausgeführt. Es ist in
<function>eval</function> nicht möglich, einen Parse Error mittels
<function>set_error_handler</function> abzufangen.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title><function>eval</function>-Beispiel (einfache Texteinfügung)</title>
<programlisting role="php">
<![CDATA[
<?php
$string = 'Bierglas';
$name = 'Binding-Lager';
$str = 'Das ist mein $string, voll mit $name.';
echo $str . "\n";
eval ("\$str = \"$str\";");
echo $str . "\n";
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Das ist mein $string, voll mit $name.
Das ist mein Bierglas, voll mit Binding-Lager.
]]>
</screen>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
&note.language-construct;
&tip.ob-capture;
<note>
<para>
Im Fall eines schweren Fehlers im augewerteten Code wird das komplette
Skript beendet.
</para>
</note>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>call_user_func</function></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->