Ti suggerirei di familiarizzare con la storia di PHP, so che così facendo mi ha dato un apprezzamento molto maggiore di ciò che PHP è oggi e da dove proviene.
In breve, Rasmus Lerdorf ha scritto PHP per fornire semplici funzioni di wrapper per il codice C che stava effettivamente facendo il lavoro pesante in modo che potesse avere una lingua/sintassi più semplice per scrivere modelli che dovevano comportarsi dinamicamente. La crescita di PHP e della comunità che lo circonda è meglio descritta come organica. E molto simile ad altre cose che crescono organicamente, è più che un po 'disordinato, asimmetrico e decisamente non congruente.
Una volta compreso il PHP e la sua comunità, è necessario abbracciare PHP per tutto ciò che è e tutto ciò che non è. Questa idea è stata presentata al meglio da Terry Chay nel suo articolo PHP without PHP.Sta parlando specificamente del concetto di cache funky, ma coglie il concetto di codifica per PHP come se fosse PHP e non (inserire qui il linguaggio preferito) meglio di chiunque altro io abbia mai visto. In altre parole, non provare a creare PHP in Java, C#, Ruby, ecc. Perché se lo fai fallirai e ti odierà la vita.
Dai uno sguardo allo How is PHP Done the Right Way?.
Devo dire che è necessario, prima, e sempre evitare la tendenza della maggior parte degli sviluppatori PHP che iniziano a utilizzare l'anti-pattern di spaghetti code. In altre parole, se trovi che stai scrivendo codice che contiene query SQL, manipolazione di dati, convalida di dati e output HTML tutto in un singolo script php, allora stai sbagliando.
Per evitare questo, sarà utile imparare qualcosa sulla natura dei modelli di progettazione orientati al web. Questo ovviamente preclude una familiarità con la programmazione orientata agli oggetti. Ma una volta che hai imparato le basi della programmazione orientata agli oggetti in PHP, studia il modello di progettazione MVC. Non è necessario implementarlo esattamente, ma l'utilizzo delle idee di base di Model-View-Controller consente di evitare il problema del blob script che la maggior parte dei neofiti tende a creare.
Su questo punto, ti consiglio vivamente di prendere qualsiasi frammento di codice che trovi sul web con un pizzico di sale. E anche se lo trovi in un libro, devi considerare quanti anni ha il libro. Il PHP come lingua ha fatto passi da gigante e non puoi semplicemente prendere campioni di codice al valore nominale perché, a seconda dell'età, potrebbero utilizzare soluzioni alternative valide per 3.xo 4.x ma semplicemente non sono più necessario con nuove funzionalità.
Una grande cosa da fare è studiare le varie strutture là fuori. Valuta ciò che ti piace e ciò che non fai. Forse persino elaborare ciascuno dei quickstart forniti con la documentazione del framework in modo che tu possa iniziare a farti un'idea di ciò che ti piace e che non ti piace. E raccomando vivamente di rivedere il codice dai framework così come molti altri progetti open-source in modo che tu possa avere un'idea di come gli altri fanno cose in PHP. Ancora una volta, prendi tutto con un pizzico di sale perché ogni sviluppatore di PHP ha le proprie sfumature e pet pet e nessuno di noi ha sempre ragione. In effetti, la maggior parte delle volte con PHP ci saranno diversi modi per fare qualcosa.
Se si desidera ottenere una migliore comprensione degli schemi che vengono implementati dai framework e vengono comunemente gettati nel volgare in comune su SO, suggerirei di leggere Fowler e GoF. Insegneranno tutto sui modelli di progettazione di base che userete nei vostri sforzi di sviluppo.
Specificamente guardare per i seguenti: file
- funzione che contengono un sacco di funzioni. Probabilmente questo è rappresentativo della necessità di mettere le funzioni direttamente negli script che ne hanno bisogno o potrebbe anche indicare un'opportunità per creare alcune funzioni più generiche che possono essere fatte per adempiere ai ruoli di un paio di funzioni altamente specifiche. Ovviamente, se crei classi coese e ben incapsulate, non dovresti incorrere in questo problema.
- Il fare tutto classe. Questo è un blob anti-pattern ed è davvero antipatico. In questo caso è necessario identificare dove coesione e incapsulamento si stanno abbattendo e utilizzare quei punti come opportunità per suddividere la classe in diverse classi più piccole e più manutenibili.
- Query SQL che non utilizzano query con parametri o almeno parametri di escape. Molto, molto, molto male.
- Qualsiasi istanza in cui la convalida non viene eseguita o viene eseguita solo lato client.Quando si sviluppa per il Web, l'unico modo per tenere al sicuro il tuo sito e i tuoi utenti è quello di presumere che tutti gli altri sono un cappello nero.
- Un desiderio improvviso e ossessivo di utilizzare un motore di template. PHP è un linguaggio di template. Assicurati di avere chiare ragioni per aggiungere un altro livello al tuo sito Web prima di utilizzare un motore di template.
Per ulteriori approfondimenti si prega di guardare il seguente:
PHP Application Design Patterns
Defend PHP - utile per dare un'idea delle critiche più comuni.
Security of strip_tags and mysqlirealescapestring
What should Every PHP Programmer Know
How to Structure an ORM
Best Way to Organize Class Hierarchy
Main Components/Layers of PHP App
Why use Framework for PHP
Recommended Security Training for PHP
Mi piace come si avvisa per i motori di modelli. Non ho mai veramente capito perché le persone lanciassero un motore di template in un linguaggio che a sua volta era stato progettato come un linguaggio modello. –
Hi Gabriel, Grazie per la risposta dettagliata. Apprezzo molto il tuo pensiero. Conosco molto bene tutti gli schemi di progettazione. Ho iniziato la mia carriera con Java e poi mi sono trasferito al mondo C# e ASP.NET. Ho usato la maggior parte degli schemi di progettazione, ove appropriato. Ora come architetto, voglio mettere in atto alcune buone pratiche e le metodologie di codifica in quanto ho alcune app di php insieme alle app .net. Non voglio imporre le stesse restrizioni su PHP per le ragioni che hai menzionato sopra. –
quindi stai dicendo che usare modelli come SMARTY è solo una perdita di tempo ed energie? –