PHP 101

Det kan inte nekas att vår är en oerhört svår industri. Har du någonsin ansett att lära sig ett andra språk? Tja, vad sägs om fem? Det är vad som krävs av dig om du tänker bli en modern webbutvecklare. Med tanke på detta, om du inte är försiktig, mycket snabbt kan du vara överväldigad, när du stirrar blint på otaliga förvirrande bloggartiklar eller tekniska böcker.

Nyckeln, som med någonting, är att ta ett steg åt gången.

Nyckeln, som med någonting, är att ta ett steg åt gången. Skulle du fel dig själv för att inte lära dig ett talat språk i en månad? Självklart inte. Applicera sedan samma nivå av tänkande på din programmeringsresa. Dessa saker tar tid, men så länge du fortsätter att trycka framåt, kommer du vara där på nolltid. Stoppa inte!

Steg ett är HTML. Förstå vilket syfte a

serverar. Lär dig hur du strukturerar innehåll med semantiska taggar. Bygg en grundläggande, ostylad webbsida.

Steg två, som du kanske har gissat, är CSS. Lär dig hur man stilar in element på sidan. Uppskatta vad "separation av problem" hänvisar till, och hur det gäller din HTML och CSS. Fyll i din första enkla hemsida.

Steg tre är när utvecklare börjar förgrena sig i sina egna specialiteter. Vid denna tidpunkt kan du dyka in i JavaScript-världen, som blomstrar som aldrig tidigare. Eller du kan istället fokusera dina ansträngningar på backend.

Förvirrad av skillnaden mellan frontend och backend? Tänk på fronten som toppen av isberget som tog ner Titanic. Det är den del av applikationen som är synlig för användaren, och kan interagera med. Bakgrunden å andra sidan hanterar allt från persistens, till valideringar, till routing.

I den här artikeln ska vi anta att du har valt det senare alternativet. serverns sida är det!

Det förnekar inte att PHP dominerar webben.

Tyvärr kommer du än en gång på en handfull vägar att ta. Ska du välja det mest populära alternativet - PHP? Vad sägs om Ruby? De coola barnen verkar föredra det i dessa dagar. Då igen, vad om du har ett skägg? Är Python det rätta valet. Viktigast av allt, hur kan du möjligen göra ett val när du har nollupplevelse?

I situationer som detta - och enligt författarens uppfattning - finns inget fel val. Och säkert finns det inget som förbjuder dig att byta ner vägen. Faktum är att alla utvecklare uppmanas att lära sig flera språk! För nu är dock nyckeln att välja bara en och lära sig det bra.

Även om det är sant att PHP inte är den vackraste av språk, det inte förnekar det faktum att dom dominerar webben. Det är faktiskt världens mest populära skriptspråk. Fördelen med detta är att du kan vara säker på att varje PHP-fråga redan har blivit frågad, löst och dokumenterad. Det är tröst att veta detta. Även om du är vid det mest ömtåliga skedet av ditt lärande, är en massiv och vänlig gemenskap precis vid din tröskel, redo att hjälpa dig. Ännu bättre, PHP upplever en modern renässans som aldrig tidigare tack vare verktyg som Kompositör och Laravel.


Vad är PHP?

PHP, en akronym för PHP: Hypertext Preprocessor (ja, utvecklare älskar sina rekursiva skämt), är ett skriptspråk som byggdes specifikt för webben. Chansen är hög, men det betyder fortfarande inget för dig. Skriptspråk? Va? När ska du nå PHP för enkel HTML? Tja, kanske är ett exempel i ordning. Om du antar att du framgångsrikt har installerat PHP, skapa en index.php filen i en ny mapp på skrivbordet och lägg till:

 

Ja, det är allestädes närvarande "Hej världen"Exempel på att du blir ganska bekant med när dina färdigheter utvecklas. Varje språk / ramverk / verktyg har en!

För att köra den här koden, använd PHPs inbyggda server. Byt till ditt favorit kommandoradsverktyg (Terminal, för Mac-användare), CD till projektmappen och starta upp servern med php -S localhost: 8888. Detta kommando översätts till "Kör en server och gör den tillgänglig från min webbläsare på localhost, port 8888. "Fortsätt och prova! Öppna Google Chrome, bläddra till localhost: 8888, och du kommer att se "Hej världen * "på sidan! Nifty! eko är en språkkonstruktion som inte gör något annat än att ge ett givet värde.

Tips: MAMP och WAMP är utmärkta klicklösningar för installation av PHP, MySQL och Apache på din Mac eller PC, utan att behöva fumla med kommandoraden. De kan vara användbara val i de tidiga stadierna av ditt lärande.

WampServer är en utvecklingsmiljö som möjliggör en enkel klickinstallation av PHP, Apache och MySQL.

Visserligen är detta inte det mest spännande i världen. Faktum är att du troligen tänker på dig själv "Varför kunde jag inte skriva "Hello world" direkt i HTML-sidan och ta bort behovet av PHP ihop?"Det är sant, för det här exemplet, det tjänar ingen anledning. Men ett skriptspråk som PHP blir särskilt användbart när resultatet ska vara dynamiskt i naturen. Vad händer, snarare än värld, du vill att hälsningen ska referera till ett värde som passerat genom URL-frågeformuläret (texten i adressfältet som kommer efter frågetecknet). Här är ett uppdaterat exempel, vilket bara gör det!

 

Ahh, det här introducerar några nya tekniker. För det första är den enskilda perioden som skiljer Hej sträng och det förvirrande $ _GET kan du sammanfoga (eller grupp) värden. I detta fall önskar vi skriva ut "Hej, * "och sedan det värde som representeras av $ _GET [ 'person']. Det här är vad vi refererar till som en super-global array. För enkelhetens skull, tänk på detta som ett sätt att * FÅ ett värde från webbadressens frågesträng.

Testa detta genom att ladda localhost: 8888 / person = Joe. Om den är korrekt konfigurerad ska webbsidan nu visa "Hej Joe."Spela runt med det genom att byta ut Joe med ditt eget namn. Lägg märke till hur uppdateringarna uppdateras varje gång sidan uppdateras? Detta skulle helt enkelt inte vara möjligt med statisk HTML.

En av nycklarna till mogen programmering överväger alla möjliga vägar genom din kod. Till exempel, vad om nej person nyckeln är tillgänglig? Kanske var frågesträngen helt utelämnad. I så fall kommer ett fel säkert att kastas, som person nyckeln kommer inte att finnas. Vad är lösningen? Även om det är sant att detta inte är något annat än ett enkelt exempel, är det fortfarande viktigt att överväga alla möjliga resultat. Låt oss ge en standard.

 

Även om det finns mer strömlinjeformade sätt att tillåta detta är exemplet ovan en utmärkt utgångspunkt. Det är också din första introduktion till villkorliga uttalanden. Närma sig din kod på samma sätt som du skulle hantera scenarier i verkliga livet. Till exempel, "Om vi ​​är ute av mjölk, gå sedan till affären. Annars stanna hemma."Denna tankegång kunde översättas till PHP, med följande logik:

$ outOfMilk = true; om ($ outOfMilk) echo 'Kommer ut till affären.';  annars echo 'Frukost serveras.' 

I denna bit av kod skrivs endast en enda textrad till skärmen. Värdet av variabeln (ett dynamiskt värde), $ outOfMilk, bestämmer styrflödet.

Tips: För att deklarera variabler i PHP, före något namn med ett dollar tecken. Som bästa praxis väljer du läsbara variabla namn över kryptiska alternativ.

Återgår till föregående exempel, så länge som $ _GET [ 'person'] är inställd (tänk på detta som ett pseudo-namn för "är tillgängligt") och skapa sedan ett nytt $ personen variabel lika med dess värde. Annars, tillämpa en standard. Om du återvänder till webbläsaren ska den nu fungera korrekt, oavsett om person nyckeln finns i frågesträngen.

säkerhet

Tyvärr är vi fortfarande inte hemma gratis. En nyckelprogrammering bästa praxis är att placera säkerhet i framkant av varje åtgärd. Även med detta otroligt grundläggande exempel har vi öppnat dörren till ett av de mest utbredda säkerhetsproblemen på webben: XSS (Cross-Site Scripting). En sann förståelse för detta är helt bortom omfattningen av denna inledande lektion (hela böcker har skrivits på det), men här är en grundläggande illustration: vad händer om $ _GET [ 'person'] är lika med, inte en sträng, men ett manus?

http: // localhost: 8888 / person =

Eftersom det här värdet inte har sanerats, visas en varningsruta vid körning, i vissa webbläsare.

Webkitbaserade webbläsare (tänk Chrome och Safari) ger nu skydd mot dessa typer av attacker. Detta var emellertid inte alltid fallet, och det finns fortfarande inte Firefox och Internet Explorer.

Usch! Vi kan inte ha det. Medan det moderna samhället dikterar att en man är oskyldig tills han är bevisad skyldig, är det inte samma sak för programmeringsvärlden. All användarinput är skyldig tills den är sanitiserad! Här är ett uppdaterat exempel som gör det här:

 

Med denna ändring, ska någon försöka XSS-attack, vi är redo! htmlspecialchars är en inbyggd PHP-funktion som översätter olika symboler till deras motpartsdelar. & blir &, < blir <, etc. Det gör det till det perfekta verktyget för att ge den extra säkerheten.

Bra; ingen skada görs!


funktioner

Medan PHP skickas med en mängd olika inbyggda funktioner, kommer det säkert att vara tider när du behöver din egen. Lyckligtvis är de en film att skriva.

Tänk på en funktion som en återanvändbar del av logiken som kan abstraheras bort, så att den kan identifieras och kallas, med ett läsbart namn.

Kanske kör du en nattklubb (inte troligt om du läser detta!), Och behöver ett enkelt sätt att acceptera en persons födelsedatum och beräkna om han eller hon är minst tjugo år gammal. En anpassad funktion skulle vara ett utmärkt sätt att uppnå denna uppgift.

Det första steget är att definiera en ny funktion, kallad isAdult. Funktioner kan acceptera extern ingång, som sedan kan användas. Detta gör det möjligt för den returnerade data från funktionen att vara dynamisk. I det här fallet, för att avgöra om en person är en vuxen, behöver vi veta sitt födelsedatum. Det sista steget är att återvända antingen Sann eller falsk, beroende på om det nuvarande året minus personens födelsedatum är minst tjugo.

funktionen ärAdult ($ yob) $ currentYear = 2013; returnera $ currentYear - $ yob> = 21; 

Det är verkligen ganska enkelt! Nu behöver vi bara skicka det till bounceren. En funktion kan utlösas, eller kallas, genom att referera till dess namn, följt av en uppsättning parentes: isAdult (). Om funktionen kräver ett argument kan du dock ange det inom parentesen, som illustreras nedan:

om (isAdult (1985)) echo 'Come on in!';  annars echo "Vänligen lämna nu, innan jag ringer till din mamma. '; 

Det finns ett brutalt problem med detta isAdult fungera. Det aktuella året har varit hårdkodat. Visst, det kommer att fungera under 2013, men hur är det med nästa år? Det verkar som att detta värde också måste vara dynamiskt. PHP ger en datum funktion som kan användas för att beräkna det aktuella året. Som sådan kan funktionen uppdateras till:

funktionen ärAdult ($ yob) $ currentYear = datum ('Y'); returnera $ currentYear - $ yob> = 21; 

arrayer

Snabbspola fram några månader, och nu gör nattklubben bättre än någonsin. Faktum är att det gör så bra till den punkten att bouncer inte kan fortsätta. Hans jobb kan vara enklare om han istället kunde filtrera genom en grupp människor åt gången.

Tänk på en array som en behållare för relaterad data. Du kan till och med referera till det som en lista: en lista med tweets, en grupp familjemedlemmar, en rad födelsedatum.

En array i den senaste versionen av PHP (5.4) kan definieras med hjälp av en kommaseparerad lista inom parentes, som så:

$ grupp = [1985, 1990, 1992, 1997];

Denna singel $ grupp variabel innehåller nu flera födelsedatum. Värden inom den kan komma åt genom att ange ett index, t.ex. $ Grupp [0]. Arrays är vad vi hänvisar till som nollbaserade. I översättning betyder det att det första objektet, eller nyckeln, i matrisen kommer att ha ett index på noll. Som sådan, för att få tillgång till 1992-värdet, skulle du referera $ Grupp [2].

Nu kan bounceren snabbt filtrera genom dessa födelsedatum och beräkna om personen ska tillåtas eller avvisa dem. en för varje uttalande kan användas för denna typ av filtrering.

$ grupp = [1985, 1990, 1992, 1997]; foreach ($ grupp som $ yob) if (isAdult ($ yob)) echo 'Come on in!';  annars echo "Vänligen lämna nu, innan jag ringer till din mamma. '; 

Lägg märke till hur bounceren förklarar att födelseåret för varje person i grupp bör ingå i variabeln, $ yob. Sedan, som han gjorde tidigare, överlämnar han det värdet till isAdult funktionen och fortsätter i enlighet därmed.

Det är dock möjligt att bounceren blir förvirrad när han inte har någon koppling mellan personens födelseår och deras namn. PHP möjliggör också associativa arrayer, som ger den nödvändiga funktionaliteten för att associera ett givet värde med en nyckel. Här är ett exempel:

$ group = ['John' => 1985, 'Susan' => 1990, 'Joe' => 1992, 'Sara' => 1997];

Det är bättre. Som en extra bonus kan bounceren vara lite mer vänlig mot personen, nu när han vet sitt namn.

$ group = ['John' => 1985, 'Susan' => 1990, 'Joe' => 1992, 'Sara' => 1997]; foreach ($ grupp som $ name => $ yob) if (isAdult ($ yob)) echo "Kom igen, $ namn!";  annars echo "Vänligen lämna nu $ namn, innan jag ringer till din mamma."; 

När du lagrar strängar inom dubbla citat kan du bära variabler istället för att använda sammanlänkning. Detta kan låna ut för en mer läsbar syntax.


Klasser

Objektorienterad programmering ligger långt bortom omfattningen av denna handledning, men klasser förtjänar att nämna. Tänk nu på dem som enkla behållare för relaterade egenskaper och metoder. Till exempel, här är hur en klass som representerar en enda person kan se ut:

klass Person public $ name; offentlig $ ålder; offentlig funktion __construct ($ namn, $ ålder) $ this-> name = $ name; $ this-> age = $ age; 

Lägg märke till att __konstruera() metod? Detta kallas en magisk metod och kommer att utlösas omedelbart vid instantiering. När den här metoden brinner, kommer den att acceptera ett namn och en ålder och sedan fästa den på objektet.

För att använda den här klassen, försök:

$ me = ny person ('Jeffrey', 28);

Detta kommer att skapa en ny instans av Person klass. Denna instans, som är lagrad i $ mig variabel, kan hänvisas till som ett objekt. Nu finns det inget som förbjuder dig att skapa flera instanser av den här klassen - och i själva verket i verkliga projekt, kommer du! Klassen är bara en blueprint.

Vid denna tidpunkt är klassen dock inte alltför användbar. Låt oss lägga till en metod, eller funktion, för att ange en makas maka.

klass Person public $ name; offentlig $ ålder; offentlig $ maka; offentlig funktion __construct ($ namn, $ ålder) $ this-> name = $ name; $ this-> age = $ age;  Offentlig funktion gifta sig (Person $ make) $ this-> make / maka = $ make / maka;  $ me = ny person ("Jeff", 28); $ her = ny person ('allison', 28); $ Me-> gifta ($ henne);

Denna modifierade kod innehåller nu a gifta sig() metod som uppdaterar a $ make egendom på objektet. Nu har du en direkt länk mellan de två personerna.

Om ett metodargument föregås av ett klassnamn (Person $ make / maka), kallad typhinting, anger detta att parametern måste vara en förekomst av den givna klassen, eller ett fel kommer att kastas.

För att hämta min makas namn kan du skriva:

echo $ mig-> make / maka-> namn; // Allison

Begreppet objektorienterad programmering går mycket djupare än detta, men håll det enkelt för nu. Det hjälper till att tänka på klasser som singular substantiv: en tweet, eller användare, eller kund eller fil.

Sann uppskattning för detta mönster kommer bara att komma med tiden.

Praktisk

Sätt dina nya funna färdigheter på provet. Hur kan du gå om att registrera och visa tweets för en användare på sidan? Tja, det första steget kan vara att definiera en klass som representerar en singel Tweet. Den här klassen ska lagra egenskaper för tweetens kropp, liksom dess publiceringsdatum. Dessutom bör det säkerställa att tweetens kropp inte överstiger 140 tecken. Här är en första stab i en sådan klass:

klass Tweet public $ body; offentlig $ pubDate; offentlig funktion __construct ($ body) $ this-> setBody ($ body); $ this-> setPubDate (ny DateTime);  public function setBody ($ body) if (strlen ($ body)> 140) släng nytt InvalidArgumentException;  $ this-> body = $ body;  public function setPubDate (DateTime $ date) $ this-> pubDate = $ date-> formatet ('Y / m / d H: i: s'); 

Även om det i början kan verka överväldigande, ge den här kodstämpeln lite studier och försök att förstå vad som händer varje steg på vägen. Du kanske tycker att det är ganska läsligt!

En intressant ny del av funktionalitet härrör från setBody metod. Om texten tillhandahålls överstiger 140 tecken, som vi kan beräkna med hjälp av PHP strlen funktion, då bör vi ta undantag till det eftersom det bryter reglerna för en tweet. Ett undantag kan kastas med hjälp av syntaxen, kasta ny ExceptionType.

Nu när vi har en anständig nog behållare för en tweet kan vi skapa ett par tweets, lagra dem i en array och sedan till sist göra dem på sidan med hjälp av en för varje påstående.

$ tweets = []; # lägg till två nya tweets till array $ tweets [] = new Tweet ('Going to the store.'); $ tweets [] = new Tweet ('Tillbaka från affären!'); # Filtrera genom, och visa på sidan. foreach ($ tweets som $ tweet) echo "

$ Tweet-> kropp

"echo"

Publicerad den: $ tweet-> pubDate

";

När du tittar på produktionen i webbläsaren bör du se något i linje med:

Utmärkt, men hur räddar vi dessa tweets?


Lagring

Hittills har du lärt dig de viktigaste: variabler, villkor, funktioner, arrays, klasser. Det finns mer att täcka, men du bör undersöka det på egen hand, som behovet uppstår. Nästa steg i ditt lärande är uthållighet. Hur kan du till exempel hålla en logg över alla tweets? En tweet-tjänst som inte gör det kom ihåg tweets är en hemsk! Det här är när tanken på databaser kommer till spel.

Tänk på en databastabell som ett Excel-kalkylblad. Det kan ha ett antal fält, t.ex. personens namn, ålder eller adress. PHP ger emellertid inte den här typen av lagring inhemskt. Istället är det vanligaste alternativet MySQL, som är världens mest populära open source-databas.

Installera MySQL omfattas inte av denna handledning. Istället hänvisar du till denna handledning på Nettuts + för en fullständig genomgång.

Här är ett förenklat exempel för att komma igång med att säkert hämta rader från en databas tabell. Oroa dig inte om det verkar överväldigande. MySQL är ditt andra nya språk att lära dig. PHP: s PDO API, liksom frågeformuläret, kräver själv tid att lära sig.

Först måste du ha ett sätt att ansluta till databasen.

funktionskoppling () $ conn = ny BOB ('mysql: värd = localhost; dbname = DB_NAME', 'USERNAME', 'PASSWORD'); $ conn-> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION); returnera $ conn; 

PDO är en av PHP: s tre tillgängliga API för anslutning till en MySQL-databas.

Därefter lägger vi till en hjälpfunktion för att hämta alla poster från tweets-tabellen. Var uppmärksam på fråga metodens argument, VÄLJ * FRÅN tweets. Detta är ett speciellt språk för att fråga databasen. I det här fallet använder vi * symbol för att referera till alla rader. Som sådan väljer vi alla rader från bordet som heter tweets.

Den här funktionen förbereder frågan och hämtar sedan hela resultatuppsättningen.

funktion fetchTweets ($ conn) $ stmt = $ conn-> fråga ('VÄLJ * FRÅN tweets'); returnera $ stmt-> fetchAll (PDO :: FETCH_OBJ); 

Nu, med scenuppsättningen, behöver vi bara ringa funktionerna i enlighet med detta.

# Anslut till DB $ conn = connect (); # Hämta alla rader från deltagarnas tabell var_dump (fetchTweets ($ conn));

Ett enkelt sätt att dumpa innehållet i en variabel är genom att använda var_dump fungera. Om du skickar utdata från fetchTweets ($ conn) till den här funktionen, när du tittar på den i webbläsaren ser du något i linje med:

var_dump Det är bra att felsöka, men för produktionsändamål är det bättre att filtrera igenom resultaten och göra dem korrekt på sidan. De för varje uttalande, som du redan är bekant med, kommer att hantera jobbet ganska snällt!

$ tweets = fetchTweets ($ conn); foreach ($ tweets som $ tweet) echo "

$ Tweet-> kropp

"echo"

$ Tweet-> pubDate

";

Slutsats

Som med vilken skicklighet som helst, kräver flytande PHP inget annat än din tid. Det kan ta hundratals timmar att helt grok, men det är okej. Det här är roligt, eller hur? Det borde vara!

Det bästa sättet att lära sig är att göra. Bygg kasta bort projekt som att de går ut ur stil! De tekniker som beskrivs i den här handledningen tar dig genom den första fasen, men i takt med att dina färdigheter utvecklas fortsätter du vidare till mer avancerade ämnen, till exempel PHP-ramar, designmönster och testdriven utveckling. Ha så kul!

Föreslagna tips + Premium Resurs

  • Den moderna PHP-utvecklaren
  • PHP Grundläggande
  • SQL Essentials