[PHP] Funktion in Textvariabel ausführen und dann in Textvariable weitergeben?

BartTheDevil89

Devilution Media
ID: 87739
L
2 Mai 2006
3.960
103
Hallo,

also ich hab folgendes Problem. Und zwar habe ich diese Textvariable:

$var = "Das ist ein load(wert) hier";

Die php-Funktion load(wert) gibt am Ende einen Begriff zurück, zum Beispiel eben "Auto".
Jetzt muss ich diese Funktion irgendwie durchführen und dann den Text wieder in $var speichern. Also das brauch ich dann wieder. Aber wie schaffe ich das? Wie kann ich diese Funktion (Funktion kann auch mehrfach im String vorkommen) ausführen lassen und die Textvariable inkl. dem Wert nachher wieder in $var haben?

Danke

$var = "Das ist ein Auto hier";
 
Das solltest du mit eval hinbekommen, jedoch müßte das load dann zwischen <?php ?> stehen
 
eval ist aber sehr gefährlich!! Wenn das eine Usereingabe ist, kannst du dem User auch gleich die Zugangsdaten für deinen Server geben :!: 8O

Du solltest den String anständig parsen. Mit preg_replace_callback kannst du dann die entsprechenden Funktionsaufrufe machen und in dem String replacen.
 
PHP:
$var = "Das ist ein ".load(wert)." hier";

:think:
Ja, das geht, das weiß ich...aber würde es gern einfach in den Textstring einbauen wollen.

Das solltest du mit eval hinbekommen, jedoch müßte das load dann zwischen <?php ?> stehen

eval ist aber sehr gefährlich!! Wenn das eine Usereingabe ist, kannst du dem User auch gleich die Zugangsdaten für deinen Server geben :!: 8O

Du solltest den String anständig parsen. Mit preg_replace_callback kannst du dann die entsprechenden Funktionsaufrufe machen und in dem String replacen.

Über eval würde ich es gern machen, da das ganze nur Daten im Background sind also die Besucher da nicht rankommen. Aber das ganze ist ne class und hab es jetzt so versucht:
PHP:
$var = "Das ist ein <?$class->load(wert);?> hier";
eval("\$var = \"$var\";");
echo "$var";

Aber er gibt mir einfach nur "Das ist ein hier" zurück...
 
Aber er gibt mir einfach nur "Das ist ein hier" zurück...
Drum deaktiviert man short_tags in der php.ini, damit einem solche Fehler auffallen ;)
Code:
<?[SIZE=4][B][COLOR=Red]=[/COLOR][/B][/SIZE]$class->load(wert);?>
oder ordentlich
PHP:
<?php echo $class->load(WERT); ?>
Is "wert" ne Konstante oder was?
 
Drum deaktiviert man short_tags in der php.ini, damit einem solche Fehler auffallen ;)
Code:
<?[SIZE=4][B][COLOR=Red]=[/COLOR][/B][/SIZE]$class->load(wert);?>
oder ordentlich
PHP:
<?php echo $class->load(WERT); ?>
Is "wert" ne Konstante oder was?

Hi,
ja konstante ist ein Wert, also ich trag da einfach was ein. geht allerdings so noch nicht. Das ganze soll in ein templatesystem rein. Hab es hier mal zusammengefasst:

PHP:
<?
if(file_exists("templates/$template.tpl")){ //Template auslesen
$var = implode("",file("templates/$template.tpl")); //Das Template auslesen
$var = str_replace("\"","\\\"", $var);
eval ("\$var = \"".$var."\";"); //eval durchführen
echo "$eval";
}
?>
Und das Template, was augelesen wird schaut so aus:
PHP:
$var = "Das ist ein <?echo "$class->load(wert)";?> hier";

EDIT: Ich weiß, dass man das jetzt in dem einfach Beispiel hier auch anders lösen könnte indem man einfach per include oder ähnilches die Funktion auführen könnte ohne eval() zu nutzen. Aber es werden auchnoch Variablen in den templates genutzt, die eben auch ersetzt werden müssen. Also durch eval lass ich es sowieso durchlaufen und daher wäre es perfekt, wenn ich die funktionen jetzt auch durch eval lösen könnte.
 
Zuletzt bearbeitet:
PHP:
<?

//function
$var="Das ist {vari1} hier.";
function funci1($wert) {
global $vari1;
$wert = eregi_replace('{vari1}',$vari1,$wert);
return $wert;
}

//AUSGABE TEST
$vari1="auto";
echo funci1($var);



?>
 
PHP:
<?

//function
$var="Das ist {vari1} hier.";
function funci1($wert) {
global $vari1;
$wert = eregi_replace('{vari1}',$vari1,$wert);
return $wert;
}

//AUSGABE TEST
$vari1="auto";
echo funci1($var);



?>

Ja, aber das ständige ersetzen von Variablen in nem Templatesystem ist doch aber noch schwieriger und aufwendiger. Deswegen wäre es halt am einfachsten das über eval zu machen, weil ich das ja sowieso mache.

Jetzt auf einmal alle weg? :(
 
Zuletzt bearbeitet von einem Moderator: