我正在尝试在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>
答案 0 :(得分:3)
包含的文件在包含它的函数范围内进行评估。 print_table
在范围内有变量$people
。 get_template
没有,因为您没有将变量传递给get_template
;它的范围只有$template_name
变量。
答案 1 :(得分:1)
$people
是函数print_table()
的参数,这就是print_table()
包含的文件中可用的参数。
但它在get_template()
函数包含的文件中不可用,因为在get_template()
函数的上下文中没有定义名为$people
的变量。
答案 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]);
}