在PHP5.3.0中包含同一名称空间中的视图文件
我开始在PHP5.3.0上为static关键字开发某种mvc框架,但既然我在这里,我就说我也应该利用名称空间 所以我有这样的观点:在PHP5.3.0中包含同一名称空间中的视图文件,php,view,namespaces,include,Php,View,Namespaces,Include,我开始在PHP5.3.0上为static关键字开发某种mvc框架,但既然我在这里,我就说我也应该利用名称空间 所以我有这样的观点: namespace view { function load($filepath) { include($filepath); } function helper() { echo 'lorem ipsum'; } } view\load('view.php'); 现在让我们假设my
namespace view
{
function load($filepath)
{
include($filepath);
}
function helper()
{
echo 'lorem ipsum';
}
}
view\load('view.php');
现在让我们假设my view.php如下所示:
<?= helper() ?>
namespace view {
class Template {
public function load($filepath) {
include($filepath);
}
function helper(){
echo 'lorem ipsum';
}
}
$a = new Template();
$a->load('test.php');
}
它不起作用,因为包含的文件出于某种原因位于全局名称空间中,所以我不得不在视图中编写view\helper(),这有点违背了目的
你知道如何做到这一点吗?问题的标题是,在同一名称空间中包含一个文件,在该名称空间中进行包含
请注意,我不需要针对这个确切的代码场景的解决方案,为了让您理解我的问题,它被简化了。我必须承认我还没有详细研究过PHP的名称空间特性,但我认为这是不可能的。
included()
文件将位于全局命名空间中,除非您声明view.php
位于同一命名空间中:
namespace view;
helper(); // works
请注意,使用use view\helper导入helper
代码>仅导入类名和其他名称空间的作品
编辑:从函数中调用include()
仍会将当前作用域导出到包含的文件中,因此您可以执行以下操作:
<?= helper() ?>
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();
我将实现自动加载类,而不是使用“load”方法加载它们。我也不明白为什么不能将所有view.php文件放在同一个名称空间中