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.
// Edit:
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: Seleziona tutto
public function __call($name, $arguments = '') {
return new $name($arguments);
}
// Edit 2:
Ok ho risolto così:
Codice: Seleziona tutto
<?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.