PHP创建了一种更好的回显变量的方法

时间:2014-03-04 19:04:30

标签: php variables replace

我正在寻找一种方法,将<?php echo $something; ?>替换为{$something}之类的其他符号。但是:没有使用聪明或类似的东西!

更详细: 目前,我得到了一个.php文件(里面有一些变量),其中包含文件“template.php”。在这个模板文件中,我不想使用(不是非常用户友好的)php表示法,而是替换此文件中的某些字符串,如上所述。有没有办法这样做?如果您可以使用<title></title>替换<title><?php echo $title; ?></title>之类的字符串,那么这可能是最好的。

也许(我的想法)我应该把整个代码写成一个php变量,然后做一些preg_replace并回显它?还是有一个更美丽的解决方案?

2 个答案:

答案 0 :(得分:0)

您可以尝试一些符号。我更喜欢模板的一个就是:

<?php

echo <<<HTML
<html>
    <head>
        <title>$title</title>
    </head>
    <body>
        $body
    </body>
</html>
HTML;

?>

然后在您的内容文件中,您执行以下操作:

<?php
$title = 'My Page!';
$body = '<p>My Content!</p>';
include './template.php';
?>

有了这个,您不必转义单引号和双引号,以后可以轻松进行更改。

你也可以在文件中读取一个字符串并像你说的那样使用preg_replace。最简单的方法是使用数组手动浏览文件并拉出占位符。但如果您拥有高流量和大量变量,这是一个缓慢的解决方案。

答案 1 :(得分:0)

几年前做过类似的事情,我不得不在电子邮件模板中替换几个变量。我最终实现的是在几个标签上执行str_replace。像你一样,我不想拥有PHP符号或尽可能多地转义模板文件中的字符

示例:

的template.php

<html>
    <head>
        <title>[EMAIL_TITLE]</title>
    </head>
    <body>
        Hello [USER_NAME],

        Login here [LOGIN_LINK].
    </body>
</html>

processor.php

$body = file_get_contents( 'template.php' );

str_replace( '[EMAIL_TITLE]', $emailTitle, $body );
str_replace( '[USER_NAME]', $userName, $body );
str_replace( '[LOGIN_LINK]', $userName, $body );

我已经改变了实现,但是使用了PHP短标签。使用前面的相同示例,您可以尝试:

的template.php

<html>
    <head>
        <title><?= $params['title']; ?></title>
    </head>
    <body>
        Hello <?= $params['userName']; ?>!
    </body>
</html>

processor.php

$params = array(
    'title' => $siteTitle,
    'userName' => $userName
);

ob_start();
require_once( 'template.php' );
$body = ob_end_clean();