Attualmente ho un'applicazione abbastanza grande scritta interamente con PHP procedurale. Sto cercando di migliorare la mia esperienza di PHP e ricodificare la maggior parte della mia applicazione utilizzando tecniche orientate agli oggetti.Conversione di PHP procedurale in PHP orientato agli oggetti
Ci sono molte aree in cui OOP può aiutare a ridurre la quantità di codice e renderlo più facile da leggere. Tuttavia, ho alcune domande.
1) È a mia conoscenza che una classe viene utilizzata come progetto per qualsiasi numero di oggetti, ma una classe rappresenta solo un oggetto, mai più di uno. Quindi una classe potrebbe rappresentare un giocatore, ma mai più giocatori.
2) Dal momento che avrà un bel paio di classi diverse per includere, devo usare una classe "Loader" per caricare tutti loro utilizzando spl_autoload_register
o faccio uso solo spl_autoload_register
nelle file di programma per la mia applicazione?
Edit: Quindi il mio caricatore automatico sarebbe una classe che ho poi creare un'istanza per avviare il caricamento automatico o semplicemente un file PHP con la funzione e l'spl_autoload_register che vorrei includere per evitare di ripetere lo stesso codice in più file ?
3) Alcune delle mie classi dipendono da altre classi. Non l'ho mai incontrato prima, quindi sinceramente non conosco la risposta. Se includo tutte le classi nel mio file di programma principale, ma la classe del mio lettore non è non include la classe che deve funzionare, la classe del giocatore funzionerà poiché il programma principale ha incluso la classe da quale giocatore dipende?
Edit: Quindi, anche se una classe può istanziare un oggetto di tipo Player, e la classe Player non è direttamente incluso da questa classe, che continuerà a funzionare perché la classe controller non comprende la classe Player?
4) Ci sono diversi casi in cui dovrò lavorare sugli oggetti che sto creando. Mi chiedo come dovrei farlo. Ad esempio, nella mia lezione di giocatore, a volte ho bisogno di inviare qualcosa da un giocatore all'altro giocatore. Quindi, devo implementare un metodo statico nella classe Player che prende due giocatori come parametri e fa il trasferimento o faccio qualcos'altro?
Modifica: Ok, quindi evitare i metodi statici. Ora ho un problema serio: ho metodi che vengono eseguiti più volte nella mia applicazione, ma non li posso implementare come metodi statici. Dovrei implementarli come metodi di istanza? Ad esempio, l'invio da un giocatore all'altro. Vorrei creare un metodo di istanza che prende un oggetto Player e invia a o da esso?
5) Ho un sacco di metodi che non appartengono veramente a nessuna istanza di una classe, né sono veramente appropriati come metodi statici. Dovrebbero essere dichiarati nella loro stessa classe come metodi statici come comuni o simili? Che cosa è fatto in pratica in questa situazione?
Modifica: Questi metodi appartengono allo specifico file dell'applicazione per il quale vengono utilizzati o possono essere memorizzati nel proprio file "functions.php"?
6) Mi piacerebbe imparare come utilizzare gli spazi dei nomi, ma il mio codice non verrà mai utilizzato da altri e non userò mai il codice di nessun altro nella mia applicazione. Gli spazi dei nomi sono un'aggiunta inutile nella mia applicazione o sarebbe una buona idea imparare a usarli? Indipendentemente da ciò, un'applicazione ha uno spazio dei nomi (il nome dell'applicazione?) O ogni classe appartiene al proprio spazio dei nomi?
7) Infine, è comune avere una classe per le connessioni al database e anche una classe per i metodi di rete? La mia applicazione ha bisogno di entrambi. Penso che il problema principale che sto avendo con la conversione del mio codice nell'uso di tecniche orientate agli oggetti è determinare quali metodi mettere dove, come al momento sono tutti in un unico file monolitico.
Grazie per l'aiuto e l'approfondimento che puoi fornire.
Grazie per il tuo post! Il tuo # 1 e # 4 * davvero * ha aiutato a chiarire le cose! Una collezione di giocatori ha sicuramente un senso per la mia applicazione e anche l'utilizzo di metodi di istanza per trasferire elementi ha perfettamente senso. Seguirò i consigli di tutti e starò molto lontano dai metodi statici. –