【问题标题】:Horde Autoloader - How to use?Horde Autoloader - 如何使用?
【发布时间】:2013-08-06 22:29:01
【问题描述】:

我是 PHP 自动加载的新手,并且在我的最新项目中需要 Horde_Text_Diff。我正在使用 Horde_Autoloader 自动加载所需的文件,但是,我没有正确使用它。据我所知,互联网上没有一个如何实际操作的示例。我几乎 100% 从示例中学习,所以我在这里遇到了障碍。

这就是我目前所拥有的......

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

到目前为止没问题,对象就创建好了……

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

这行不通,因为我只是在这里猜测。

this post.

【问题讨论】:

    标签: php autoloader horde


    【解决方案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 中。部落库位于子文件夹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>';
    

    【讨论】:

    • 除非它不起作用,我的坏!当我 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]=> 数组(0) { } }
    • 我需要调用 loadClass 吗?
    • 没有。自动加载器应该允许您通过不显式调用加载类的代码来简单地使用您需要的任何类。这种不必要的代码既是对加载类的方法的任何调用,也是require()
    • @JamesHuckabone var_dump 看起来不错。如果您尝试使用Horde_Text_Diff,您是否会收到任何错误(打开error_reporting)。您是否也尝试过我发布的两个示例?
    • 是的,我都试过了,但都没有找到“Horde_Text_Diff”。
    猜你喜欢
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    相关资源
    最近更新 更多