我开始在PHP5.3.0上为static关键字开发一种mvc framweork,但是因为我在这里,我说我也应该利用名称空间。
所以我对这个视图有这样的东西:
namespace view
{
function load($filepath)
{
include($filepath);
}
function helper()
{
echo 'lorem ipsum';
}
}
view\load('view.php');
现在让我们说我的view.php看起来像这样:
<?= helper() ?>
它不起作用,因为包含的文件是由于某种原因在全局命名空间中,所以我不得不在视图中编写view \ helper(),这样就失败了。
你知道怎么做到这一点吗?几乎就是问题标题,在包含发生的同一名称空间中包含一个文件。
请注意,我不需要这个完整代码方案的解决方案,它简化了您理解我的问题。
答案 0 :(得分:3)
我必须承认我还没有详细研究PHP的命名空间功能,但我不相信这是可能的。除非您声明included()
位于同一名称空间中,否则view.php
文件将位于全局名称空间中:
namespace view;
helper(); // works
请注意,使用helper
is not possible either导入use view\helper;
只能导入类名和其他名称空间。
编辑:在函数中调用include()
仍会将当前范围导出到包含的文件中,因此您可以执行以下操作:
namespace view {
class Template {
public function load($filepath) {
include($filepath);
}
function helper(){
echo 'lorem ipsum';
}
}
$a = new Template();
$a->load('test.php');
}
view.php
:
$this->helper();
答案 1 :(得分:0)
我实现了自动加载类,而不是使用“load”方法加载它们。另外,我不明白为什么你不能将所有view.php文件放在同一个命名空间中。