La tua domanda è un po 'vaga quindi farò del mio meglio.
C'è una buona domanda da porsi quando provi a scegliere tra la creazione di un metodo statico o un metodo di istanza.
Do you need to persistent state between method calls?
I metodi statici non sono diversi dalle funzioni procedurali tradizionali. Gli dai un input e dovrebbe produrre costantemente un output basato sull'input completamente privo di effetti collaterali.
In sostanza, è possibile utilizzare una dichiarazione di funzione tradizionale nella sua posizione senza alcuna differenza. L'unico vantaggio è che i metodi statici sono collegati a uno spazio dei nomi in cui le funzioni tradizionali sono definite nello spazio dei nomi globale.
Non hanno molta importanza in PHP perché il linguaggio mescola sia gli stili procedurali che quelli OOP, ma in linguaggi che sono puramente OOP (ex C # / Java) non c'è modo di definire le funzioni in modo da utilizzare i metodi statici al loro posto.
I metodi statici sono perfettamente accettabili da utilizzare quando si definiscono metodi di supporto che agiscono in modo stateless. Se hai bisogno di persistenza dei dati tra le chiamate e / o ti trovi a fare affidamento su variabili globali, non ; usa invece oggetti / istanze.
Aggiornamento:
Tom B ha fatto un ottimo punto sui test unitari. I metodi statici (come le funzioni procedurali) sono intrinsecamente disaccoppiati dalle classi a cui sono collegati. Quindi, se un metodo statico fallisce, può anche causare il fallimento di qualsiasi altro metodo di istanza in cui è chiamato. È un classico esempio di effetto collaterale.
Questo spiega perché ho incontrato così tante persone che pappagallo "i metodi statici sono cattivi, mmmkay" nella comunità TDD. Hanno un punto completamente valido.
Ci sono modi in cui questo potrebbe essere migliorato. Nella lingua, generando un'eccezione implicita quando i metodi statici falliscono. Tecnicamente, non sarebbe più un disastro che fare conversioni di tipo. Supponiamo che spezzerà qualcosa se fallisce. Ovviamente, ciò presuppone un maggior livello di comprensione da implementare.
In ogni caso, si tratta della semplice domanda.
Do you limit the language you use, or limit the ability to test your code's consistency?
Il mio pregiudizio personale è verso l'espressività, il pregiudizio della scuola TDD di pensiero è verso la coerenza. YMMV.
Attendo molti anni di guerre religiose su questo argomento.