PHP:自动加载PSR-0命名空间类中的PEAR命名空间类冲突

时间:2012-09-12 10:53:41

标签: php namespaces pear autoloader psr-0

对于我的应用程序,我使用的是PSR-0命名空间。一切都很美好!

在我想使用Twig作为模板解析器之前,Twig使用PEAR伪命名空间。像Twig_Loader_Filesystem一样。

问题在于,当我想在我的名称间隔应用程序中使用Twig时:

<?php
namespace Tact\ViewManager;

class ViewManager {

    public function init()
    {
        $loader = new Twig_Loader_Filesystem($this->templatepath);
        $this->twig = new Twig_Environment($loader);
    }  
}
?>

PHP会告诉我的自动加载器查找名为Tact\ViewManager\Twig_Loader_Filesystem

的类

如何在没有调用类的PSR-0命名空间的情况下设置自动加载PEAR名称间隔样式类?

我的自动加载器能够加载PEAR和PSR-0 ..

提前致谢!

2 个答案:

答案 0 :(得分:2)

这是因为您位于Tact\ViewManager命名空间中。 伪命名空类实际上在全局命名空间中, 所以你应该在\前面加上它们来称呼它们:

$loader = new \Twig_Loader_Filesystem($this->templatepath);

如果\前缀有问题,你可以这样做:

namespace Tact\ViewManager;

use Twig_Loader_Filesystem;
use Twig_Environment;

class ViewManager {
    public function init()
    {
        $loader = new Twig_Loader_Filesystem($this->templatepath);
        $this->twig = new Twig_Environment($loader);
    }  
}

答案 1 :(得分:0)

试试这个:

    $loader = new \Twig_Loader_Filesystem($this->templatepath);
    $this->twig = new \Twig_Environment($loader);

这将告诉PHP在“root”级别强制命名空间\类查找,如果您的自动加载器设置为加载命名空间和常规PEAR约定类名,它将起作用。