Hola a todos,
volevo eliminare un eval che attualmente utilizzo per instanziare classi (componenti del framework). Il problema è che il numero di parametri che passo alle classi (componenti) varia da classe a classe (ovviamente direi)
Il codice con eval che uso è qualcosa tipo:
Utilizzo PHP5, quindi evenuali oggetti sono passati di default per riferimento, e quindi questo sistema non mi consuma memoria inutilmente (troppa memoria inutilmente), però comunque un eval cosi rallenta e non permette il caching correttamente del codice ad APC/eAccelerator e simili.codice:$parametersToEvalParts = array(); foreach($Parameters as $key => $value) { $parametersToEvalParts[] = "\$Parameters[{$key}]"; } // Esegue il codice PHP tramite eval ed acquisisce il componente eval("\$componentObject = new {$componentName}(" . implode(', ', $parametersToEvalParts) . ");");
Sono passato quindi ad usare la reflection (la classe ReflectionClass ed il metodo newInstanceArgs che è più veloce di un buon 50%/60% e consuma quasi la metà della memoria) però comunque la reflection è lenta!
Il codice con la reflection è
Qualche suggerimento per metter su un sistema un pò più veloce lo avete?codice:// Instanzia la classe ReflectionClass per gestire l'instanziazione // del componente $componentObjectRC = new ReflectionClass($componentName); // Instanzia l'oggetto $componentObject = $componentObjectRC->newInstanceArgs($Parameters); // Libera la memoria unset($componentObjectRC);![]()

Rispondi quotando