Казалось, ну какая разница как вы будете хранить свои файлы, в которых расположен ваш код? Ещё во времена php4 код хранился - as is, редко когда видел достойную иерархию - всё вызывалось через require и сродные ему функции. Но постепенно автозагрузка дала повод задуматься. Итак, немного о типах хранения кода вашего приложения.
Вариант 1: As Is или Messup
Происходит это, когда функции автозагрузки не уделяется должного внимания. В итоге в коде виднеются require_once, а сами файлы расположены чёрти как, имена файлов никак не связаны с именами классов, часть каталогов лежит структурировано, часть файлов прям на поверхности. Такое ещё можно найти даже в "opensource" решениях.
Плюсы: думать о расположении файлов не нужно
Минусы: Цепочки вложений начнут переплетаться и путаться, большое приложение будет весьма трудно разобрать по косточкам и найти нужный кусок кода будет просто нереально
Вариант 2: CamelCase
При данном типе структуры все файлы группируются в каталоге по назначению. Вложенность редко доходит до второго уровня. Иерархия выражается в именах файлов, которые записываются в виде CamelCase. Например:
template
TemplateBase.php
SimpleTemplateBase.php
model
ModelBase.php
SimpleModelBase.php
В данном случае имеем 2 основных назначения - template и model. *Base - это базовые файлы, Simple* - производные от базовых.
Плюсы: Структура весьма прозрачна сама по себе, ориентироваться в ней весьма просто. Нет серьёзных ограничений на положение файла - при рефакторинге очень удобно перемещать, т.к. автозагрузка не зависима от положения файла.
Минусы: Автозагрузка для подобной структуры будет непростой. Изначально неизвестно точное расположение файла, поэтому, скорей всего, придётся пробегаться по всем и составлять список для автозагрузки.
Вариант 3: Древовидная (Underscore)
Да да, код можно хранить и в виде дерева. Разделение так же можно реализовать по назначению. Имела файлов - ёмкие и краткие, чего, конечно, не всегда можно сказать про имена классов. Вот вам пример:
Template
Extended
Smarty.php (класс Template_Extended_Smarty)
Php.php (класс Template_Extended_Php)
Base.php (класс Template_Base)
Simple.php (класс Template_Simple)
Model
Extended
Mysql.php (класс Model_Extended_Mysql)
Oracle.php (класс Model_Extended_Oracle)
Base.php (класс Model_Base)
Simple.php (класс Model_Simple)
Путь для класса очень прост - знаки подчёркивания заменяются на слеши
Плюсы: Простейшая автозагрузка. Всё что нужно автозагрузчику - список директорий (имеются в виде те, которые на уровень выше Template и Model в нашем случае). Возможность создавать ёмкие, но понятные иерархии зависимостей. Объединять различные назначения классов в дереве несколько проще
Минусы: Труден в рефакторинге - перемещение файлов весьма тяжёлый процесс как минимум. Иерархия требует внимательно подхода, иначе вы можете сами же себя и запутать. Вложенность может привести к весьма огромным именам классов, с этим тоже нужно быть внимательным.
Но самое главное - используйте ту иерархию, которую вам предлагает фреймворк и всё у вас получится.
Удачных разработок!