Il problema
Mi trovo regolarmente a scrivere lo stesso codice più e più volte.
Ad esempio, se voglio un valore da una struttura di array nidificata, finisco per scrivere qualcosa del tipo:
$config = function_to_get_nested_array();
$node = $config;
foreach(array('vendor','product','config','leave') as $index => $key){
if(! isset($node[$key])){
//throw exception
}
$node = $node[$key];
}
Preferirei avere qualcosa di simile
$config = function_to_get_nested_array();
$node = get_node($config, 'vendor/product/config/leave');
Ma come posso implementarlo?
Soluzioni possibili
-
Potrei implementare una funzione come ho fatto sopra. MA i miei pacchetti fanno molto affidamento sull'autoloading e sono puramente OO. In questo momento devo solo clonare un sottomodulo nella directory giusta e tutto funziona bene.
-
Potrei implementarlo dove ne ho bisogno. MA significa che devo implementarlo innumerevoli volte in progetti indipendenti.
-
Potrei usare un tratto , se non fossi bloccato con PHP 5.3 . Non un'opzione per me.
-
Potrei implementare un fornitore di servizi statici.
Per vari motivi le classi e i metodi statici sono di solito una scelta sbagliata, ma sono tentato per farlo in questo caso.
use vendor\product\helpers\ArrayTree as Tree
...
$config = function_to_get_nested_array();
$node = Tree::getNode($config, 'vendor/product/config/leave');
Sembra molto allettante, perché supporta l'autoloading e gli spazi dei nomi.
La domanda
Esiste una soluzione migliore per implementare questo tipo di funzioni di supporto?