php 5.3+metodo call class php da metodo statico all'interno della stessa classe ma non istanziato
Ci scusiamo per la lunga domanda, ma voglio impararlo completamente.
So che non è possibile chiamare un metodo non statico della stessa classe all'interno di un metodo statico, senza che la classe sia istanziata come oggetto.
Dalla ricerca su SO, ho trovato alcuni approcci interessanti, ma mi chiedo come ogni approccio influisce sull'ambiente di codice.
Le mie domande sono al di sotto:
ho potuto creare un'istanza della classe come un oggetto all'interno del metodo statico, per ottenere l'accesso al metodo non statico
static function showPeople()
{ // instantiate as object
$person = New Person();
// call class method
$people_data = $this->data_all_get();
}
Q1 - quali problemi potrebbe questa causa ? nella mia situazione, la classe non ha un costruttore quindi nessun altro metodo di classe o vars sarà influenzato dall'istanza. Questo nuovo oggetto occuperebbe solo un piccolo spazio in memoria durante l'esecuzione dello script? Non sembra troppo male ...
l'altra opzione sarebbe quella di convertire il metodo "data_all_get" in un metodo statico, in modo che possa essere chiamato dall'interno del metodo "showPeople" statica, cioè
self::showPeople()
il metodo "data_all_get" viene utilizzato da altri metodi della classe quando viene istanziato come oggetto, per impostare il valore della variabile privata, per ridurre i viaggi nel database, se è già impostato. So che probabilmente potrebbe far parte di una funzione di costruzione, ma non ho mai avuto bisogno che questo oggetto "Persona" fosse istanziato più di una volta per richiesta di script php, la classe è principalmente usata per raggruppare le funzioni e le vars insieme per l'organizzazione.
Q2 - quali sono le implicazioni nel rendere "data_all_get" in un metodo statico? ci sono? se il metodo era statico, ma imposta il valore della var $ people_array privata (che non è statica), penso che var possa essere aggiornato o sovrascritto se l'oggetto ha mai avuto bisogno di essere istanziato una seconda volta in un singolo richiesta di script, corretta? Inoltre, poiché la proprietà non è statica, altri metodi della classe possono accedervi.
Q3 - Potrei chiamare il metodo statico "data_all_get" tutte le volte che volevo senza "rompere nulla" (una domanda caricata IK).
Q4 - Utilizza semplicemente memoria aggiuntiva ogni volta che viene chiamato il metodo statico?
Grazie
Non capisco davvero perché showPeople come lo hai elencato qui è una funzione statica. Il codice che hai incollato sopra sembra un codice OO piuttosto standard e, come hai detto se puoi semplicemente istanziare la classe in ogni caso, non c'è motivo di farlo staticamente. Penso che il modo migliore di pensare ai metodi statici sia come funzioni autonome, racchiuse in una classe. (Funziona comunque per me). Da quello che stai descrivendo, basta rilasciare la chiamata statica, ma se hai bisogno di usarla, penso che il codice che hai incollato sopra dovrebbe andare bene (istanziando la classe). – DaOgre
grazie per il feedback. sto rendendo il metodo statico in modo che possa essere chiamato da altre aree/percorsi dell'applicazione senza dover prima istanziare un oggetto (come un file include in un mondo pre-oop). Ho fatto ulteriori ricerche e test e attualmente mi sto impegnando a rendere statiche anche le proprietà dei membri e gli altri metodi di classe che devono impostare tali proprietà statiche, quindi questa classe statica può chiamarle. ora sto lavorando ... –
aggiornamento: ho refactored e reso statiche le proprietà dei membri, e ho reso statiche le funzioni getter & setter in modo che possano essere chiamate sia dal metodo membro statico che dai metodi di classe, e funziona. ma vorrei ancora qualche commento e suggerimento sulle mie 4 domande elencate sopra, grazie. –