我可以将PHP中的文件作为带有内联变量的字符串加载吗?

我可以将PHP中的文件作为带有内联变量的字符串加载吗?,php,Php,我有一个简单(但不是很小)的HTML模板,包含内联变量。我想把它作为一个单独的文件拉出来,并且能够在其他模板文件中切换。有没有办法将文件加载到字符串中,但让它处理内联变量 例如: $thing=“完整句子”; $test=您可以使用include简单地加载文件,就像它是调用代码的一部分一样 include("included_file.php"); 如果由于某种原因无法包含,则可以读取文件内容并评估它 $content = file_get_contents("included_file.ph

我有一个简单(但不是很小)的HTML模板,包含内联变量。我想把它作为一个单独的文件拉出来,并且能够在其他模板文件中切换。有没有办法将文件加载到字符串中,但让它处理内联变量

例如:

$thing=“完整句子”;

$test=您可以使用
include
简单地加载文件,就像它是调用代码的一部分一样

include("included_file.php");
如果由于某种原因无法
包含
,则可以读取文件内容并
评估它

$content = file_get_contents("included_file.php");
eval($content);
更新:

正如NikiC所指出的,您的文件test.html没有有效的PHP。您必须更改它,以便
include
可以工作。test.html应包含以下内容:

<html>
<body>
    <p>This will get parsed as a <?= $thing ?>.</p>
</body>

这将被解析为一个


eval
将不适用于此代码,因为这不是纯PHP代码,而是包含PHP的HTML代码。如果您包含的文件只有PHP代码,它就可以正常工作。

类似的东西应该可以工作

// "test.php"
This will get parsed as a %s.

// "index.php"
$thing="complete sentence";
$test=file_get_contents("test.php");
printf($test, $thing);

+1,但是你有什么特别的原因想避免使用库吗?
include
?@tandu有点问题-我最初的想法是使用一个HTML文件(出于某种原因,我没有指定),该文件经过自身验证-因此我无法将其全部加载到模板文件中的变量中,我想我需要
include
@Levi,我想我只是觉得一个库增加了我希望不需要的复杂性。我不能对任何涉及eval()的答案进行投票,即使其余答案100%正确……我自己也同意eval在大多数情况下不是一个漂亮的解决方案。在这种情况下,典型的include似乎是一个可行的解决方案。有人能告诉我
eval
有什么问题吗?我想这在原则上是丑陋的,但我真的不明白…为什么。在这种情况下,它似乎是我最好的选择。@Ben:如果被有知识的人使用,它是“ok”的,但是它被无知的未洗的群众滥用得太多了,他们想知道为什么有些东西坏了。我对PHP相当好,当我谈到PH值时,仍然认为自己是无知的未被洗净的大众的一部分。这是行不通的。PHP不会将包含的文件的内容作为封装字符串处理,而是作为普通HTML处理(因此没有变量替换)。eval示例只会给出一个语法错误,因为文件内容不是有效的PHP。这是一个有趣的解决方案,但我需要动态变量。我不想预测在
$test
中使用了哪些变量,而且它将不止一个,因此提前声明一个变量是行不通的。我的例子只是简化了我需要完成的事情。但是谢谢!
<html>
<body>
    <p>This will get parsed as a <?= $thing ?>.</p>
</body>
// "test.php"
This will get parsed as a %s.

// "index.php"
$thing="complete sentence";
$test=file_get_contents("test.php");
printf($test, $thing);
<?php
    $thing="complete sentence";
    $test=file_get_contents("test.php");

    echo preg_replace_callback('#\$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)#','changeVariables',$test);

    function changeVariables($matches)
    {
        return $GLOBALS[$matches[1]];
    }