PHP: автозагрузка классов, распределенных между PEAR, в конфликтах между классами 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

Как я могу управлять автозагрузкой классов стилей с именами классов PEAR без пространства имен PSR-0 вызывающего класса?

Мой автозагрузчик способен загружать как PEAR, так и PSR-0 ..

Заранее спасибо!

Solutions Collecting From Web of "PHP: автозагрузка классов, распределенных между PEAR, в конфликтах между классами PSR-0"

Это происходит потому, что вы находитесь в пространстве имен 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); } } 

Попробуй это:

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

Это скажет PHP, чтобы заставить поиск пространства имен \ root на уровне «root», и если ваш автозагрузчик настроен для загрузки как пространств имен, так и обычных классов классов PEAR, он будет работать.