1

对于我的应用程序,我使用 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..

提前致谢!

4

2 回答 2

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);
    }  
}
于 2012-09-12T10:56:07.190 回答
0

尝试这个:

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

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

于 2012-09-12T10:56:44.660 回答