使用自定义render函数渲染页面时无法访问PHP变量是什么原因
问题原因与解决方法
根本原因
该问题确实是render函数的局部作用域导致的:
- PHP的函数拥有独立的局部作用域,默认情况下全局作用域的变量无法直接在函数内部访问。你在crew.php全局下定义的
$today没有传入render函数,所以render的局部作用域里根本不存在这个变量。 require确实是把目标脚本的代码插入到当前执行位置,但插入的代码会继承当前位置的作用域——也就是render函数的局部作用域,不是crew.php的全局作用域。- 你调用
render时传入的$values是空数组,执行extract($values)后不会生成$today变量,因此模板里自然访问不到。
修复方案
最规范的处理方式是把需要在模板中使用的变量放入$values数组传递,修改crew.php代码即可:
<?php require('../includes/config.php'); $values = []; $today = new DateTime(); // 键名对应模板中要使用的变量名 $values['today'] = $today; render('crew_form.php', $values); ?>
执行后render函数内的extract会把$values数组的键转为局部变量,模板就能正常读取$today了。
另有不推荐的写法:在
render函数内部添加global $today引入全局变量,但该写法会让render函数和全局变量强绑定,复用性极差,不建议使用。
内容的提问来源于stack exchange,提问作者DCR
相关产品推荐
相关产品推荐

