For this problem I tend to prefer an autoloader. It's not hard to make a robust script to scan some given files and build a list of classes mapped to files out of them. Here's how I do it:
$classes = array();
//this is the main function, give it a file and it will map any
//classes it finds in the file to the path. How you find the files
//is up to you, only you know your directory structure, but I
//generally set up a few folders that hold my classes, and have
//the script recurse through those passing each file it finds through
//this function
function get_php_classes($file) {
global $classes;
$php_code = file_get_contents($file);
$tokens = token_get_all($php_code);
$count = count($tokens);
//uses phps own parsing to figure out classes
//this has the advantage of being able to find
//multiple classes contained in one file
for ($i = 2; $i < $count; $i++) {
if ( $tokens[$i - 2][0] == T_CLASS
&& $tokens[$i - 1][0] == T_WHITESPACE
&& $tokens[$i][0] == T_STRING) {
$class_name = $tokens[$i][1];
//now we map a class to a file ie 'Autoloader' => 'C:\project\Autoloader.cls.php'
$classes[$class_name] = $file;
}
}
}
$fh = fopen('file_you_want_write_map_to', 'w');
fwrite($fh, serialize($classes));
fclose($fh);
That's the script that generates the file mappings, you run it once anytime you add a new class. Here is the actual application code that can be used to autoload:
class Autoloader {
private $class_map;
public function __construct() {
//you could also move this out of the class and pass it in as a param
$this->class_map = unserialize(file_get_contents($file_you_wrote_to_earlier));
spl_autoload_register(array($this, 'load'));
}
private function load($className) {
//and now that we did all that work in the script, we
//we just look up the name in the map and get the file
//it is found in
include $this->class_map[$className];
}
}
There's a lot more that could be done with this, namely safety checking for various things such as duplicate classes found while building the autoload list, making sure that files exist before trying to include them, etc.