spl_autoload的动态路径

时间:2015-06-05 21:26:11

标签: php

目前我正在递归查看我的类文件夹,以便找到我的类的路径以包含它。问题是,我想在各种不同的文件夹中包含许多不同的类。我创建的代码很乱,但它有效。

下面的代码不是我创建的递归函数,但它适用于myAutoloader()函数中定义的路径。

有没有办法在PHP中传递一个到spl_autoload函数的路径?

    spl_autoload_register('myAutoloader');

    function myAutoloader($className) {
        $path = '/classes';

        include $path . $className . '.php';
    }

    //-------------------------------------

    // this one will work, as its path is specified in spl_autoload
    $myClass1 = new MyClass1(); 

    //this is located in /classes/other so it wont work
    $myClass2 = new MyClass2(); 

2 个答案:

答案 0 :(得分:1)

无法将路径传递给spl_autoload_register中指定的回调函数 您只能在函数中创建此感知:

function myAutoloader($className) {

    $paths = array(
    'Class1' => '/subpath',
    'Class2' => '/subpath/extra',
    );

    include $paths[$className] . '/'. $className . '.php';
}

那就是说,我强烈反对你采取这种做法。相反,我真的建议你:

答案 1 :(得分:1)

如果您的班级“MyClass1”以“MyClass1.php”等文件名存储,您可以这样做:

set_include_path('/classes:/classes/other');
spl_autoload_register();