目前,我正在递归地查看我的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();