One bad thing about using the autoloader is, that it doesn’t know where to look at. My framework already has about 70 classes in about 15 different directories. Because of that, I didn’t go for autoload, but instead struggle around with generating paths. So I have an associative paths array that give me paths from my root file to where I want to go. It works, but it’s really becoming a pain.
First, the user of my framework will very likely have no big idea where a class resides. So creating a FormViewController is already a pain just because you need the path to include it.
For the beginning, I think it would be just fine if PHP had to “search” for the file through multiple directories when it wants to autoload it. So what? Shall PHP do so and save us a lot of pain. But how could I do that most efficently?
Ther’s an array called $paths which I get out of a global context object. The paths could be defined in the array in the most reasonable order: Starting with the most frequently used paths.
I know the PEAR library has a funny naming convention like system_views_specialviews_SpecialView.php which gets converted in the Autoloader to system/views/specialviews/SpecialView.php …but honestly, that’s horrible. Don’t want to mess up my file names like this. For the developer who creates his own classes that would suck just straight away.
Before I re-invent the wheel for this task, maybe someone knows a solution for this?
NB: I’m presuming you’re creating your own custom autoloader via spl_autoload_register, etc.
If you’re creating an autoloader and the classes you’re looking to include are spread across 15 different directories, I don’t see how you can hope to avoid using some form of class name to directory path mapping, although this obviously doesn’t need to be quite as deep as the example you quote.
At a simple level, if you keep all of your system libraries in a single area, then a quick case match as such…
…should be reasonably efficient approach, although it obviously depends on how many paths you need to manually check.
Additionally, I presume you’re checking for the existance of the class prior to attempting to autoload? (i.e.: You’re doing a class_exists($className) to ensure it’s not already been included.) Then again, the requirement for this depends on how often you re-use objects.