PHP/Code erzeugen

Aus Mikiwiki
< PHP
Wechseln zu: Navigation, Suche

Manchmal ist es sinnvoll, Code zu erzeugen, der später wieder mit PHP ausgeführt werden kann. Dabei sind die Funktionen "extract" und "var_export" hilfreich.

Variablen mit "extract" erzeugen

Die Funktion "extract" liest ein assoziatives Array ein und erzeugt für jeden Wert eine Variable. Mit dem Parameter "type" wird angegeben, wie die Umwandlung erfolgen soll. Um diese Variablen von anderen Variablen im Skript unterscheiden zu können, kann ein Präfix angegeben werden. Wenn das Präfix verwendet wird, so besteht der vollständige Variablenname aus dem Präfix, einem Unterstrich und dem Schlüssel des assoziativen Arrays. Ist der Schlüssel kein gültiger Variablenname, so wird der Vorgang für diesen Eintrag nicht ausgeführt.

extract(<array>, <type>, <prefix>);

Mögliche Arten der Umwandlung sind die folgenden.

Konstante Wert Beschreibung
EXTR_OVERWRITE 0 Wenn der erzeugte Name mit einer vorhandenen Variable kollidiert, wird die vorhandene Variable überschrieben. Das ist der Standardwert.
EXTR_SKIP 1 Wenn der erzeugte Name mit einer vorhandenen Variable kollidiert, wird die vorhandene Variable nicht überschrieben.
EXTR_PREFIX_SAME 2 Wenn der erzeugte Name mit einer vorhandenen Variable kollidiert, wird das Präfix auf die Variable angewendet, die von der Kollision betroffen ist.
EXTR_PREFIX_ALL 3 Alle Variablen werden zur Vermeidung von Kollisionen mit dem Präfix versorgt. Es wird empfohlen, diese Option zu nutzen.
<?php
$myarray = array("as" => "Active Server Pages", "pl" => "Perl", "ph" => "PHP");
extract($myarray, EXTR_PREFIX_ALL, "string_script");
echo $string_script_as."<br />\n";
echo $string_script_pl."<br />\n";
echo $string_script_ph."<br />\n";
?>

Active Server Pages
Perl
PHP

PHP-Code zur Definition einer Variablen erzeugen

Die Funktion "var_export" erzeugt eine Ausgabe, die stark an "var_dump" erinnert. Der Aufbau ist aber so, dass PHP (fast) die Zeichenkette wieder verarbeiten und genau die vorherige Variable erzeugen kann.

<?php
$a = array(1, 2, 3);
var_export($a);
?>
array ( 0 => 1, 1 => 2, 2 => 3, )

Um als Zeichenkette vorliegenden Code wieder ausführen zu können, wird die Funktion "eval" eingesetzt.

Mit "eval" PHP-Code implizit ausführen

Der Befehl "eval" führt den angegebenen Code sofort aus. Der Inhalt von Variablen wird aus der umgebenden Ebene übernommen, globale Variablen müssen also auch hier bekannt gemacht werden, wenn der Aufruf innerhalb einer Funktion erfolgt. Zu beachten ist, dass auf Variablen innerhalb der zu überprüfenden Zeichenketten nur zuverlässig zugegriffen werden kann, wenn vor dem "$"-Zeichen ein Backslash steht.

<?php
$test   = "Ausgabe mit eval";
$output = "echo";
eval( "$output \$test;" );
?>
Ausgabe mit eval