PHP 101

Det er ikke nektet at vår er en utrolig vanskelig industri. Har du noen gang vurdert å lære et andre språk? Vel, hva med fem? Det er det som kreves av deg, hvis du har tenkt å bli en moderne webutvikler. Tatt i betraktning dette, hvis du ikke er forsiktig, veldig raskt, kan du finne deg selv overveldet, mens du stirrer blindt på utallige forvirrende bloggartikler eller tekniske bøker.

Nøkkelen, som med noe, er å ta ett skritt om gangen.

Nøkkelen, som med noe, er å ta ett skritt om gangen. Vil du forkaste deg selv for ikke å lære et talespråk i en måned? Selvfølgelig ikke. Deretter gjelder det samme nivået med å tenke på din programmeringsreise. Disse tingene tar tid, men så lenge du fortsetter å skyve fremover, vil du være der på kort tid. Ikke stopp!

Trinn ett er HTML. Forstå hvilken hensikt a

tjener. Lær hvordan du strukturerer innhold ved hjelp av semantiske koder. Bygg en grunnleggende, uformet nettside.

Trinn to, som du kanskje har gjettet, er CSS. Lær hvordan du stiler elementer på siden. Oppskatt hva "separasjon av bekymringer" refererer til, og hvordan dette gjelder HTML og CSS. Fullfør ditt første enkle nettsted.

Trinn tre er når utviklere begynner å forgrene seg inn i sine egne spesialiteter. På dette tidspunktet kan du dykke inn i JavaScript-verdenen, som blomstrer som aldri før. Eller du kan i stedet fokusere innsatsen på backend.

Forvirret av forskjellen mellom frontend og baksiden? Tenk på frontenden som toppen av isfjellet som brakte ned Titanic. Det er delen av programmet som er synlig for brukeren, og kan samhandles med. Baksiden, derimot, håndterer alt fra vedholdenhet, til validering, til ruting.

I denne artikkelen skal vi anta at du har valgt det sistnevnte alternativet; server-siden er det!

Det er ikke nektet at PHP dominerer nettet.

Dessverre, igjen, kommer du over en håndfull stier å ta. Skal du velge det mest populære alternativet - PHP? Hva med Ruby? De kule barna synes å foretrekke det i disse dager. Så igjen, hva om du har et skjegg? Er Python det riktige valget. Viktigst, skjønt, hvordan kan du muligens gjøre et valg når du har null erfaring?

I situasjoner som dette - og i denne forfatterens oppfatning - er det ikke noe feil valg. Og sikkert, det er ikke noe som forbyr deg fra å bytte ned veien. Faktisk oppfordres alle utviklere til å lære flere språk! For nå er nøkkelen imidlertid å velge bare én, og lære det godt.

Mens det er sant at PHP ikke er den vakreste av språk, er det ikke nektet at det dominerer nettet. Faktisk er det verdens mest populære skriptspråk. Fordelen med dette er at du kan være trygg på at hvert PHP-spørsmål allerede er blitt spurt, løst og dokumentert. Det er trøst i å vite dette. Selv om du er på det mest skjøre scenen av din læring, er et massivt, vennlig samfunn rett utenfor døren din, klar til å hjelpe. Enda bedre, PHP opplever en moderne renessanse som aldri før, takket være verktøy som Composer og Laravel.


Hva er PHP?

PHP, en akronym for PHP: Hypertext Preprocessor (ja, utviklere elsker sine rekursive vitser), er et skriptspråk som ble bygget spesielt for nettet. Sjansene er høye, men at dette fortsatt ikke betyr noe for deg. Skriptspråk? Hu h? Når vil du nå for PHP over enkel HTML? Vel, kanskje et eksempel er i orden. Forutsatt at du har installert PHP, opprett en index.php filen i en ny mappe på skrivebordet ditt, og legg til:

 

Ja, det er allestedsnærværende "Hei Verden"Eksempel på at du blir ganske kjent med dine ferdigheter fremover. Hvert språk / rammeverk / verktøy har en!

For å kjøre denne koden, bruk PHPs innebygde server. Bytt til favorittkommandolinjeverktøyet ditt (Terminal, for Mac-brukere), cd til prosjektmappen, og start opp serveren med php -S localhost: 8888. Denne kommandoen oversetter til "Kjør en server, og gjør den tilgjengelig fra min nettleser på localhost, port 8888. "Gå videre og prøv det! Åpne Google Chrome, bla til localhost: 8888, og du vil se "Hei verden * "på siden! Nifty! ekko er en språkkonstruksjon som ikke gjør noe mer enn å gi en gitt verdi.

Tips: MAMP og WAMP er gode løsninger med ett klikk for å installere PHP, MySQL og Apache på din Mac eller PC, uten å måtte fumle med kommandolinjen. De kan være nyttige valg i de tidlige stadiene av din læring.

WampServer er et utviklingsmiljø som muliggjør en ett-klikk installasjon av PHP, Apache og MySQL.

Ganske vist er dette ikke den mest spennende tingen i verden. Faktisk tenker du sannsynligvis på deg selv, "Hvorfor kunne jeg ikke skrive "Hello world" direkte inn i HTML-siden, og fjerne behovet for PHP alt sammen?"Det er sant, for dette eksempelet tjener det ingen hensikt. Men et skriptspråk som PHP blir spesielt nyttig når utdataene skal være dynamiske i naturen. Hva om, i stedet for verden, du vil ha hilsen til å referere til en verdi som er passert gjennom nettadressens forespørselstegn (teksten i adressefeltet som kommer etter spørsmålet). Her er et oppdatert eksempel, som bare oppnår det!

 

Ahh, dette introduserer noen nye teknikker. For det første, den enkelte perioden som adskiller Hallo streng og det forvirrende $ _GET lar deg sammenkoble (eller gruppe) verdier. I dette tilfellet ønsker vi å skrive ut "Hei, * "og deretter verdien som er representert av $ _GET [ 'person']. Dette er hva vi refererer til som et super-globalt utvalg. For enkelhets skyld, tenk på dette som en måte å * GET en verdi fra nettadressens søkeord.

Test dette ut ved å laste inn localhost: 8888 / person = Joe. Hvis konfigurasjonen er riktig, skal nettsiden nå vise "Hei, Joe."Spill med det ved å bytte ut Joe med ditt eget navn. Legg merke til hvordan utdataene oppdateres hver gang siden oppdateres? Dette ville ganske enkelt ikke være mulig med statisk HTML.

En av nøklene til moden programmering vurderer alle mulige stier gjennom koden din. For eksempel, hva hvis nei person nøkkelen er tilgjengelig? Kanskje spørringen ble utelatt helt. I så fall vil en feil sikkert bli kastet, som person nøkkelen vil ikke eksistere. Hva er løsningen? Selv om det er sant at dette ikke er noe mer enn et enkelt eksempel, er det fortsatt viktig å vurdere alle mulige utfall. La oss gi en standard.

 

Selv om det er mer strømlinjeformede måter å tillate dette, er eksemplet ovenfor et utmerket utgangspunkt. Det er også din første introduksjon til betingede uttalelser. Tilnær deg koden din på samme måte som du vil håndtere scenarier i virkeligheten. For eksempel, "Hvis vi er ute av melk, så gå til butikken. Ellers, bli hjemme."Denne tankegangen kan oversettes til PHP, ved hjelp av følgende logikk:

$ outOfMilk = true; hvis ($ outOfMilk) echo 'Å gå ut i butikken.';  ellers echo 'Frokost serveres.' 

I denne koden vil bare en enkelt tekstlinje bli skrevet ut på skjermen. Verdien av variabelen (en dynamisk verdi), $ outOfMilk, vil bestemme kontrollstrømmen.

Tips: For å erklære variabler i PHP, før noe navn med et dollarskilt. Som best praksis velger du lesbare variabelnavn over kryptiske alternativer.

Tilbake til forrige eksempel, så lenge som $ _GET [ 'person'] er satt (tenk på dette som et pseudo-navn for "er tilgjengelig"), og opprett deretter en ny $ person variabel lik verdien. Ellers gjelder en standard. Hvis du kommer tilbake til nettleseren, bør den nå fungere riktig, uansett om person nøkkelen finnes i spørringen.

Sikkerhet

Dessverre er vi fortsatt ikke hjemmefrie. En viktig programmering beste praksis er å plassere sikkerhet i forkant av hver handling. Selv med dette utrolig grunnleggende eksempelet har vi åpnet døren til et av de mest utbredte sikkerhetsproblemene på nettet: XSS (Cross-Site Scripting). En sann forståelse av dette er helt utenfor omfanget av denne innledende leksjonen (hele bøker er skrevet på den), men her er en grunnleggende illustrasjon: hva hvis $ _GET [ 'person'] er lik, ikke en streng, men et skript?

http: // localhost: 8888 / person =

Fordi denne verdien ikke har blitt sanitisert, vises en varselboks ved utførelse, i noen nettlesere.

Webkitbaserte nettlesere (tror Chrome og Safari) gir nå beskyttelse mot slike angrep. Dette var imidlertid ikke alltid tilfelle, og er fortsatt ikke i Firefox og Internet Explorer.

Yikes! Vi kan ikke ha det. Mens det moderne samfunn dikterer at en mann er uskyldig inntil den er bevist skyldig, er det samme ikke sant for programmeringsverdenen. All brukerinngang er skyldig til sanitert! Her er et oppdatert eksempel som gjør dette:

 

Med denne modifikasjonen, bør noen forsøke et XSS-angrep, vil vi være klare! htmlspecialchars er en innfødt PHP-funksjon som oversetter ulike symboler til deres enhetens motordeler. & blir &, < blir <, etc. Dette gjør det til det perfekte verktøyet for å gi den ekstra sikkerheten.

Flott; Ingen skade gjort!


funksjoner

Mens PHP leveres med en overflod av innfødte funksjoner, vil det sikkert være tider når du trenger din egen. Heldigvis er de en flink til å skrive.

Tenk på en funksjon som et gjenbrukbart stykke logikk som kan abstraheres vekk, slik at det kan identifiseres og kalles, ved hjelp av et lesbart navn.

Kanskje du driver en nattklubb (ikke sannsynlig hvis du leser dette!), Og trenger en enkel måte å akseptere en persons fødselsdato på, og beregne om han eller hun er minst tjueen år gammel. En tilpasset funksjon vil være en utmerket måte å utføre denne oppgaven på.

Det første trinnet er å definere en ny funksjon, kalt isAdult. Funksjoner kan godta ekstern inngang, som deretter kan brukes på. Dette gjør at de returnerte dataene fra funksjonen er dynamiske. I dette tilfellet, for å avgjøre om en person er en voksen, må vi kjenne sitt fødselsår. Det siste trinnet er å returnere heller ekte eller falsk, avhengig av om nåværende år minus personens fødselsdato er minst tjueen.

funksjon erAdult ($ yob) $ currentYear = 2013; returner $ currentYear - $ yob> = 21; 

Det er egentlig ganske enkelt! Nå må vi bare sende det til bounceren. En funksjon kan utløses eller kalles ved å referere til navnet sitt, etterfulgt av et par parenteser: isAdult (). Men hvis funksjonen krever et argument, kan du spesifisere det innenfor disse parentesene, som illustrert nedenfor:

hvis (erAdult (1985)) echo 'Come on in!';  annet echo 'Vennligst la nå, før jeg ringer til din mor.'; 

Det er et klart problem med dette isAdult funksjon. Nåværende år har vært hardkodede. Sikker, det vil fungere i løpet av 2013, men hva med neste år? Det ser ut til at denne verdien også må være dynamisk. PHP gir en Dato funksjon, som kan brukes til å beregne inneværende år. Som sådan kan funksjonen oppdateres til:

funksjon erAdult ($ yob) $ currentYear = date ('Y'); returner $ currentYear - $ yob> = 21; 

arrays

Rask fremover noen måneder, og nå gjør nattklubben bedre enn noensinne. Faktisk gjør det så bra til det punktet at bouncer ikke kan holde tritt. Hans jobb kan være lettere hvis han i stedet kunne filtrere gjennom en gruppe mennesker om gangen.

Tenk på en matrise som en beholder for relaterte data. Du kan til og med referere til det som en liste: en liste over tweets, en gruppe familiemedlemmer, en rekke fødselsdatoer.

Et array i den nyeste versjonen av PHP (5.4) kan defineres ved hjelp av en kommaseparert liste innenfor parentes, slik som:

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

Denne singelen $ gruppe variabel inneholder nå flere fødselsdatoer. Verdier i det kan nås ved å spesifisere en indeks, for eksempel $ Gruppe [0]. Arrays er det vi refererer til som null-basert. I oversettelse betyr dette at det første elementet, eller nøkkelen, i arrayet vil ha en indeks på null. Som sådan, for å få tilgang til 1992-verdien, vil du referere $ Gruppe [2].

Nå kan bounceren raskt filtrere gjennom disse fødselsdatoene, og beregne om personen skal tillates eller avvises. EN for hver setningen kan brukes til denne typen filtrering.

$ gruppe = [1985, 1990, 1992, 1997]; foreach ($ gruppe som $ yob) hvis (erAdult ($ yob)) echo 'Kom igjen!';  annet echo 'Vennligst la nå, før jeg ringer til din mor.'; 

Legg merke til hvordan bounceren erklærer at fødselsåret for hver person i gruppe bør være inneholdt i variabelen, $ yob. Neste, som han gjorde før, passerer han den verdien av til isAdult funksjon, og fortsetter tilsvarende.

Det er imidlertid mulig at bounceren blir forvirret når han ikke har en sammenheng mellom personens fødselsår og deres navn. PHP tillater også associative arrayer, som gir den nødvendige funksjonaliteten for å knytte en gitt verdi med en nøkkel. Her er et eksempel:

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

Det er bedre. Som en ekstra bonus kan bounceren være litt mer vennlig til personen, nå som han vet navnet hans.

$ group = ['John' => 1985, 'Susan' => 1990, 'Joe' => 1992, 'Sara' => 1997]; foreach ($ gruppe som $ name => $ yob) hvis (erAdult ($ yob)) echo "Kom inn, $ navn!";  annet echo "Vennligst la nå, $ navn, før jeg ringer til din mor."; 

Når du lagrer strenge innenfor dobbelte anførselstegn, kan du knytte variabler i stedet for å bruke sammenkobling. Dette kan låne seg for en mer lesbar syntaks.


klasser

Objektorientert programmering er langt utenfor omfanget av denne opplæringen, men likevel fortjener klasser en omtale. For nå, tenk på dem som enkle beholdere for beslektede egenskaper og metoder. For eksempel, her er hvordan en klasse som representerer en enkelt person, kan se:

klasse Person offentlig $ navn; offentlig $ alder; offentlig funksjon __construct ($ navn, $ alder) $ this-> name = $ name; $ this-> age = $ age; 

Legg merke til det __construct () metode? Dette refereres til som en magisk metode, og vil bli utløst umiddelbart etter instantiering. Når denne metoden brenner, vil den akseptere et navn og en alder, og deretter legge den til objektet.

For å bruke denne klassen, prøv:

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

Dette vil skape en ny forekomst av Person klasse. Denne forekomsten, som er lagret i $ meg variabel, kan refereres til som et objekt. Nå er det ingenting som forbyder deg å lage flere forekomster av denne klassen - og i virkeligheten i virkelige verdensprosjekter, vil du! Klassen er bare en blåkopi.

På dette tidspunktet er klassen imidlertid ikke altfor nyttig. La oss legge til en metode eller funksjon for å utpeke en ektefelle til en person.

klasse Person offentlig $ navn; offentlig $ alder; offentlig $ ektefelle; offentlig funksjon __construct ($ navn, $ alder) $ this-> name = $ name; $ this-> age = $ age;  Offentlig funksjon gifter seg (Person $ ektefelle) $ this-> ektefelle = $ ektefelle;  $ me = ny person ('Jeff', 28); $ her = ny person ('allison', 28); $ Meg-> gifte seg ($ henne);

Denne endrede koden inneholder nå en gifte seg() metode som vil oppdatere a $ ektefelle eiendom på objektet. Nå har du en direkte forbindelse mellom de to personene.

Hvis et metodeargument føres av et klassenavn (Person $ ektefelle), referert til som typen hinting, dette angir at parameteren må være en forekomst av den oppgitte klassen, eller en feil vil bli kastet.

For å hente navnet på ektefellen min, kan du skrive:

ekko $ meg-> ektefelle-> navn; // Allison

Begrepet objektorientert programmering går mye dypere enn dette, men gjør det enkelt for nå. Det hjelper å tenke på klasser som entallige substantiver: en tweet, bruker eller kunde eller fil.

Sann forståelse for dette mønsteret kommer bare med tiden.

Hands-On

Sett dine nye funn ferdigheter til testen. Hvordan kan du gå om å registrere og vise tweets for en bruker på siden? Vel, det første trinnet kan være å definere en klasse som representerer en singel kvitring. Denne klassen skal lagre egenskaper for tweetens kropp, samt publiseringsdato. I tillegg skal det sørge for at tweetets kropp ikke overstiger 140 tegn. Her er en første stab i en slik klasse:

klasse Tweet offentlig $ body; offentlig $ pubDate; offentlig funksjon __construct ($ body) $ this-> setBody ($ body); $ this-> setPubDate (ny DateTime);  offentlig funksjon setBody ($ body) if (strlen ($ body)> 140) kaste ny InvalidArgumentException;  $ this-> body = $ body;  offentlig funksjon setPubDate (DateTime $ date) $ this-> pubDate = $ date-> format ('Y / m / d H: i: s'); 

Selv om det i utgangspunktet kan virke overveldende, gi dette kodestykket litt studier, og prøv å forstå hva som skjer hvert trinn på veien. Du kan finne ut at det er ganske lesbart!

En interessant ny funksjonalitet stammer fra setBody metode. Hvis den oppgitte teksten overstiger 140 tegn, som vi kan beregne ved hjelp av PHP strlen funksjon, da bør vi ta unntak til det, fordi det bryter reglene for en tweet. Et unntak kan kastes ved hjelp av syntaksen, kaste ny ExceptionType.

Nå som vi har en anstendig nok container for en tweet, kan vi lage et par tweets, lagre dem i en matrise, og så til slutt gi dem på siden, ved hjelp av en for hver uttalelse.

$ tweets = []; # legg til to nye tweets til array $ tweets [] = new Tweet ('Going to the store.'); $ tweets [] = new Tweet ('Tilbake fra butikken!'); # Filter gjennom, og vis på side. foreach ($ tweets som $ tweet) echo "

$ Tweet-> legeme

"; ekko "

Skrevet på: $ tweet-> pubDate

";

Når du ser utgangen i nettleseren, bør du se noe i tråd med:

Utmerket, men hvordan lagrer vi de tweets?


Oppbevaring

Så langt har du lært det essensielle: variabler, conditionals, funksjoner, arrayer, klasser. Det er mer å dekke, men du bør undersøke det på egen hånd, som behovet oppstår. Det neste trinnet i din læring er utholdenhet. For eksempel, hvordan kan du holde en logg over alle tweets? En tweet tjeneste som ikke gjør det huske tweets er en forferdelig! Dette er når ideen om databaser kommer inn i spill.

Tenk på en databasetabell som et Excel-regneark. Det kan ha et hvilket som helst antall felt, for eksempel personens navn, alder eller postadresse. Men PHP gir ikke denne typen lagring nativt. I stedet er det mest vanlige alternativet MySQL, som er verdens mest populære åpen kildekode database.

Installering av MySQL faller ikke inn under omfanget av denne opplæringen. I stedet, se denne opplæringen på Nettuts + for en komplett gjennomgang.

Her er et forenklet eksempel for å komme i gang med sikker henting av rader fra en databasetabell. Ikke bekymre deg hvis det virker overveldende. MySQL er ditt andre nye språk for å lære. PHPs PDO API, så vel som spørrespråket, krever selv tid til å lære.

Først må du ha en måte å koble til databasen.

funksjonstilkobling () $ conn = ny BOB ('mysql: host = localhost; dbname = DB_NAME', 'USERNAME', 'PASSWORD'); $ conn-> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION); returner $ conn; 

PDO er en av PHPs tre tilgjengelige APIer for tilkobling til en MySQL-database.

Deretter legger vi til en hjelperfunksjon for å hente alle poster fra tweets-tabellen. Vær oppmerksom på spørsmål metodens argument, VELG * FRA tweets. Dette er et spesielt språk for å spørre databasen. I dette tilfellet bruker vi * symbol for å referere til alle rader. Som sådan velger vi alle rader fra bordet, kalt tweets.

Denne funksjonen forbereder spørringen, og henter deretter det komplette resultatsettet.

funksjon fetchTweets ($ conn) $ stmt = $ conn-> spørring ('VELG * FRA tweets'); returner $ stmt-> fetchAll (PDO :: FETCH_OBJ); 

Nå, med scenen sett, trenger vi bare å ringe funksjonene, tilsvarende.

# Koble til DB $ conn = connect (); # Hent alle rader fra deltakerbordet var_dump (fetchTweets ($ conn));

En enkel måte å dumpe innholdet til en variabel er gjennom bruk av var_dump funksjon. Hvis du passerer produksjonen av fetchTweets ($ conn) til denne funksjonen, når du ser den i nettleseren, ser du noe i tråd med:

var_dump er nyttig for feilsøking, men for produksjonsformål er det bedre å filtrere gjennom resultatene og gjøre dem riktig på siden. De for hver uttalelse, som du allerede er kjent med, vil håndtere jobben ganske pent!

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

$ Tweet-> legeme

"; ekko "

$ Tweet-> pubDate

";

Konklusjon

Som med hvilken som helst ferdighet krever flytende PHP ikke noe mer enn din tid. Det kan ta hundrevis av timer å helle, men det er greit. Dette er gøy, ikke sant? Det bør være!

Den beste måten å lære er å gjøre. Bygg kaste bort prosjekter som de går ut av stil! Teknikkene som er skissert i denne opplæringen, tar deg gjennom første fase, men sikkert når ferdighetene dine utvikler seg, går du videre til mer avanserte emner, for eksempel PHP-rammer, designmønstre og testdrevet utvikling. Ha det gøy!

Foreslåtte Tuts + Premium Resource

  • Den moderne PHP-utvikleren
  • PHP Fundamentals
  • SQL Essentials