Piszę swój własny mini-framework (wiem, wiem, głupota:))
Mimo, że ma być mini-mini, to chciałbym by był zgodny z najnowszymi trendami.
Aktualnie analizuję Laravel, który robi furrorę od jakichś dwóch lat.
I w nim nie rozumiem jednej rzeczy. Podobnie jak i tam, chciałbym aby dostęp do klas frameworka był jak najprostszy, czyli, mimo używania namespaców, by do tych podstawowych klas (jak App, Input, Form) dostęp był jedynie poprzez użycie samej nazwy klasy, np:
$x=new Form();
Laravel to osiągnął. Po długiej analizie, widzę, że robi to poprzez funkcję php class_alias, np. mamy taki array w configu aplikacji:
'aliases' => [ 'App' => 'Illuminate\Support\Facades\App', 'Artisan' => 'Illuminate\Support\Facades\Artisan', 'Auth' => 'Illuminate\Support\Facades\Auth', (...)
I ten array jest użyty do zbudowania aliasów.
Klasa 'App' zaczyna się w ten sposób:
namespace Illuminate\Support\Facades; /** * @see \Illuminate\Foundation\Application */ class App extends Facade { (...)
I teraz to do czego nie mogę dojść, to to, że przecież ta klasa mieści się w katalogu:
vendor\laravel\framework\src\Illuminate\Support\Facades\App.php
Czyli katalog jest inny, niż wskazywałby na to namespace.
W jaki sposób to działa, że mimo wszystko jest załadowana właściwa klasa? Analiza całego kodu chyba mi z tydzień zajmie, a może ktoś wie... Szukałem w całym projekcie funkcji __autoload oraz spl_autoload_register ale to wszystko jest strasznie zawiłe.