在PHP 5.3.0中将视图文件包含在同一名称空间中

时间:2009-09-22 08:32:15

标签: php view namespaces include

我开始在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(),这样就失败了。

你知道怎么做到这一点吗?几乎就是问题标题,在包含发生的同一名称空间中包含一个文件。

请注意,我不需要这个完整代码方案的解决方案,它简化了您理解我的问题。

2 个答案:

答案 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文件放在同一个命名空间中。