Si ammetto che sono stato un po vago. Dunque...il sistema è simile a quello di wordpress o drupal..
I plugin risiedono dentro la cartella plugins e a loro volta dentro un'altra cartella chiamata col nome del plugin. Il sistema verifica ogni volta quali plugin sono presenti all'interno di quella cartella e memorizza nel database le informazioni dei plugin nuovi. Tra le informazioni ci sono appunto il nome del plugin e le sue dipendenze (quindi quello che va ad estendere, se il plugin estende il core non serve specificarlo mentre se estende un altro plugin è obbligatorio specificarlo).
All'interno dei plugin possono essere richiamate due funzioni:
- add_hook che aggiunge un punto di aggancio nel caso in cui altri plugin vogliano estenderlo in quel punto
- add_action che specifica quale hook richiamare e quale funzione all'interno del plugin richiamare per quell'hook
Ora il problema è il seguente: se l'unica cosa che può essere estesa fosse il core allora basterebbe caricare tutti i plugin con un ciclo while dal database. Ma dato che plugin possono estendere altri plugin allora nel caricamento deve esserci un ordine..prima i plugin estesi e poi i plugin che estendono. Si forma quindi un grafo di dipendenze dove solo, diciamo così, i figli sanno chi sono i padri (non i nonni). Qui dovrebbe venirmi in aiuto questo algoritmo che ho citato. Spero di essere stato più chiaro!
[EDIT]: in questo link c'è uno pseudocodice che sembra più chiaro di quello di wikipedia: http://www.patrickdewane.com/2009/03...ical-sort.html