Provo a spiegarmi meglio:
Io voglio accedere alle classi figlie dalla classe padre utilizzando i metodi settati nella classe figlia.
p.s. io teoricamente non so quali sono le classi figlie.
esempio:
$cache = new CacheFile();
$cache->CacheFileLang->store($arrayLingua); // nella classe CacheFileLang è definita la $cache_path = '/cache/language/'
$cache->CacheFileDB->store($arrayFetchSQL); // nella classe CacheFileLang è definita la $cache_path = '/cache/db/'
però il metodo store è presente solo nella classe padre, che ovviamente la classe figlia erediterà.
Questo mi permette di aggiungere infinite classi per dati di store differenti e volendo anche cambiare totalmente l'architettura un domani (tipo fare lo store nel database):
$cache->CacheSQLDB->store($arrayFetchSQL);
senza modificare una riga di codice se non quella che inizializza la classe la prima volta.
Ipotizzo che posso utilizzare __call, ma non mi faceva impazzire come idea, volevo trovare una soluzione differente, altrimenti mi metto l'anima in pace e faccio:
Codice PHP:
<?php
namespace cache;
class CacheFile extends CacheBuilder implements ICacheFile {
static private $classes = [];
public function store($key, $data, $expiration = 0) {
}
public function buildFileName($cacheFile) {
}
public function __call($name, $arguments = '') {
return self::$classes[$name]?: (self::$classes[$name] = new $name($arguments));
}
// ...
}
Anche se call non mi fa impazzire, così se mai vorrò cambiare metodo di caching dovrò modificare solo una righa di codice in futuro con la nuova classe aggiunta.
Quindi teoricamente ho risolto, se avete soluzioni migliori fatemi sapere, grazie