php - 自动字符串模板

时间:2017-07-17 00:40:38

标签: php string templates

我想知道是否有办法在字符串中进行自动变量替换。我现在可以使用preg_replacestrtr来模拟这一点,但我不确定是否有更好的方法。我在考虑使用eval,但似乎无法弄清楚如何正确使用它。

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想法

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

1 个答案:

答案 0 :(得分:1)

eval()用于评估字符串,就好像它是PHP代码一样。所以,如果你这样做了:

<?php

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

eval($template);
echo $template;

?>

您会收到语法错误:

  

解析错误:语法错误,意外'是'(T_STRING)

因为你实际上会这样做:

<?php

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

this is a $test;

echo $template;

?>

因此,您需要将其作为双引号中的字符串进行评估,以便将变量替换为其值:

<?php

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

eval("\$template = \"$template\";");

echo $template;

?>

这将是这样的:

<?php

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

$template = "this is a $test";

echo $template;

?>