Это зависит от того, что именно вы пытаетесь достичь.
Если вы хотите иметь настраиваемое отображение между файлами и каталогами, в которых они находятся, вам нужно разработать абстракцию пути и реализовать некоторые функции загрузчика для работы с этим. Я сделаю пример.
Допустим, мы будем использовать нотацию типа Core.Controls.Control
для ссылки на (физический) файл Control.php
, который будет найден в (логическом) каталоге Core.Controls
. Нам нужно сделать реализацию из двух частей:
- Сообщите нашему загрузчику, что
Core.Controls
сопоставлен с физическим каталогом /controls
.
- Поиск
Control.php
в этом каталоге.
Итак, вот начало:
class Loader {
private static $dirMap = array();
public static function Register($virtual, $physical) {
self::$dirMap[$virtual] = $physical;
}
public static function Include($file) {
$pos = strrpos($file, '.');
if ($pos === false) {
die('Error: expected at least one dot.');
}
$path = substr($file, 0, $pos);
$file = substr($file, $pos + 1);
if (!isset(self::$dirMap[$path])) {
die('Unknown virtual directory: '.$path);
}
include (self::$dirMap[$path].'/'.$file.'.php');
}
}
Вы бы использовали загрузчик так:
// This will probably be done on application startup.
// We need to use an absolute path here, but this is not hard to get with
// e.g. dirname(_FILE_) from your setup script or some such.
// Hardcoded for the example.
Loader::Register('Core.Controls', '/controls');
// And then at some other point:
Loader::Include('Core.Controls.Control');
Конечно, этот пример - это минимум, который делает что-то полезное, но вы можете видеть, что он позволяет вам делать.
Извиняюсь, если я допустил небольшие ошибки, я набираю это на ходу. :)