回复PHP代码而不注释掉PHP代码

时间:2014-10-30 21:35:02

标签: php

让我重新解释一下这个问题。我正在尝试将html文件的内容存储到字符串中。然后我希望php字符串中的html代码将php转换为我稍后提供的值。我认为字符串插值可能有效。我可能已经过度复杂了。但我认为在某些情况下仍能使用php标签会很有趣。

我想做这样的事情:

$str = 'some words';
$php = '<p><?= $str; ?></p>';
echo $php;

将输出到DOM(来源):

<p>some words</p>

或只是在浏览器屏幕上

some words

我得到了什么:

<p><!-- <?= $str; ?> --></p>

这甚至可能吗?

我知道上面的代码看起来很简单,但这只是我想解决的问题的简单案例。

<?php

// View
class View {

    private static $paths = [];

    private static function getTemplate($templatePath) {

        if (!array_key_exists($templatePath, self::$paths)) {

            // Filename must exist
            if (!file_exists($templatePath)) {
                die('File Doesn\'t Exist');
            }

            self::$paths[$templatePath] = file_get_contents($templatePath);

        }

        return self::$paths[$templatePath];

    }

    // Fill Template
    public static function fill($vars, $templatePath) {

        // Turn Vars into unique variables
        extract($vars);

        $input = self::getTemplate($templatePath);

        // Get View Output
        ob_start();
        echo $input;
        $output = ob_get_contents();
        ob_end_clean();

        return $output;

    }

    public static function fillWith($templatePath) {

    }

}

2 个答案:

答案 0 :(得分:2)

使用string interpolation

echo "<p>$str</p>";

请注意双引号语法"...")。如果字符串是单引号('...'),则变量在PHP中替换。


至于您更新的问题

如果从外部源获取模板字符串,那么PHP的字符串插值将无法工作(如果可能的话,这将是一个巨大的安全风险)。

您可以使用regular expressionsreplace种特定模式。

或使用模板引擎,例如Twig。它具有比您目前需要的更多功能,需要一些学习,但如果您需要更复杂的功能,它可以满足未来需求。

您也可以将模板文件设为PHP脚本,然后include(而不是file_get_contents)。 +在包含之前定义变量。那么PHP的常用字符串插值就可以了。 但我不建议您这样做。它不可读,并带来潜在的安全风险。

另见this question

答案 1 :(得分:1)

多么简单,只需使用它:

<?php

    $str = "some words";
    echo "<p>$str</p>";
?>

此处还有一些关于单引号和双引号的额外信息: What is the difference between single-quoted and double-quoted strings in PHP?