2013-08-06 6 views
1

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

Это то, что я до сих пор ...

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

Нет проблем до сих пор, создается объект ...

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

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

Что привело меня туда, где я нахожусь this post.

ответ

2

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

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

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(); 

EDIT:

Это работает для меня. Следующий код находится в C:\xampp\htdocs\horde\index.php. Орда lib находится в подпапке 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>'; 
+0

Большое спасибо redreggae !!! Это сделало мой день! –

+0

За исключением того, что это не сработало, мое плохое! Когда я 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] => строка (21) "/ usr/share/pear/Horde"}} ["_callbacks": "Horde_Autoloader": private] => array (0) {}} –

+0

Нужно ли мне вызвать loadClass? –