PHP is de meest gebruikte taal voor programmeren op het web. Hier zijn dertig best practices voor beginners die de basisbeginselen beter willen begrijpen.
Opmerking van de uitgever: De serie 'Best Practices' is nu mijn baby voor drie artikelen. Echter, vanwege mijn focus op de CI-videoserie, heb ik besloten dit volgende bericht aan Glen in te leveren. Dat gezegd hebbende, ben ik niet erg goed in het houden van mijn mond! Ik dacht dat het leuk zou zijn om sporadisch een paar weerwoorden aan zijn tips toe te voegen. Ik hoop dat hij het niet erg vindt!
Trouwens, als je er niet zeker van bent dat je sommige van deze dingen zelf kunt uitvoeren, kun je PHP-experts op Envato Studio vinden om je te helpen. Ze kunnen fouten corrigeren of uw site aanpassen voor u, en zij zijn ervaren ontwikkelaars, zodat ze tijdens het voltooien van de werkzaamheden de beste werkwijzen volgen.
PHP-experts op Envato StudioAls je nog niet bekend bent met PHP, is het tijd om kennis te maken met de awesomeness die de PHP-handleiding is. De PHP-handleiding is ongelooflijk grondig en heeft echt nuttige opmerkingen na elk artikel. Voordat u vragen stelt of zelf een probleem probeert op te lossen, kunt u wat tijd besparen en gewoon rechtstreeks naar de handleiding gaan. Kansen zijn het antwoord op uw vraag is al genesteld in een nuttig artikel op de PHP.net-site.
Foutrapportage in PHP is erg handig. U zult fouten in uw code tegenkomen die u misschien nog niet eerder heeft opgemerkt, omdat niet alle bugs ervoor zorgen dat de applicatie niet werkt. Er zijn verschillende niveaus van striktheid in de rapportage die u kunt gebruiken, maar E_ALL toont u de meeste fouten, kritieke waarschuwingen en waarschuwingen.
Nadat u uw toepassing klaar hebt gemaakt voor productie, moet u foutrapportage uitschakelen of uw bezoekers zien vreemde fouten die zij niet begrijpen.
IDE's (Integrated Development Environments) zijn nuttige hulpmiddelen voor elke ontwikkelaar. Hoewel ze niet voor iedereen zijn, heeft een IO zeker zijn plaats. IDE's bieden tools zoals
En nog vele andere functies. Er zijn genoeg geweldige IDE's beschikbaar die PHP ondersteunen.
Je kunt veel leren over PHP door gewoon te experimenteren met PHP-frameworks. Frameworks zoals CakePHP of CodeIgniter stellen je in staat om snel PHP-applicaties te maken, zonder een expert te hoeven zijn met PHP. In zekere zin zijn ze bijna PHP-trainingswielen die laten zien hoe een PHP-applicatie eruit moet zien, en die je waardevolle programmeerconcepten laten zien (zoals het scheiden van de logica van het ontwerp, enz.).
Er zijn ook enkele gespecialiseerde raamwerken beschikbaar op Envato Market, zoals Blaze en Frameworx.
Weerlegging: persoonlijk zou ik niet aanbevelen dat beginners een kader gebruiken. Leer eerst de grondbeginselen. :)
DRY staat voor Do not Repeat Yourself, en het is een waardevol programmeerconcept, ongeacht de taal. DROOG programmeren, zoals de naam al aangeeft, is ervoor zorgen dat u geen overtollige code schrijft. Hier is een voorbeeld van Reinhold Weber:
Deze code ...
$ mysql = mysql_connect ('localhost', 'reinhold', 'secret_hash'); mysql_select_db ('wordpress') of sterven ("can not select DB");
nu met de DRY-aanpak:
$ db_host = 'localhost'; $ db_user = 'reinhold'; $ db_password = 'secret_hash'; $ db_database = 'wordpress'; $ mysql = mysql_connect ($ db_host, $ db_user, $ db_password); mysql_select_db ($ db_database);
U kunt hier en hier meer lezen over het DRY-programmeerprincipe.
Als u geen inspringen en witruimte in uw code gebruikt, ziet het resultaat eruit als een Jackson Pollak-schilderij. Zorg ervoor dat uw code leesbaar en gemakkelijk te doorzoeken is, want u zult in de toekomst zeker wijzigingen aanbrengen. IDE's en geavanceerde teksteditors kunnen automatisch een inspringing toevoegen.
Het in kaart brengen van uw applicaties is niets anders dan de verschillende componenten van de code in verschillende delen scheiden. Hiermee kunt u eenvoudig uw code in de toekomst wijzigen. NETTUTS-schrijver Jason Lengstorf heeft een uitstekend artikel geschreven over hoe je je PHP-applicaties kunt ophangen voor eenvoudiger onderhoud.
Vaak proberen programmeurs snelkoppelingen te maken bij het declareren van PHP. Hier zijn een paar veel voorkomende:
echo "Hello world"; ?> ="Hello world"; ?> <% echo "Hello world"; %>
Hoewel deze een paar tekens opslaan, worden al deze methoden afgeschreven en niet-officieel. Blijf bij de norm omdat het gegarandeerd wordt ondersteund in alle toekomstige versies.
Dit noemen is niet alleen voor uw eigen bestwil. Er is niets ergers dan proberen je een weg te banen door de onzinnige naamgevingsconventies van een andere programmeur. Help jezelf en anderen door namen te gebruiken die logisch zijn voor uw lessen en functies.
Afgezien van het gebruik van witte ruimte en inspringingen om de code te scheiden, wilt u ook inline opmerkingen gebruiken om uw code te annoteren. Je zult jezelf later bedanken als je terug moet gaan om iets in de code te vinden, of als je gewoon niet meer weet wat een bepaalde functie deed. Het is ook handig voor iemand anders die uw code moet overzien.
MySQL is het meest populaire type database om te gebruiken met PHP (hoewel het niet de enige is). Als je een lokale omgeving wilt opzetten om je PHP-applicaties op je computer te ontwikkelen en testen, kijk dan naar het installeren van MAMP (Mac) of WAMP (Windows). Het installeren van MySQL op uw eigen computer kan een moeizaam proces zijn en beide softwarepakketten zijn drop-in-installaties van MySQL. Schoon en eenvoudig.
Het is heel belangrijk om een tijdlimiet op uw PHP-scripts te stellen. Er zijn momenten waarop uw scripts mislukken en als ze dat doen, wilt u de functie set_time_limit gebruiken om oneindige lussen en databaseverbindingstime-outs te voorkomen. De set_time_limit stelt een tijdslimiet in voor het maximale aantal seconden dat een script wordt uitgevoerd (standaard is dit 30). Na die periode wordt een fatale fout gegenereerd.
Object-oriented programming (OOP) gebruikt objecten om onderdelen van de applicatie weer te geven. Niet alleen is OOP een manier om uw code in afzonderlijke, logische secties te breken, het vermindert ook codeherhaling en maakt het veel gemakkelijker om in de toekomst te wijzigen. Als u meer wilt weten, heeft DevArticles een geweldige beschrijving van objectgeoriënteerd programmeren met PHP.
Het is efficiënter in gebruik single quotes in strings omdat de parser de code niet hoeft te doorzoeken om te zoeken naar escapetekens en andere dingen die dubbele aanhalingstekens toestaan. Probeer altijd wanneer mogelijk enkele aanhalingstekens te gebruiken.
Weerlegging: eigenlijk is dat niet noodzakelijk waar. Benchmarktests tonen aan dat bij het testen van strings zonder variabelen, er duidelijke voordelen zijn ten opzichte van het gebruik dubbele aanhalingstekens.
Phpinfo is iets moois. Door simpelweg een PHP-bestand te maken dat dat wel heeft
en ergens op de server neer te zetten, kun je meteen alles over je serveromgeving leren. Veel beginners zullen echter een bestand met phpinfo () plaatsen in de webroot van de server. Dit is een erg onzekere oefening en als nieuwsgierige mensen toegang krijgen, kan dit mogelijk een doom betekenen voor je server. Zorg ervoor dat phpinfo () op een veilige plek staat en verwijder het als een extra maatregel als je klaar bent.
Als uw toepassing plaats biedt voor gebruikersinvoer, moet u er altijd vanuit gaan dat ze proberen ondeugdelijke code in te voeren. (We willen niet suggereren dat uw gebruikers slechte mensen zijn. Het is gewoon een goede instelling.) Een goede manier om uw site hackervrij te houden, is door altijd uw variabelen te initialiseren om uw site te beschermen tegen XSS-aanvallen. PHP.net heeft een voorbeeld van een goed beveiligde vorm met geïnitialiseerde variabelen:
Veel PHP-beginners zetten vaak gevoelige gegevens zoals wachtwoorden in de database zonder enige codering toe te passen. Overweeg het gebruik van MD5 om wachtwoorden te coderen voordat u ze in de database plaatst.
echo md5 ('myPassword'); // rendert - deb1536f480475f7d593219aa1afd74c
Weerlegging: Houd er echter rekening mee dat MD5-hashes al lang zijn aangetast. Ze zijn absoluut veiliger dan niet, maar met behulp van een enorme 'regenboogtafel' kunnen hackers verwijzen naar je hash. Voeg nog een zout toe om nog meer veiligheid toe te voegen. Een zout is in feite een extra set tekens die u toevoegt aan de tekenreeks van de gebruiker.
Als u het moeilijk vindt om databases voor uw PHP-applicaties te plannen en aan te passen, kunt u een database-visualisatietool gebruiken. MySQL-gebruikers kunnen met DBDesigner en MySQL Workbench werken om uw databases visueel te ontwerpen.
Uitvoerbuffering is een eenvoudige manier om de prestaties en snelheid van uw PHP-script aanzienlijk te verbeteren. Zonder uitvoerbuffering zal uw script de HTML op de pagina weergeven terwijl het wordt verwerkt - in stukjes. Door uitgangsbuffering toe te voegen, kan de PHP de HTML opslaan als een variabele en deze in één brok naar de browser verzenden.
Als u uitvoerbuffering wilt inschakelen, voegt u ob_start () toe, zoals aan de bovenkant van het bestand.
Weerlegging: hoewel niet vereist, wordt het over het algemeen als een goede gewoonte beschouwd om door te gaan en de "ob_end_flush ();" toe te voegen; functioneer ook naar de onderkant van het document. Postscriptum Wilt u de HTML ook comprimeren? Vervang gewoon "ob_start ();" met "ob_start ('ob_gzhandler')";Raadpleeg dit Dev-tips-artikel voor meer informatie.
untitled
Als u niet ontsnapt aan uw tekens die in SQL-reeksen worden gebruikt, is uw code kwetsbaar voor SQL-injecties. U kunt dit voorkomen door de mysql_real_escape_string te gebruiken of door voorbereide instructies te gebruiken.
Hier is een voorbeeld van mysql_real_escape_string in actie:
$ username = mysql_real_escape_string ($ GET ['gebruikersnaam']);
en een voorbereide verklaring:
$ id = $ _GET ['id']; $ statement = $ connection-> prepare ("SELECT * FROM tbl_members WHERE id =?"); $ statement-> bind_param ("i", $ id); $ Statement> execute ();
Door voorbereide instructies te gebruiken, embedden we de ingevoerde gegevens van de gebruiker nooit rechtstreeks in onze query. In plaats daarvan gebruiken we de methode "bind_param" om de waarden (en de escapecodes) aan de query te binden. Veel veiliger en, met name, sneller bij het uitvoeren van meerdere CRUD-instructies tegelijk.
Lees meer over het maken van beveiligde PHP-applicaties bij Nettuts.
Als u objectgeoriënteerde PHP schrijft, kunt u de handige relationele toewijzing van objecten (ORM) gebruiken. Met ORM kunt u gegevens converteren tussen relationele databases en objectgeoriënteerde programmeertalen. Kort gezegd: met ORM kunt u op dezelfde manier met databases werken als met klassen en objecten in PHP.
Er zijn veel ORM-bibliotheken voor PHP zoals Propel en ORM is ingebouwd in PHP-frameworks zoals CakePHP.
Het cachen van door een database aangestuurde PHP-pagina's is een uitstekend idee om de belasting en de prestaties van uw script te verbeteren. Het is echt niet zo moeilijk om statische bestanden met inhoud te maken en op te halen met de hulp van onze goede vriend ob_start (). Hier is een voorbeeld van Snipe.net:
// TOP van je script $ cachefile = 'cache /'. Basename ($ _ SERVER ['SCRIPT_URI']); $ cachetime = 120 * 60; // 2 uur // Serveer uit de cache als deze jonger is dan $ cachetime if (file_exists ($ cachefile) && (time () - $ cachetime < filemtime($cachefile))) include($cachefile); echo ""; exit; ob_start (); // start de uitvoerbuffer // Uw normale PHP-script en HTML-inhoud hier // BODEM van uw script $ fp = fopen ($ cachefile, 'w'); // open het cachebestand voor het schrijven van fwrite ($ fp, ob_get_contents ()); // sla de inhoud van de uitvoerbuffer op naar het bestand fclose ($ fp); // sluit het bestand ob_end_flush (); // Stuur de uitvoer naar de browser
Dit stukje code gebruikt een in het cachegeheugen opgeslagen versie van een pagina die minder dan 2 uur oud is.
Als je een meer robuust caching-systeem wilt, zijn er een paar caching-scripts voor PHP die misschien completer zijn dan het bovenstaande voorbeeld.
Cookie-gegevens, zoals alle gegevens die op internet worden doorgegeven, kunnen schadelijk zijn. U kunt cookiedata valideren met de htmlspecialchars () of mysql_real_escape_string ().
Afgezien van het gebruik van database caching-systemen zoals Memcached, wilt u misschien ook een sjabloneringssysteem proberen om de prestaties in uw PHP-applicaties te verbeteren. Smarty is een robuust sjablonensysteem waarin caching is ingebouwd.
Profileren van je code met een tool als xdebug kan je helpen om snel knelpunten en andere potentiële problemen in je PHP-code op te sporen. Sommige IDE's zoals Netbeans hebben ook PHP-profileermogelijkheden.
Als je eenmaal het goede verstand van PHP hebt verloren, kun je beginnen met leren over coderen volgens een standaard. Er zijn verschillen tussen standaarden die er zijn (zeg Zend en Pear), en het vinden van een daarvan en het blijven volgen zal op de lange termijn helpen met de consistentie van je codering.
U maakt een prestatieverbetering wanneer u functies in een loop invoegt. Hoe groter de lus die u hebt, hoe langer de uitvoeringstijd zal duren. Neem de extra tijd en regel code en plaats de functie buiten de lus.
Noot van de redactie: denk er zo over na. Probeer zo veel mogelijk bewerkingen uit de lus te verwijderen. Moet je die variabele echt maken voor elke iteratie van de lus? Moet je de functie echt elke keer maken? Natuurlijk niet. :)
Sommige mensen proberen hun code aantrekkelijker te maken door vooraf gedefinieerde variabelen naar variabelen met een kleinere naam te kopiëren. Dit is overbodig en kan mogelijk het geheugen van je script verdubbelen. Google Code heeft slechte en goede voorbeelden van variabel gebruik:
Slecht
$ description = strip_tags ($ _ POST ['description']); echo $ beschrijving;
Goed
echo strip_tags ($ _ POST ['description']);
Weerlegging: met betrekking tot de opmerking over "verdubbeling van het geheugen" is dit eigenlijk een veel voorkomende misvatting. PHP implementeert "copy-on-write" geheugenbeheer. Dit betekent in feite dat je een waarde kunt toewijzen aan zoveel variabelen als je wilt, zonder je zorgen te hoeven maken over de gegevens wezen gekopieerd. Hoewel het betwistbaar is dat het hierboven beschreven "goede" voorbeeld zou kunnen zorgen voor schonere code, betwijfel ik ten zeerste dat het sneller is.
Hoewel het lijkt op een gezond verstand, upgraden veel mensen PHP niet zo vaak als zou moeten. Er zijn veel prestatieverhogingen tussen PHP 4 en PHP 5. Controleer uw server om er zeker van te zijn dat u op de hoogte bent.
Elke manier waarop u het aantal databasequery's kunt verminderen, hoe beter uw PHP-script zal presteren. Er zijn tools zoals Stace (Unix) en Process Explorer (Windows) waarmee u redundante processen kunt vinden en hoe u ze kunt combineren.
Het is alleen de menselijke natuur om te willen verbergen dat we niet veel weten over een bepaald onderwerp. Niemand vindt het leuk om een n00b te zijn! Maar hoe gaan we leren zonder te vragen? Voel je vrij om forums, IRC, StackOverflow te gebruiken om meer ervaren PHP ontwikkelaars vragen te stellen. De PHP-website heeft een pagina over het verkrijgen van PHP-hulp.
Heb je een eigen weerlegging? Ik weet zeker dat je doet! Laten we het debat beginnen.