2017-07-17 5 views
0

Ich frage mich, ob es eine Möglichkeit gab, eine automatische Variable Ersetzung innerhalb einer Zeichenfolge zu haben. Ich kann das jetzt mit preg_replace und strtr simulieren, bin mir aber nicht sicher, ob es einen besseren Weg gibt. Ich dachte daran, eval zu verwenden, aber ich kann nicht herausfinden, wie man es richtig macht.php - automatische String Templating

strtr

<?php 
    $replacement = array('$test' => "dog"); 
    $template = 'this is a $test'; 
    $statement = strtr($template, $replacement); 
    echo $statement; 
?> 

preg_replace

<?php 
    $template = 'this is a $test'; 
    $statement = preg_replace('/\$test/', 'dog', $template); 
    echo $statement; 
?> 

eval Idee

<?php 
    $template = 'this is a $test'; 
    $test = 'dog'; 
    eval('$statement = "$template";'); 
    echo $statement; 
?> 
+0

Sie müssen sehr, sehr, sehr, sehr vorsichtig Ihre Zeichenfolge auf den höchsten Grad zu validieren, bevor 'eval()' verwenden. 'eval()' kann das Hacken Ihrer Seite für schlaue, ungezogene Leute viel einfacher machen. Es ist nicht gegen das Gesetz, 'eval()' zu verwenden, aber es wird oft aufgrund von Schwachstellen stark abgeraten. Ich würde Sie dringend bitten, 'eval()' Ihren Plan Z zu machen - nur zu verwenden, wenn alles andere nicht wie gewünscht funktioniert. – mickmackusa

+0

Sind die anderen beiden Funktionen in bestimmten Situationen fehlerhaft? Sie scheinen eine klügere Wahl für diese Aufgabe zu sein. – mickmackusa

+0

@mickmackusa Ich denke, es wird schneller, nicht sicher. 'eval' sollte sicher sein, da sie Variablen sind, die ich selbst definiere. Keine Benutzer/Client-seitige Eingabe. –

Antwort

1

eval() ist eine Zeichenfolge evalute, als ob es PHP-Code ist. Also, wenn Sie tat:

<?php 

$template = 'this is a $test'; 
$test = 'dog'; 

eval($template); 
echo $template; 

?> 

Sie würden einen Syntaxfehler erhalten:

Parse error: syntax error, unexpected 'is' (T_STRING)

Weil Sie dies tatsächlich tun würde:

<?php 

$template = 'this is a $test'; 
$test = 'dog'; 

this is a $test; 

echo $template; 

?> 

Anstatt also, Sie bewerten müssen, um es als eine Zeichenkette in Anführungszeichen, so dass die Variable durch ihren Wert ersetzt wird:

die so etwas wie das sein würde:

<?php 

$template = 'this is a $test'; 
$test = 'dog'; 

$template = "this is a $test"; 

echo $template; 

?>