【问题标题】:PHP create a nicer way to echo variablesPHP 创建一个更好的方法来回显变量
【发布时间】:2014-04-06 12:02:54
【问题描述】:

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

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

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

【问题讨论】:

  • 短标签? <?=$something?>。你是 preg_replace,echo 解决方案基本上是 smarty/twig。就个人而言,我从来不明白为什么 php 模板需要“用户友好”。
  • 短标签并没有真正的帮助 - 我想为新手和编码懒惰的人创建一个模板系统:) 但是如果 smarty 使用类似的解决方案,就不会有问题......
  • smarty 只是众多模板引擎中的一种
  • @MikeB:因为人们在 php 模板引擎中模板模板时想要模板。为什么只有一层模板,而成本只有 4 倍?
  • @Pi_isnt_42:PHP IS 是一个模板引擎。一直都是。您只是在已经非常复杂的系统之上添加了更多复杂性。

标签: php variables replace


【解决方案1】:

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

例子:

模板.php

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

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

处理器.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 短标签,但我已经更改了实现。使用与前面相同的示例,您可以尝试:

模板.php

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

处理器.php

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

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

【讨论】:

    【解决方案2】:

    您可以尝试一些符号。我更喜欢模板的一种方法很简单:

    <?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 。最简单的方法是使用数组手动浏览文件并取出占位符。但是,如果您有高流量和很多变量,这是一个缓慢的解决方案。

    【讨论】:

    • 好的,谢谢!事实上,我有 4 个变量,所以这应该不是问题 :) 我会尝试两种解决方案(你的和 preg_replace),看看什么是最好的/最简单的。
    • 由于问题是“PHP 创建一个更好的方式来回显变量”和他的问题的解释,这不是一个答案,因为他试图使用的是一个新的符号,然后不是PHP,那么答案与模板引擎有关,但这不是答案,或者问的用户必须重写他的答案
    • 公平评论,但我提出的基本问题是什么是输出模板变量的干净、有效的方式。我同意即使是 =$var?> 也可能很乏味。
    猜你喜欢
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 2010-12-12
    • 1970-01-01
    • 2015-07-30
    • 2015-05-18
    相关资源
    最近更新 更多