Per alcuni sviluppatori l'abbandono dell'approccio procedurale dovrebbe essere ormai un concetto acquisito, ma non mancherebbero voci contrastanti; lo stesso Rasmus Lerdorf, creatore di PHP, preferirebbe per esempio un approccio basato su un mix tra OOP e procedurale in cui non tutto è un oggetto; ma perché allora privilegiare lo sviluppo basato sulle classi?
Uno dei vantaggi delle classi, forse il più importante, riguarda la possibilità di evitare la collisione tra nomi di funzioni e di variabili utilizzate dalle diverse componenti di un'applicazione; l'utilizzo dei prefissi per limitare tale problema sarebbe efficace soltanto in progetti di piccole dimensioni, dove è possibile tenere sotto controllo i nomi dei vari elementi.
Quando però si lavora in ambito collaborativo, l'eventualità di collisioni diventa molto probabile, per cui definire elementi all'interno di classi risulta particolarmente vantaggioso; in questo senso, l'introduzione dell'OOP in PHP sarebbe dovuta in particolare alla necessità di semplificare la condivisione dei sorgenti evitando sovrapposizioni e malfunzionamenti dovuti ad omonimie.
L'evoluzione di PHP ha poi permesso di evitare collisioni tra i nomi delle classi tramite i namespaces, mentre i traits di recente introduzione risolvono facilmente i conflitti derivanti dalla presenza di metodi omonimi.
Quando invece non è indispensabile l'utilizzo delle classi? Probabilmente quando un progetto di a basso livello di complessità non è destinato ad ulteriori implementazioni e non prevede interventi collaborativi, definire a priori il destino di un'applicazione non è però sempre un compito semplice.