Автозагрузчик Орды - Как пользоваться?

Я новичок в автозагрузке в PHP, и у меня есть требование для Horde_Text_Diff в моем последнем проекте. Я использую Horde_Autoloader для автоматической загрузки необходимых файлов, однако я использую его неправильно. Насколько я могу гуглить, в Интернете нет ни одного примера того, как это сделать на самом деле. Я почти на 100% узнаю из примера, поэтому здесь я столкнулся с препятствием.

Это то, что у меня пока...

require_once( Horder/Autoloader.php );
$autoloader = new Horde_Autoloader();

Пока проблем нет, объект создан...

$text_diff = $autoloader->loadClass( 'Hoard_Text_Diff' );

Это не работает, поскольку я просто догадываюсь здесь.

То, что привело меня туда, где я сейчас, было этот пост.


person James Huckabone    schedule 06.08.2013    source источник


Ответы (1)


Я просмотрел исходный код по адресу https://github.com/dereuromark/tools/tree/master/Vendor/Horde.

К Horde_Autoloader не подключен картограф, и вы используете его неправильно. Автозагрузчику необходимо добавить classPathMapper. В каталоге Horde / Autoloader / ClassPathMapper есть разные classPathMappers.

require_once 'Horde/Autoloader.php';
require_once 'Horde/Autoloader/ClassPathMapper.php';
require_once 'Horde/Autoloader/ClassPathMapper/Default.php';

$autoloader = new Horde_Autoloader();
$autoloader->addClassPathMapper(new Horde_Autoloader_ClassPathMapper_Default(__DIR__.'PATH_TO_HORDE_FOLDER'));
$autoloader->registerAutoloader();

// if path is correct autoloader should work
$diff = new Horde_Text_Diff();

Существует также автозагрузчик по умолчанию, который автоматически регистрирует все пути из вашего include_path. Это может быть немного накладно!

// set the current path to your include_path
set_include_path(__DIR__.'PATH_TO_HORDE_FOLDER');

// if you require the default autoloader it will get initialized automatically
require_once 'Horde/Autoloader/Default.php';

// use the lib
$diff = new Horde_Text_Diff();

РЕДАКТИРОВАТЬ:

Меня устраивает. Следующий код находится в C:\xampp\htdocs\horde\index.php. Библиотека Horde находится в подпапке lib.

// this file:
// C:\xampp\htdocs\horde\index.php

// horde folder structure
// C:\xampp\htdocs\horde\lib\Horde\Autoloader
// C:\xampp\htdocs\horde\lib\Horde\Text

require_once __DIR__.'/lib/Horde/Autoloader.php';
require_once __DIR__.'/lib/Horde/Autoloader/ClassPathMapper.php';
require_once __DIR__.'/lib/Horde/Autoloader/ClassPathMapper/Default.php';

$autoloader = new Horde_Autoloader();
$autoloader->addClassPathMapper(new Horde_Autoloader_ClassPathMapper_Default(__DIR__.'/lib'));
$autoloader->registerAutoloader();

$compare = array(
    array(
        'foo',
        'bar',
        'foobar'
    ),
    array(
        'foo',
        'bar',
        'foobaz'
    ),
);

$diff = new Horde_Text_Diff('auto', $compare);

echo '<pre>';
print_r($diff->getDiff());
echo '</pre>';
person bitWorking    schedule 06.08.2013
comment
За исключением того, что это не сработало, мой плохой! Когда я var_dump $autoload, он показывает следующее: object(Horde_Autoloader)#3 (2) { [_mappers:Horde_Autoloader:private]=› array(1) { [0]=› object(Horde_Autoloader_ClassPathMapper_Default)#2 (1) { [_includePath:Horde_Autoloader_ClassPathMapper_Default:private]=›string(21) /usr/share/pear/Horde } } [_callbacks:Horde_Autoloader:private]=› array(0) { } } - person James Huckabone; 07.08.2013
comment
Нужно ли вызывать loadClass? - person James Huckabone; 07.08.2013
comment
Нет. Предполагается, что автозагрузчик позволяет вам просто использовать любой класс, который вам нужен, НЕ вызывая явно код, который загружает класс. Таким ненужным кодом является как любой вызов метода, загружающего класс, так и require(). - person Sven; 07.08.2013
comment
@JamesHuckabone, var_dump выглядит хорошо. получаете ли вы какие-либо ошибки (включите error_reporting) при попытке использовать Horde_Text_Diff. Также вы пробовали оба примера, которые я разместил? - person bitWorking; 07.08.2013
comment
Да, я пробовал оба варианта, но Horde_Text_Diff не был найден на обоих. - person James Huckabone; 07.08.2013
comment
@JamesHuckabone, тогда путь кажется неправильным. попробуйте добавить путь /usr/share/pear, а не /usr/share/pear/Horde. - person bitWorking; 07.08.2013
comment
Когда я меняю путь, не найденным классом является Horde_Text_Diff_Engine_... мне нужно добавить другой путь или что-то в этом роде? - person James Huckabone; 07.08.2013
comment
После еще нескольких попыток я наконец понял, что это проблема с разрешениями. Автозагрузчик установлен с классными разрешениями, а текстовый diff - нет. Теперь это работает! Спасибо еще раз!!! - person James Huckabone; 08.08.2013