模板中的变量未定义

时间:2018-03-16 09:40:56

标签: php

我正在尝试在print_table()函数中加载模板。如果我取消注释上面的include_once代码,它将起作用。为什么? get_template function完全相同。就像现在一样,它说$ people是未定义的。

function get_template( $template_name ) {
include_once __DIR__ . DIRECTORY_SEPARATOR . $template_name;
}

function print_table( $people ) {
// include_once __DIR__ . DIRECTORY_SEPARATOR . 'html/table.php';
get_template( 'html/table.php' );
}

在html / table.php中

<table>
<tr>
    <th>Name</th>
    <th>Author</th>
    <th>Date</th>
</tr>
<?php dd($people); ?>
</table>

3 个答案:

答案 0 :(得分:3)

包含的文件在包含它的函数范围内进行评估。 print_table在范围内有变量$peopleget_template没有,因为您没有将变量传递给get_template;它的范围只有$template_name变量。

另见https://stackoverflow.com/a/16959577/476

答案 1 :(得分:1)

$people是函数print_table()的参数,这就是print_table()包含的文件中可用的参数。

但它在get_template()函数包含的文件中不可用,因为在get_template()函数的上下文中没有定义名为$people的变量。

了解variable scope

答案 2 :(得分:1)

这是因为范围可变。您的函数$people中未定义get_template()(在其他答案中也有说明)。

可重复使用,您还可以传递包含所有变量的关联数组,并使用extract()将它们用作模板中的变量:

function get_template($template_name, $data) {
    extract($data);
    include_once __DIR__ . DIRECTORY_SEPARATOR . $template_name;
}

function print_table($people) {
    get_template('html/table.php', ['people'=>$people]);
}