Mam drobne pytanie, bo albo już jestem przemęczony, albo nie wiem.
Co chcę osiągnąć:
Chcę utworzyć obiekt klasy, do której będę się odwoływać, natomiast nie będę odwoływał się tak naprawdę bezpośrednio do niej, tylko do jej adaptera, który jest ustalany na podstawie konfiguracji.
Przykładowo klasa Cache, posiada możliwe 3 adaptery: file, apc lub memcached, wybrany w konfiguracji jest apc, chciałbym teraz móc zrobić tak:
Cytat
Uwaga: Nie chcę robić przykładowo Cache::getInstance(), aby otrzymać obiekt adaptera, chcę działać na obiekcie klasy Cache.
<?php // Wybrany w konfiguracji apc $cache = new Cache(); $cache->store(); // Skutkuje wywołaniem metody store w adapterze APC // Zmieniam sobie konfigurację na file $cache = new Cache(); $cache->store(); // Skutkuje wywołaniem metody store w adapterze File
Każda klasa adaptera rzecz jasna implementuje interfejs, więc zbiór ich metod jest taki sam
Moje rozwiązanie:
Rozwiązałem to zagadnienie używając metody magicznej __call, która uruchomi się wtedy gdy danej metody nie ma w klasie Cache, wtedy ta metoda jest wykonywana z wybranego adaptera.
Moje pytanie
Czy jest jakiś lepszy sposób na osiągnięcie opisanego przeze mnie efektu ?
Pozdrawiam i dzięki za sugestie.