在变量中包含文件内容

Art*_*roO 1 php

在我的应用程序中,我经常使用AJAX调用来获取某些变量以及html代码,示例JSON:

{
    'result': '1',
    'error': '0',
    'someVar': 'abc',
    'outputHTML':   '<table>....</table>',
}
Run Code Online (Sandbox Code Playgroud)

要创建这样的JSON,我必须在关联数组中分配每个值并对其进行编码(服务器端:PHP代码)。

$response=array(
    'result'    =>  1,
    'error' =>  0,
    'someVar'   =>  'abc',
    'outputHTML'    =>  '<table>....</table>',
);
echo @json_encode($response);
die();
Run Code Online (Sandbox Code Playgroud)

我将HTML代码直接放在类中,但是我想将其移到单独的模板文件中,以减小类大小,并从html代码中分离类代码。问题是我无法将模板代码放入变量样本中:

function ajax_response()
{
    $response=array();
    //of course below code doesn't work
    $response['outputHTML']=include('table-html.php');
    echo @json_encode($response);
    die();
}
Run Code Online (Sandbox Code Playgroud)

其中table-html.php文件包括:

<table>
    ...
</table>
Run Code Online (Sandbox Code Playgroud)

解决该问题的一种方法是使用输出缓冲来捕获table-html.php文件的内容并将其插入变量中。不利之处在于,并非总是在服务器上启用输出缓冲,因此在某些主机上,此类代码将无法正常工作。您对问题的替代解决方案有何建议?

注意:模板文件使用PHP代码动态生成HTML代码,因此必须对包含的PHP文件进行解析。

更新

实际上,此代码将起作用:

$response['outputHTML']=include('table-html.php');
Run Code Online (Sandbox Code Playgroud)

如果table-html.php具有以下内容:

<?php
$output = '<table>'.$some_var.'</table>';
return $output;
Run Code Online (Sandbox Code Playgroud)

Maa*_*ese 5

include并且require用于将PHP代码加载到您的应用程序中。

要获取文件的内容并将其存储在变量中,请file_get_contents改用。
请注意,文件的给定路径是相对于输入脚本的。当您的脚本从其他位置包含进来时,这可能会产生意外的结果。要解决此问题,请使用__DIR__魔术常数。

最终代码如下所示:

$response['outputHTML'] = file_get_contents(__DIR__ . '/table-html.php');
Run Code Online (Sandbox Code Playgroud)

如果您想解析PHP

首先,您可能想看看像Twig这样的模板引擎,从而省去了一些麻烦。

如果您想自己执行此操作,则只需更改代码中的唯一内容就是在的末尾返回一个变量table-html.php。我建议使用Heredoc创建易于阅读的模板。

<?php
    return <<<EOT
        <table>
            <tr><td>$firstname</td><td>$lastname</td></tr>
        </table>
    EOT;
Run Code Online (Sandbox Code Playgroud)