spl_autolload的动态路径


Dynamic path to spl_autoload

目前,我正在递归地查看我的classes文件夹,以便找到我的类的路径,以便包含它。问题是,我有许多不同的类在不同的文件夹,我想包括。我所创建的代码是混乱的,但它工作。

下面的代码不是我创建的递归函数,但它将为myAutoloader()函数中定义的路径工作。

在PHP中是否有传递spl_autolload函数的路径?

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

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

function myAutoloader($className) {
    $paths = array(
    'Class1' => '/subpath',
    'Class2' => '/subpath/extra',
    );
    include $paths[$className] . '/'. $className . '.php';
}

也就是说,我强烈建议您采用这种方法。相反,我建议你:

  • composer创建您的自动加载,而不是手动完成。
  • 花10分钟阅读PSR-4规格。

如果你的类"MyClass1"是用文件名"MyClass1.php"存储的,你可以这样做:

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