La cosa più importante per un programmatore in PHP, a mio parere, oltre alla sua esperienza è il suo toolkit. Cioè, codice che lui/lei ha scritto dentro e fuori, avanti e indietro da tempo immemorabile.
Per me, in questo caso, il vantaggio di OOP in chiaro. Avere una classe che conosci preformerà sempre quello che vuoi attraverso semplici metodi è molto più facile per te e per i membri del team, quindi è solo chiamando una moltitudine di funzioni statiche. Mentre si potrebbe argomentare che una libreria di funzioni satiche include lo stesso scopo, a mio avviso le lezioni sono molto più facili da leggere e capire. Per esempio, nella mia classe di sessione personalizzato un programmatore può guardare il mio codice e vedere,
$my_session = new session();
$my_session->start();
if (($session_errno = $my_session->error()) !== FALSE)
{
//DO SOMETHING BECAUSE OF A SESSION ERROR
}
e facilmente capire che le sessioni in questa applicazione sono gestite tramite la nostra classe di sessione personalizzato, e deve restituire un certo tipo di successo/insuccesso senza aver mai esaminato la biblioteca/la classe.Nel frattempo, una chiamata di questo tipo,
session_start();
if (session_error())
{
//DO SOMETHING BECAUSE OF A SESSION ERROR
}
non lo rende chiaro che session_start()
non è un gestore di sessione di PHP di default, ma che chiamerà le funzioni definite in session_set_save_handler()
che è stata inclusa in qualche mega lista di include globale che potrebbe non essere facilmente individuabile in una grande applicazione. Non è altrettanto chiaro che session_error() sia una funzione che restituisce un errore impostato dal gestore di sessione personalizzato, rispetto a una funzione che può cercare attivamente i problemi di sessione su una sessione già generata ed è completamente indipendente dalla sessione predefinita di PHP.
Questo non è un ottimo esempio, ma penso che sia un buon esempio. Non sono entrato nei dettagli sulla bontà che protegge i dati dall'applicazione per intero, l'ereditarietà e tutto ciò che rende OOP utile.
Ma rapidamente, immagina una classe che accede al database MYSQL di un'applicazione. Viene dedicato molto tempo alla progettazione della classe per utilizzare istruzioni preparate, errori di registro e fornire la logica appropriata al programmatore secondo necessità. Un team può preoccuparsi meno dei problemi di accesso al database semplicemente chiamando le funzioni pubbliche di "accesso ai dati" della classe senza preoccuparsi di errori fatali, cattiva logica o SQL pericoloso (iniezioni e così via).
Questo può essere fatto con funzioni statiche come suggerite, MA ogni funzione in quella libreria statica è esposta all'applicazione nel suo complesso, mentre solo le funzioni pubbliche e 'SAFE' sono esposte all'applicazione che utilizza un database oggetto di accesso. Il programmatore non può chiamare accidentalmente una funzione pericolosa che, se non correttamente inizializzata da altre funzioni, potrebbe causare problemi importanti, né il programmatore potrebbe sopprimere deliberatamente errori o altri dati protetti dalla classe come potrebbero con un gran numero di funzioni statiche e variabili globali.
Mentre una buona applicazione può essere progettata senza oggetti, un buon programmatore dovrebbe godere dell'utilizzabilità, dell'estensibilità e delle protezioni che gli oggetti offrono quando appropriato.
Partirò con la mia metafora finale. Gli oggetti sono come macchine e strumenti specializzati all'interno di una fabbrica. Mentre la fabbrica stessa ha un numero di questi strumenti unici sulla sua catena di montaggio, dai semplici freni di piegatura alle macchine CNC e robot automatizzati, sono solo una piccola parte del team che esiste per aiutare i più numerosi lavoratori e manager, i nostri statici funzioni, fare il lavoro di costruire una macchina, un camion o una bicicletta migliore.
cosa sono le "funzioni casuali"? – Svisstack
** possibile duplicato di [functions.php vs OOP] (http://stackoverflow.com/questions/2392795/functions-php-vs-oop) e [Qual è il punto delle classi] (http://stackoverflow.com/questions/1993638/classes-whats-the-point) ** - Riassunto: o usi OOP o non lo fai. – Gordon
Ho pensato che una classe "Utilities"/"Helpers" fosse standard nella maggior parte dei progetti OO: P. – Matt