Poniższe podejście opiera się wyłącznie na położeniu plików, nie używa się żadnych przestrzeni nazw.
define('DOCROOT', realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR);
function autoload($class, $directory = 'classes')
{
$file = str_replace('_', DIRECTORY_SEPARATOR, $class) . '.php';
if ($path = DOCROOT . $directory . DIRECTORY_SEPARATOR . $file)
{
require $path;
return TRUE;
}
return FALSE;
}
spl_autoload_register('autoload');
$model = new Model_User();
$view = new View();
$controller = new Controller_User($model, $view);
echo $controller->action_show();
Opiera się również o następujące założenia:
1 Przy założeniu że jest projekt w katalogu o jakiejś tam nazwie testmvc, ten właśnie index.php będzie w tym katalogu, natomiast wszystkie klasy będą w podkatalogu classes który to jest z małych liter
2. Wszystkie klasy w tym podkatalogu classes mogą być w podkatalogach, natomiast przy tym podejściu rozróżniane są duże i małe litery w nazwach plików klas i podkatalogów, więc trzeba się pilnować
3. Klasy kontrolerów muszą się znajdować w katalogu classes/Controller, modele w katalogu classes/Model, zaś wszystkie helpery np. DB.php, View.php które to mają klasy o nazwach DB, View muszą być w katalogu classes
Czyli zasada jest taka:
Klasa o nazwie Controller_User musi być w pliku classes/Controller/User.php
Klasa o nazwie Model_User w położeniu** classes/Model/User.php**
Klasa View w położeniu classes/View.php
Czyli widać jak na dłoni, że nazwy klas mają w sobie nazwy katalogów, w których się znajdują a ostatnia część nazwy to nazwa plików w których jest ich kod i tutaj jako separator nazw klas jest znak podkreślenia, katalogi Controller oraz Model i odpowiednio pliki User.php i User.php zaczynają się z dużych liter to i w nazwach klas ma też tak być. Na bazie nazwy klasy szukane jest położenie pliku php, znaki podkreślenia są zamieniane na ukośnik, co też jest w tej funkcji autoload.
To jest jedno z możliwych podejść, niektóre framreworki właśnie na takim podejściu się opierają, tzn. nie używa się przestrzeni nazw jak w Symfony czy Laravelu ale to już inna sprawa. Czy to jest bonusem czy też nie to już nie mnie to oceniać.