Chcę uzyskać dynamiczny system hooków (między innymi).
Kontroler zawiera metodę którą są załączane pozostałe klasy powiększające funkcjonalność (db layer, cache, config manager - to od ustawień w pliku np. do sql, zarządzanie userami itd.).
Instancje poszczególnych klas są tworzone i trzymane w zmiennej obiektu kontrolera (w tablicy). Metoda __call() jest tak napisana, by metody poszczególnych (pod)obiektów mogły imitować metody klasy kontrolera.
Np., jeśli chciało by się odwołać do metody obiektu "sql", do metody "query" należy wtedy albo odwołać się w sposób:
$this->chilldClass['sql']->query("zapytanie");
lub też w następujący sposób:
$this->sql_query("zapytanie");
Czyli: $this->[nazwa_obiektu]_[metoda_obiektu]($parametr)
Ponadto odnośnie systemu hooków, jeśli przed nazwą klasy [nazwa_obiektu] czy też przed nazwą metody samego kontrolera wpiszemy hooked_
Czyli
$this->hooked_sql_query();
albo
$this->hooked_[nazwa_metody_kontrolera]();
Zostaną wywołane modyfikatory hooku (o ile takowy dla danej metody istnieje) w zależności czy ma być przed czy po metodzie (prefiksy _after i _before w nazwach meted hooka, bo hooki to obiekty zawierające grupy metod - rozszerzeń poszczególnych metod. Przyjmują i zwracają parametry hookowanej metody).
To, co chcę osiągnąć to możliwość callbacku wywołanej metody obiektu-"dziecka" do kontrolera (bo poprzez kontroler są wywoływane metody i kontrolera i pozostałych obiektów).
Np. Chciałbym by obiekt sql mógł swobodnie odwoływać się do obiektu np. cache lub obiekt user do obiektu sql.
Ale by tak było można muszę albo używać funkcji call_user_func_array (piszę z głowy, nie irytować się jeśli źle napisałem nazwę funkcji), albo wpisywać "global $main" (main, nazwa kontrolera) by podobiekt-dziecko miał dostęp do kontrolera czyli był możliwy callback umożliwiający tak jak już zobrazowałem dostęp np. obiektu "user" do obiektu "sql" poprzez kontroler.
To co chcę uzyskać to jakiś zautomatyzowany sposób by nie musieć się martwić czy obiekt-dziecko ma dostęp do callbacku, w przeciwnym razie każdy obiekt musi zawierać albo metodę __call() umożliwiającą callback np. $this->main_[metoda_kontrolera]() z poziomu metody obiektu dziecka...