Как правильно ссылаться на подкласс пакета PHP при использовании Composer?
У меня есть приложение, работающее в CakePHP 3, и я установил свои пакеты через Composer.
Совсем недавно я добавил:phpspec/php-diff
(https://packagist.org/packages/phpspec/php-diff ) и побежал composer update
. Он поместил файлы, как и ожидалось, в vendor/phpspec/php-diff/
Я могу создать экземпляр класса в одном из моих контроллеров CakePHP следующим образом:
// src/Controller/UrlsController.php
// ...
use Diff;
public function test()
{
$diff = new Diff(foo, bar);
// This works
}
Однако документация для этого пакета дает это в качестве примера на https://github.com/chrisboulton/php-diff/blob/master/example/example.php#L43 , который приходит после создания экземпляра Diff
(как это сделано в test()
выше).
require_once dirname(__FILE__).'/../lib/Diff/Renderer/Html/Inline.php';
$renderer = new Diff_Renderer_Html_Inline;
echo $diff->render($renderer);
Очевидно, что утверждение require_once
не работает, потому что это не то место, где Inline.php
живет в иерархии композиторов.
Так как же вы создаете экземпляр new Diff_Renderer_Html_Inline
? Если я просто использую его так, то он ошибается, говоря
класс 'AppControllerDiff_render_html_inline' не найден
Еще один обходной путь I мысль может быть, чтобы изменить путь в require_once
, так что он указывает на его местоположение в vendor/
. Но, конечно же, есть лучшее решение?
1 ответ:
Если вы пытаетесь ссылаться на класс из другого пространства имен, вам нужно ссылаться на него, используя его полное имя, например
new \Diff_Renderer_Html_Inline;
Или добавьте
use Diff_Renderer_Html_Inline
после объявления пространства имен, чтобы иметь возможность сделать :new Diff_Renderer_Html_Inline