DOUG LLOYD: Så vi har gjort mye arbeid i C, og C er en veldig kul språk fordi det gir deg evnen til å dykke virkelig lavt nivå i programmene dine. Vi kommer til å gjøre ting som virkelig minutt som manipulerer individuelle byte minne. Recall at pekere virkelig tillate oss at fleksibilitet. Men trenger vi alltid å ha at finkornet detaljnivå i våre programmer? Sannsynligvis ikke, ikke sant? Og hvis vi skal ha en avveining mellom å være stand til å gjøre virkelig, virkelig minutt ting og virkelig, virkelig store ting som vi ikke trenger å tenke om, har vi ikke å implementere disse virkelig store ideer hvis de er allerede innebygd for oss, generelt for å bygge store programmer eller store prosjekter, vi sannsynligvis kommer til å feile på siden av å ha flere språk ting bygget i for oss, i stedet for å lavnivå ting. Og det er der PHP egentlig kommer inn. Nå er en av grunnene at vi lærer PHP i CS50 er at det er tungt inspirert av C. Og faktisk, etter min mening, Det er egentlig to progenitor språk som er veldig vanlig nå til dags. C og LISP. Og de er progenitor språk fordi alle andre moderne programmerings språk som har utviklet siden da er inspirert ved den ene eller den annen syntaktisk. PHP er veldig lik syntaktisk til C, mens språk som Scheme, for eksempel, hvilke du kanskje har hørt om, er sterkt inspirert av et språk kalt LISP, som er en eldre språk. Så grunnen til at vi lærer PHP i CS50 er at, ved å kjenne C som fundamentalt som du gjør på dette punktet, plukke opp PHP, som gir deg evnen til å gjøre mye høyere nivå ting enn C gjør, er ikke at mye av et hinder, fordi du allerede har grunnleggende idé om syntaks. C har eksistert i nesten 45 år på dette punktet. PHP har eksistert i ca 20 år. Og ved at 25 år i mellom, programmerere bestemt at de ville mye heller ha høyere nivå evner, og feilene og kamper av de 20 årene i mellom førte til PHP og andre moderne språk. PHP er et stort utvalg av språk for programvare som allow-- for programvare at-- hvor du trenger å gjøre ting som i C er faktisk komplisert. Så for eksempel, jobber med strykere i C er meget komplisert, fordi som vi vet, strykere i C er egentlig bare matriser av tegn. Det er ikke et innebygd datatype. Eller kanskje mer fundamentalt, noe vi ikke selv dekke i C, hva om du trenger å gjøre noen datanettverk? Greit? C har evnen til å gjøre det, men det er så uforståelige og så vanskelig å faktisk gjøre. Ville det ikke være fint om språk hadde en innebygget, lett vei å gjennomføre nettverk? Og PHP er et språk som gjør det, eller letter det, ganske mye mer. Som jeg sa, er PHP veldig tungt inspirert av C. Syntaksen er veldig lik. Og så det skal forhåpentligvis gjøre Overgangen fra den ene til den annen litt mykere enn noen andre språk kan være. For å begynne å skrive PHP, bare åpne opp en fil med php filtypen. Teknisk er dette ikke faktisk nødvendig, men hvis du vil ha ting som syntaks utheving i IDE, så denne typen navn eller variabelnavn, funksjoner, du vet, søkeordene i språket er uthevet i en bestemt farge, du vanligvis ønsker å navngi filene dine med en bestemt filtype. Så vi har kalt vår fil med en .php forlengelse, men da også med PHP, alle PHP-koden vi skriver i denne filen må være omsluttet av disse PHP skilletegn som vi ser her på skjermen. Vinkelbrakett? Php å starte. Så skriver vi alle våre PHP kode som vi ønsker i mellom. Og så ? vinkel brakett for å lukke. Hvis vi ikke gjør dette, så hva kommer til å skje? Det kommer ikke til å krasje. Det kommer ikke til å virkelig ødelegge vårt program. Men det er ikke til å ha effekten som vi ønsker. Hva kommer til å skje, egentlig, er at når vi prøver og kjøre dette programmet, alt ikke mellom disse skilletegn kommer til å bli skrevet ut ordrett. Det kommer ikke til å faktisk utføre koden, det kommer til å like skrive det ut ordrett. Nå hvorfor er det slik? Så C er det som er kjent som et kompilert språk. Du er sikkert kjent med det skritt å lage programmene dine, snu .c filer og .h filer i en enkelt kjørbar med make, særlig hjelp Clang som vår kompilator. PHP, skjønt, ikke har denne tilsvarende. PHP er det som kalles en tolket språk. Og hva betyr det? Vel, det betyr at vi ikke trenger å konvertere vår kildekoden til nuller og enere på forhånd. Snarere er det et program, som også kalles PHP, som forstår PHP og kan liksom gjøre det på sparket. Det er egentlig ikke helt nøyaktig, men det er en ganske god analogi av hva som skjer. Det er å tolke de nuller og enere på fly. Og så hvis den ikke vet hvordan å behandle noe, hvis den ikke vet hvordan de skal prosessen PHP, har du sannsynligvis ønsket å sette denne teksten i det, ikke sant? Du har sannsynligvis ønsket å sette inn koden i der, selv om det ikke er mellom PHP-- PHP skilletegn. Men-- så det ikke kommer for å slette den for deg, det er bare kommer til utgangspunktet forkaste det. Så det kommer til å skrive ut det ut til skjermen. Dette virker som det er en dårlig ting, men egentlig er det kommer til å bli en virkelig god ting, som vi vil se når vi snakker om PHP webutvikling, fordi det betyr at vi kan flette PHP og HTML. Vi kan bruke dem sammen for å skape en mer dynamisk nettside. Men mer om det i video på PHP webutvikling. Så hva er syntaksen til PHP? Det er det denne videoen handler om. La oss snakke om det. Så for å starte opp, variabler. PHP variabler eksisterer. Det er bare to store forskjeller fra C. Den første er at det er ingen type Specifier. Vi trenger ikke å si int, røye, float, alt det der. Vi trenger ikke å gjøre det lenger. PHP er et moderne språk. Den kan finne ut hva du er prøver å gjøre eller lage en best gjette på hva du prøver å gjøre. Så det er ganske fin. Den andre tingen er at alle variable Navnene må starte med et dollartegn. Det er bare noe å venne seg til. Det er litt rart, fordi det er slik at PHP kan forstå hva er en variabel og hva som ikke. Så hver variabelnavn starter med et dollartegn. Så i C kan vi si noe som dette, int x = 54. Vi trenger ikke å gjøre det lenger i PHP. Vi kan bare si $ x = 54. Og vi kunne si, for eksempel i C, hvis vi hadde pund-inkluderte CS50 .h header fil, vi kunne si string setning = "Dette er CS50." Vi trenger ikke å gjøre det i PHP, though. Vi kan bare si $ frase = "Dette er CS50." Og faktisk, er streng nå en innebygd datatype i PHP, eller snarere PHP forstår hva en streng er. Det er atskilt fra en rekke tegn som det er i C. All din favoritt betinget utsagn fra C er fortsatt tilgjengelig for deg å bruke. Så ingen stor overgang der. Vi kan say-- vi kan ha hvis utsagn som dette. Hvis $ y 43, eller $ z = 15. Så det er ganske grei. Vi kan ha hvis og annet. Vi kan ha hvis og annet hvis. Og legg merke til noe ganske fint her, og dette er liksom en av dem Fordelene med PHP versus C, varsel hvilken funksjon vi ikke bruker her? Vi bruker == sammenligne en variabel, $ navn, til en streng. Vi kunne ikke gjøre det i C, ikke sant? Vi måtte bruke en funksjon som heter StrComp eller StrEndComp eller noen av dens relaterte fettere. Og så allerede ser vi disse fordelene. Vi trenger ikke å gjøre noe som dum eller kanskje unintuitive som kaller en funksjon kalt StrComp hvis jeg bare ønsker å teste hvorvidt en verdi som tilsvarer en streng. Jeg kunne bare bruke lik likemenn, at jeg kunne gjøre noe annet. Så det er en fordel. Noen ganger, forresten, kanskje du se annet hvis som ett ord, ElseIf. Og det er OK i PHP også. Så noen ganger kan du se det. Det er ikke en skrivefeil. PHP faktisk forstår ElseIf. Jeg vet ikke hvorfor de besluttet å gjennomføre det, men som vi har sett mange ganger gjennom våre videoer så langt, vi programmerere elske det hvis vi kan gjøre ting raskt, så å bli kvitt det plass er tilsynelatende en stor fordel. Så det er om og ElseIf. Vi har også trefoldig operatør, tilbakekalling spørsmålstegn tykktarm, for veldig kort dersom annet eller betinget forgrening. Og tilsynelatende, i dette, hva vi prøver å gjøre her er tilordne variabelen $ brev enten sant eller usant, avhengig av om $ var er en bokstav. Så dette er ganske lik isalpha at vi er kjent med fra C. Dette er liksom tilsvarende i PHP. Funksjonen er tilsynelatende kalt ctype_alpha, men det er hvordan vi gjør det i PHP. Så alt dette kommer til å være det, hvis $ var er et brev, er $ brev sant. Hvis $ var ikke et brev, $ brevet er falskt. Vi har også bryter uttalelser fortsatt. Vi husker de fra C også. På toppen er det, det er hvordan vi gjør noe som get int eller få streng. Så PHP har den innebygget. Vi trenger ikke CS50 biblioteket lenger. Vi kan bare bruke funksjonen readline. Hva som kommer til å gjøre er å skrive ut ut meldingen "Din tilstand, please "og deretter blinkende teksten venter for brukeren å legge inn litt informasjon. Nå merke til hva annet vi kan gjøre med bryteren. Hvis du har brukt det før, du husker kanskje at bryteren er begrenset ganske mye til heltall og tegn, men nå kan vi bruke strenger. Og faktisk, bryter uttalelse i PHP er ganske mye mer fleksibelt enn sin fetter fra C. Loops. Akkurat som conditionals, alle dine gamle favoritter er der fortsatt. Vi har mens løkker som teller fra 1 til 100 i dette tilfellet. Vi har å gjøre mens sløyfer som teller fra 1 til 100, og vi har for sløyfer som teller fra 1 til 100. Så ingen store spranget der. Syntaksen er ganske mye nøyaktig det samme, bortsett fra nå vi bruker dollartegn variabel i stedet erklære heltallsvariabler eller noe sånt for våre skranker. Her er der ting blir mye bedre enn C, skjønt. Arrays. Så husker da vi var snakker om C, for for oss å vokse og krympe sett av informasjon, vi trengte for å sortere for mislighold til denne ideen om en lenket liste, fordi C arrays ble fikset i størrelse. Vi kunne ikke krympe dem. Vi kunne ikke dyrke dem. Vi måtte omfordele minne og gjøre all denne galskapen eller bruk lenkede lister, som ta opp ganske mye mer plass. Men i PHP, arrays er ikke løst i størrelse lenger. De kan vokse, og de kan krympe. Så igjen, disse 20 årene som eksisterte mellom den første utgivelsen av C og den første utgivelsen PHP, vi bestemte oss for det, vet du, det ville være veldig stor hvis vi kunne gjøre dette. Og så vi implementert dette. Så PHP arrays ikke er løst i størrelse, og fordi PHP egentlig ikke har programmerer mot fronten forestillinger om typer, vi kan blande datatyper i våre matriser også. Så vi trenger ikke engang å bruke alle heltall eller alle flytende poeng, vi kan ha en blanding av alle forskjellige typer i en enkelt rekke. Erklærte en matrise er ganske grei. Det er akkurat som alle andre variable. $ nums = matrise (1, 2, 3, 4), matrisen er en funksjon som er innebygd i PHP som vil skape en matrise for deg. Dette skaper en matrise av fire verdier, Tallene i dette tilfelle kalles $ nums. Og det er mer enn én måte å gjøre det. Og vi kommer til å ser dette mye i PHP. PHP er utviklet av mange forskjellige mennesker og vokser og vokser og vokser. Det er vanligvis ikke bare to eller tre måter å gjøre noe i PHP, er det vanligvis som 10 eller 20. Her er bare en annen vanlig måte å erklære en matrise. $ nums = hakeparentes 1, 2, 3, 4. Så dette er liksom lik C vinkel br-- klammeparentes notasjon, heller. $ - eller ville det være int nums torget parentes tilsvarer krøllete brace 1, 2, 3, 4. I PHP er det $ nums = torget braketter en, to, tre, fire. Men begge disse eksemplene her gi meg en rekke på fire i dette tilfellet heltall. Hva om jeg ønsker å tråkle noe på nå? Vel jeg kan bare si $ nums 4, som igjen, er vi fremdeles telle fra 0 her i PHP, ville være den femte element i matrisen. Jeg kan bare si det. Jeg kommer ikke til å lide en SEG utsette, fordi min matrise er bare kommer til å vokse for å imøtekomme det. Det er ganske fin, ikke sant? Og faktisk, jeg trenger ikke engang å spesifisere hvor jeg ønsker å sette den. Jeg kan bare si dette, og bare Hev den rett videre til enden, eller jeg kunne selv bare si $ nums 20 eller 1000. Det spiller egentlig ingen rolle. Det er fortsatt bare kommer til å Hev den rett på til slutten. Så jeg kan vokse, og as-- vi er ikke kommer til å dekke det inn her, men jeg kan spleise eller stripe elementene som kommer ut av matrisen, så vel og rekken vil krympe for å imøtekomme som nå mangler eller tomrom. Det er en annen måte å tråkle noe på en matrise, som er en funksjon som kalles array_push. Så igjen, bare denne ideen om å være stand til å gjøre ting mange forskjellige måter. Så vi har sett tre forskjellige måter nå å tråkle et annet element på en matrise. Så dette legger et annet element til enden av $ nums matrisen. Og vi kan blande opp våre datatyper. Så jeg kunne ha en rekke ikke 1, 2, 3, 4, men 1, sann, 3, 4, hvor sant er en boolsk, og deretter hvis jeg ønsker å tråkle på et annet element til den oppstillingen, kanskje en streng, strengen "fem," jeg kunne gjøre det. Og nå er min matrise ville være 1, sann, tre, fire, fem. Ordet fem, ikke heltallet 5. Så stor fleksibilitet der. Fleksibiliteten blir enda bedre, skjønt, fordi PHP har støtte for noe kalles en assosiativ array. Og vi slags vagt snakket om assosiative arrays i C i sammenheng med nøkkeltabeller, fordi hva assosiative matriser er egentlig alt om gjør nøkkelen valuta pair kartlegginger. Og i dette tilfellet, hvis keys-- Vi er kjent med arrays fra C, tastene er indeksnumrene. 0, 1, 2, 3. Og verdiene er det vi finner at matrise 0, array 1, array 2, og så videre. Så tastene er indekser, og verdiene det som er i den oppstillingen sted, spesifisert av at indeksen. Men i PHP, trenger vi ikke å gjøre dette oppfatningen av matrise 0, array 1, array 2 lenger. Vi kan nå bruke faktiske ordene å kartlegge nøkler til verdier. Og så jeg kunne si noe sånt som dette. Jeg kunne lage en matrise med hakeparentes syntaks som følger. $ pizza = hakeparentes "ost" og deretter denne typen dobbeltpilen notasjon, 8.99, "pepperoni," pil 10.99-- 9,99, og så videre. Og så hva skjer her? Hva er det jeg faktisk gjør? Jeg oppretter nøkkelverdi pair kartlegginger. Så i stedet for å si, for eksempel, pizzaer 0, biter 1, pizza 2, Jeg kan nå si pizza ost, pizza pepperoni, og henviser til verdiene forbundet med dem. Så her er våre nøkler i grønt. Ost, pepperoni, grønnsak, bøffel kylling. Her er en pil som gjør dette nøkkelverdi paret kartlegging. Og så her er verdiene på denne matrisen sted. Så det er som å si matrise 0 tilsvarer 8,99. Nøkkelen er 0. Verdien er 8.99. Jeg kan nå si matrise ost, eller i dette tilfellet pizza ost, ost er nøkkelen, og hva jeg finner på pizza ost er 8.99. Det er den verdien som jeg finner der. Så jeg kan si ting liker. $ pizza ost = 7,99. Sier jeg har et salg. Jeg ønsker dis-- jeg ønsker å slippe prisen av osten pizza. Eller jeg kan bruke vegetabilsk pizza som en del av en tilstand, eller jeg kan legge til et nytt element til min array, akkurat som jeg kunne gjøre tidligere. Jeg kan legge til et nytt element til dette assosiativ array med nøkkelen "bacon" og verdien 13,49. Men denne type innfører et problem, hvis du tror på det et sekund. Hvordan ville vi iterere gjennom denne array? Høyre? I C, ville vi bare ha en for loop typisk at ville kjøre fra 0 til størrelsen på matrisen minus en. Matrisen har n elementer i på, gyldige indekser er 0 til n minus en. Slik at vi kunne bruke en for løkke til gå gjennom hvert enkelt element. Men det er egentlig ikke tilfelle lenger, ikke sant? Nå hvor vi har nøkkelverdi pair kartlegginger hvor tastene er ord, hvordan skal vi iterere over alle ordene? Vel, heldigvis, har PHP en måte å håndtere dette også, og så skal vi hoppe tilbake til looper for en andre å innføre en fjerde slags løkke som eksisterer i PHP kalles en foreach loop. Og hva en foreach løkke gjør er det er i utgangspunktet den samme ideen. Du kan bruke den for noen form for array. Men det er i utgangspunktet den samme ideen som en for loop, bortsett fra i stedet for å bruke indekstall, du bare har denne rare syntaks der du ringe hver enkelt element et navn for formålene i denne sløyfen. Slik at i dette tilfellet, foreach ($ matrise som $ key). I utgangspunktet, så at kommentaren notater, innsiden av at foreach loop, det kommer til å gå over hver enkelt element i matrisen $, noe som er typisk kommer til å bli en assosiativ array, men kan virkelig være noen form for matrise at du vil ha i PHP. Og hver gang at i en for loop du kanskje har sagt $ array-klammer $ i, kan du bare si $ nøkkel. Slik at $ tast blir et alias for hver indeks av PHP assosiative array, og slik at du kan bruke det sånn. Så for eksempel, har vi nå fikk vår pizza array. Jeg har på en måte gjemt det inn i hjørnet der slik at vi kan bruke den til å gjøre en rask eksempel. Hvis jeg sier foreach ($ pizza som $ pizza), vel, hva skjer? Vel, jeg kommer til å iterere gjennom hver enkelt element i matrisen $ pizza, og på den måten, jeg kommer til å ringe hvert element, når jeg er inne av kroppen av det for sløyfen, $ pizza. Så det er på en måte en stand-in, husker, at $ pizza er en stand-in for å si $ pizza klammer $ i hvis vi bruker en for loop, der vi kan gå fra $ i = 0 til i dette tilfellet $ i = 3. Hvis vi ikke hadde nøkkel verdi par her, vil dette være elementet 0, 1, 2, 3, og vi vil bruke en for loop å gå $ pizzaer 0, $ pizza 1, $ pizza 2, $ pizzaer 3. Så nå bare $ pizza vikarierer for den enkelte tast. Så hva dette kommer til å skrive ut? Jeg skriver ut $ pizza. Hva skal jeg finne at-- hvis jeg skriver ut $ pizza, $ jeg? Høyre? Hvis jeg kommer til å skrive ut den ed element av pizza, hva skal jeg skrive? Jeg kommer til å skrive ut verdier ved denne plasseringen, ikke sant? Som om vi gjorde dette i sammenheng med C, vi vanligvis ikke bruker vår iterator variabel, int i = 0, i er mindre enn 3, i ++, for å skrive ut 0, 1, 2, 3. Vi skriver ut matrisen 0, matrise en, array 2, array tre. Og så hva dette skrives ut er denne. Det er en liste over priser. 8.99, 9.99, 10.99, 11.99. Nå en rask kommentar her. En foreach løkke ikke nødvendigvis skrive ut ting i orden. Det er ikke garantert. Det gjør vanligvis. Det er vanligvis basert på rekkefølgen hvilke elementer legges til matrisen, så bare bærer det i tankene. Det kan ikke være i orden. Men en foreach løkke vil reagere over hver enkelt element av tabellen gjelder. I dette tilfelle igjen, denne matrisen er $ pizza. Jeg kan endre syntaksen, men hvis Jeg ønsker både nøkkelen og verdien. I stedet for å si $ pizza som $ pizza, kan jeg si dette. Og hvis du ser på hva jeg har uthevet i grønt her, det ser ut som en sentral verdi par kartlegging. Og så hvis you-- selv om du ikke er helt sikker på hva det kommer til å gjøre, du kan sikkert gjette at $ topping kommer å være nøkkelen i denne saken og $ prisen skal være verdien. Så jeg erstatte nå hvert element fra $ pizza som en viktig verdi-par, og nå kan jeg referere til nøkkelen og verdien, som kanskje godt med, for eksempel som følger. "En hel" - dette er mye av utskrift skjer her-- "En hel" topping "pizza koster $" pris, og deretter Jeg skrive ut en periode og en backslash n. Så nå, varsel igjen har jeg tilgang til en nøkkel, $ pålegg, og en verdi, $ pris. Så kan du gjette hva dette kommer til å skrive ut? Det er mye av trykte uttalelser, men det er bare en backslash n, så det kommer til å skrive ut noe på en entire-- på en eneste linje med kode. Hvis jeg kan referere til nøkkelen og verdien, da nå, i stedet for bare å være i stand for å skrive ut prisene, Jeg kan skrive ut noe sånt som dette. "En hel ost pizza koster $ 8.99." Og nå bruker jeg all keys-- ost, pepperoni, grønnsaker, buffalo chicken-- og verdiene. 8.99, 9.99, 10.99, 11.99 So det er bare en annen måte å gjøre en foreach løkke at i stedet for bare å gi deg tilgang til verdiene, det bare gir you-- det gir deg tilgang til nøkler og verdier. Så skrive ut informasjon. Jeg har allerede gjort det et par forskjellige måter, har du kanskje lagt merke til. De to funksjonene vi har først og fremst sett er print og ekko. Og for ganske mye alle praktiske og formål, de er akkurat det samme. They're-- det er en veldig subtil forskjell det er ikke engang verdt får inn, men i utgangspunktet overalt du kan bruke utskrifts du kan sikkert bruke ekko i tillegg. Og det er ikke bare to. PHP har mye forskjellig måter å skrive ut ting ut, og det har også måter å integrere variabler i midten av strengen. Så husker fra C, gjør du huske hvilken funksjon vi kan bruke til å erstatte variabler inn i ting vi ønsker å skrive ut? Du har sannsynligvis bruke denne fungere ganske mye. printf, ikke sant? Så dette er hva vi hadde før innsiden i forbindelse med vår foreach løkke. Vi hadde disse fem separate utskrifts uttalelser, fordi det var den eneste Slik jeg egentlig visste på den tiden hvordan du skriver ut meldinger. Jeg visste ikke hvordan du kan integrere variabelen $ topping inn i min PHP kode. Vel, hvis jeg bare tatt en vill gjetning, printf, det faktisk ville ha fungert. printf er en funksjon som jeg kan bruke i PHP, akkurat som jeg kan bruke den i C. Og så noe som dette, printf, igjen, vi er kjent med det. Den første% s erstattes med verdien av $ pålegg. Den andre% s erstattes med verdien av $ pris. Og så jeg interpellating, som er bare en fancy måte si jeg stikker den variabler i denne plasseringen. Så jeg plugge inn $ topping der rød% s er og $ pris hvor den blå% s er, og da ville jeg får meldingen, "En hel ost pizza koster $ 8.99." Ikke den eneste måten jeg kan gjøre det, though. Kanskje jeg ønsker å bruke denne metoden. Dette er faktisk det som er mest vanlig kalt variabel interpellasjonen. Jeg kan bruke et ekko. Jeg kunne bruke en print også, så vi får se. Men hva som skjer her? Først av alt, jeg må unnslippe dollartegn. Fordi husk, når vi var faktisk skrive ut prisene på pizza, Jeg var faktisk å formatere dem som monetære tallene med et dollartegn. Men vi bruker dollartegn også å representere variabelnavn i PHP, og spesielt når jeg er ved hjelp av denne fremgangsmåten ifølge den krøllete brace variabel interpellasjon metoden, må jeg å unnslippe min dollartegn så det gjør ikke tror jeg snakker om en variabel. Det kommer til å faktisk, bokstavelig talt skrive ut et dollartegn. Så liksom analogize det til det du ser på slutten der. Det gjør faktisk ikke print backslash n, ikke sant? Den skriver ut en ny linje karakter. Dette er-- det er ikke til å print backslash dollartegn, det kommer til å skrive ut bare et dollartegn karakter. Samme ideen. Escape-sekvenser, hva disse tingene kalles. Men merker at jeg ikke gjør noen form for% s erstatninger, Jeg bare bokstavelig plugge i disse variablene. Og så i dette-- hva som ville skje her er at verdien av $ topping-- igjen bare tråd med det vi har vært snakker om så far-- ost ville få plugget inn der. Og $ prisen ville bli hva verdien er på pizza, klammer, ost, som var 8.99. Og så dette ville også skrive ut "En hel ost pizza koster $ 8.99." Og som jeg sa, jeg kunne bruke skrive ut her i stedet for ekko, og funksjonaliteten være ganske mye akkurat det samme. Det ville skrive ut det samme. Det er en annen måte å gjøre det, og dette er en annen fordel av PHP arbeider med strenger. Vi kan gjøre streng sammensetning. Vi kan gjøre dette i C, også, ved hjelp av en funksjon kalt strcat, men igjen, vi måtte kalle separate funksjoner. Det var hele dette rotet til å gjøre. Vi måtte pund-inkludere string.h. Det var en forestilling, ikke sant? Men nå kan jeg bare bruke denne dot operatør å sette sammen strenger sammen. Så jeg sette sammen "En hel" og så uansett verdi av $ topping er, og deretter en annen streng, "pizza koster $" og deretter sette sammen uansett verdi av $ pris er, og deretter helt på slutten jeg er vinne på perioden backslash n. Og så ville dette også skrive ut "En hel" - igjen, hvis vi snakker om den første element av at pizza array-- "En hel ost pizza koster $ 8.99." Periode, backslash n, igjen, med den $ topping og $ pris substituerende for hva vi hadde spesifisert i vår foreach sløyfe som nøkkelen verdi-par kartlegging. PHP kan håndtere funksjoner. Funksjonene var liksom integrert til C, som vi så. Som variabler, trenger vi ikke å spesifisere retur type funksjon, fordi det spiller egentlig ingen rolle. Og vi ikke angir datatyper av noen parametre, fordi de egentlig ikke saken, som vi har sett i PHP. Hver funksjon er innført med funksjonen søkeordet. Det er slik vi viser til PHP som hva vi snakker om er en funksjon. Og vi trenger ikke å avtale med hoved i det hele tatt, fordi tolken, PHP tolk, arbeider fra topp til bunn, uansett. Hvis det ser du kan gjøre et funksjonskall, det vil gå finne funksjonen samtalen, selv om det kommer senere. Men det kommer til å lese fra topp til bunn, slik at vi ikke trenger å spesifisere, her er der du starter. Du starter på linje 1 av din PHP og arbeid ned derfra. Så her er hvordan vi ville skape en funksjon som heter hard_square. Det tar tydeligvis en parameter, som jeg ringer $ x. Denne funksjonen er komplisert bare for å illustrere ulike ting. Vi har fortsatt returverdier. Jeg bruker en for loop her. Men det er i utgangspunktet bare, hva dette beløper seg til kun $ x ganger $ x. Det jeg egentlig gjør er bare å legge x 0 x ganger eller $ x null $ x ganger. Men det er effektivt nøyaktig samme som å multiplisere $ x ganger $ x. Jeg kan fortsatt returnere en verdi, i dette tilfellet $ resultat og jeg har laget en funksjon i PHP. Her er hvordan du kan bruke det i sammenheng. Så kanskje jeg er inne på noen PHP-fil. Legg merke i blått der som Jeg har brukt mine PHP skilletegn, vinkelbrakett spørsmålstegn php. Mellom disse er alle PHP som jeg ønsker å skrive. Så jeg tilsynelatende kommer til å get-- Jeg kommer til å spørre brukeren å gi meg et nummer, butikk som variabel, butikk i den variabelen $ x, hva de ga meg. Så jeg kommer til å ekko hard_square av denne verdien, og tilsynelatende kommer å tråkle på en ny linje også, og så senere skal jeg definere funksjonen hard_square så at når jeg gjør det ringe til hard_square, den vet hva jeg snakker om. Nå kunne jeg også gjøre noe sånt som dette. Dette er litt annerledes. Det er nesten nøyaktig det samme som det vi så før, bortsett fra i stedet for å si bare $ x der som parameter til hard_square, Jeg sier $ x = 10. Så dette er et eksempel på defensive programmering, vokter programmene dine mot ondsinnede brukere. Dette er en måte å gjøre noen feil sjekker at vi gjorde egentlig ikke har som et alternativ i C. Vi kunne aldri angi standardverdien av noe. Vi måtte alltid sjekke hvorvidt, for eksempel, hvis vi har gjort et kall til GetString, det var mest riktig hvis umiddelbart etter at vi sjekket det, sjekket vi om strengen at brukeren ga oss ikke er lik null, fordi vi ikke ønsker å starte arbeider med en null streng. Her, dette er en måte å gardere seg mot det. Hvis brukeren ikke gir oss noe liksom, hva skal vi gjøre? Vel, vil vi bare si hva de ikke gir oss, vi bare kommer til å plugge i 10 i stedet. Så hvis de ikke gi oss en verdi, bare bruke 10 som standard. Og så her, Legg merke til at jeg gjør Et kall til hard_square, men det er ingen rask til brukeren, ikke sant? Jeg bare gjør en tom samtale. Men min funksjon hard_square forventer en parameter. Hva dette kommer til å skrive ut? Det kommer til å skrive ut 100, ikke sant? Fordi brukeren ikke gi meg noe. Og så jeg bare kommer til å anta at 10-- 10 er standardverdien. Og så dette ville skrive ut ut 100 på sin egen linje. PHP-filer trenger ikke å være bare en enkelt fil. Du kan kombinere flere filer sammen, akkurat som du kan i C. måte Vi gjorde det i C var typisk å gjøre en # include å få header filer trakk. Vi gjør ikke det i PHP. Vi gjør noe som kalles require_once. Og så er det dette hele ting, hva er dette __dir__? Det er bare en spesiell variabel, eller spesielle konstant, virkelig, presiserer at det din nåværende katalog er. Og så det kommer til å se i den gjeldende katalogen for en fil som heter cs50.php i dette eksemplet her, og det kommer til å holde fast på at filen på toppen av PHP-programmet, forutsatt at du legger kreve gang linje på toppen av PHP-filen. Så PHP brukes primært, men ikke utelukkende, som et språk for web-basert programmering. Det er egentlig hvordan det kom til å være. Men det er en full språk, som vi har sett. Vi har sett stort sett alle de tingene at den kan gjøre det er lik C, og det kan gjøre en pokker for mye mer enn det. Men fordi det er en full språk og vi kan gjøre kommandolinjen programmering i den. Vi kan kjøre kommandolinjeprogrammer. Alt som kreves for å kjøre en kommando linjen program som er skrevet i PHP er at du har en PHP tolk. Så det er liksom analogt til ha en kompilator på systemet Hvis du ønsker å kompilere C-kode å slå den inn i kjørbare filer. Du må ha en PHP tolk som finnes på systemet ditt slik at du kan tolke PHP-filer. Antar du gjør, og vanligvis dette tolk kalles PHP, og det er som regel sammen med de fleste nedlastinger eller installasjoner av PHP at du kan komme på nett, og sikkert navnet på PHP tolk vi har i CS50, IDE. Alt du gjør er å skrive php fil. Og hva programmets kommer til å gjøre er det er kommer til å kjøre gjennom tolken, er det kommer til å ignorere alt som er ikke i mellom spørsmålet mark-- eller, vinkelbrakett spørsmålstegn php, PHP skilletegn, og skrive det ut, og det vil tolke og utføre kode innsiden av PHP skilletegn. Så la oss pop over til CS50 IDE og ta en titt på et par av PHP-filer, kjører et par PHP-filer, i kommandolinje-grensesnitt for CS50 IDE. Så her er vi i CS50 IDE, og jeg har tatt meg den frihet for å åpne en fil som heter hello1.php. Og tilsynelatende, innholdet i denne fil er bare PHP skilletegn der, og i mellom, echo ("Hei, verden"). Dette er en ganske enkel PHP program. Jeg skal bare bla nedover til min terminal-vinduet her, og jeg kommer til å skrive php hello1.php, trykk enter. Hallo verden. Det er nok det vi var forventer det skal gjøre, ikke sant? La oss gå opp og ta annet se på et program. hello2.php. Ganske mye det samme, Ikke mye som skjer her. Denne gangen, men jeg kommer til å be brukeren til å gi meg navnene deres. Jeg bruker som readline funksjonen igjen. $ name = readline. Det er spørsmål, "Hva heter du?" Tilsynelatende er jeg utskrift det på en egen linje. Og så, slik at linjen nedenfor som vil være rask der brukeren kan skrive navnet sitt. Og så bruker jeg en liten bit av variabel interpellasjon her på linje 3 å skrive ut "Hello" og hva brukeren taster. Så dette er analog til å si: Hei, komma,% s hvis vi bruker printf i C. Så la oss gå og tolke dette programmet. Så igjen, vil jeg ruller nedover til min terminal-vinduet. php hello2.php. Hva er ditt navn? Doug. Hei, Doug. Jeg har også en annen fil som heter hello3.php. Jeg kommer til å fjerne min skjerm med kontroll L, og jeg kommer til å gjennomføre det. Hva er ditt navn? Doug. Hei, Doug. Slik at virkemåten er identisk hello2.php, men hvorfor er det hello3.php? Vel, her er forskjellen. I dette tilfellet varsel at på en linje her, Jeg har noe som ikke er mellom PHP skilletegn. Jeg bare skriver out-- eller jeg bare skrev: "Hva heter du?" Når PHP-tolken ser dette, det har ingen anelse om hvordan du skal tolke det som PHP, og så i stedet for å mislykkes, det bare kommer til å spytte det ut. Så oppdager on line 3 nå, mitt kall til readline, det er ingen rask lenger. Jeg bare faktisk kommer to-- når PHP tolk ser dette, det kommer til å skrive ut "Hva er ditt navn?" Så det ser, oh, OK, here's-- alt annet kommer til å være tolket som PHP, så det er derfor dette fungerer. Jeg trenger ikke å nødvendigvis spørre brukeren to-- innsiden av readline, Jeg kan bare ha det utenfor av PHP skilletegn og tillate tolken å bare skrive det ut for meg. Så du trenger faktisk ikke bare har å ha ett sett med PHP skilletegn i programmet. Du kan faktisk ha flere av dem, å åpne og lukke dem etter behov. Så la oss ta en titt på et par programmer i CS50 IDE hvor vi illustrere denne ideen om å ha flere sett med avgrenset PHP. OK, så jeg har åpnet en fil her kalt add1.php. Og legg merke til hva som skjer her. Akkurat som før, jeg har en enkelt PHP satt av skilletegn. Jeg kommer til å skrive ut meldingen "Vennligst gi meg et tall." Så jeg kommer til å lese en linje og lagre den i variabelen $ num1. Så jeg kommer til å skrive ut på nytt. Gi meg et annet nummer. Les en linje fra brukeren, butikk hva de skrev i in $ num2. Legg dem sammen og lagre som resultere i en variabel kalt $ sum, og deretter skrive ut, "The Summen av disse to tallene er ", og deretter interpellate der variabelen $ sum. Så la oss bare kjøre denne gjennom tolk for å bekrefte at dette er hva vi forventer. php add1.php. Vennligst gi meg et nummer, tre. Vennligst gi meg et nytt nummer, fire. Summen av disse to tallene er syv. Det er tre pluss fire. OK? Så ikke noe veldig fancy der. Og nå kan vi åpne opp add2.php. Her har jeg fått et par PHP avgrenset sett det, ikke sant? Linje 1, 3-- linje 1 og 3 har ingen PHP skilletegn. Så når tolken ser dem, det er bare kommer til å spytte ut nøyaktig det jeg har skrevet der. Så det er der jeg er gjør alle mine spørsmål. På linjene 2 og 4, ser vi veldig kjent $? php slags skilletegn, slik at disse to linjene er kommer til å kjøre som PHP. Og så på linje 5, jeg har dette rare ting her, ikke sant? Denne vinkelparentes spørsmålstegn likhetstegn. Jeg vil også zoome inn litt lenger. Du kan se dette er hva jeg er snakker om rett der, dette $? =. Det viser seg at det er så vanlig at grunnen til at vi åpner opp et sett med PHP skilletegn er å skrive ut en verdi. Og det er alt vi kommer til å gjøre. Men det er enda forkortelse for det. $? = Er PHP stenografi for å si noe sånt som $? php echo summen av num1 og num2. Så dette er bare en annen forkortelse for det. Så hvis jeg kjører dette programmet, php add2.php. Jeg skal zoome ned litt. Vennligst gi meg et nummer, fire. Vennligst gi meg et annet nummer. Og siden jeg egentlig ikke bryr seg om datatyper i PHP, kan jeg si 4.8. Summen av disse to tall er 8,8. At funksjonen oppfører seg ganske mye akkurat det samme som vi forventer, også. Og jeg har en mer åpnet opp her kalles dice.php. Prøve dette igjen. Jeg har en mer her kalt dice1.php, som også ser, har den vinkelen brakett spørsmålet markere likhetstegn notasjon i det, men merker at i dette tilfellet er jeg kaller funksjonen rand, som du kunne forvente genererer et tilfeldig nummer. "Du rullet en", og det kommer til å beregne noen tilfeldige tall, mod 6 + 1. Så det vil gi meg nummeret i området fra 1 til 6. Husk at mod 6 ville gi meg et tall i området fra 0 til 5, men hvis jeg simulere terningkast, som er hva jeg gjør her, Jeg ønsker ikke disse terningene for å gå fra 0 til 5, jeg ønsker terninger som går fra 1 til 6. Og så dette er en måte å få meg i området fra 1 til 6. Jeg gjør dette to ganger. Så tilsynelatende jeg rulle to terninger i dette programmet. Så jeg skal tømme skjermen min, og jeg skal gjøre php dice1.php. Du rullet en 4 og 2. Og hvis jeg kjører programmet igjen, rullet du en 5 og en 5. Så hver gang jeg kjører programmet, Jeg får forskjellige tall, fordi hver gang jeg gjør Så det å begynne på nytt. Det kommer til å generere en ny sett av tilfeldige tall for meg. Så hvis vi er vant til kjørende programmer fra C, vi er vant til å skrive ./ den navnet på et program, ikke sant? Det er slik vi har gjort alt av våre programmer i C så langt. Vi kan gjøre dette i PHP samt ved å legge til noe som kalles en shebang til toppen av vår PHP-fil. Jeg vet det er slags et dumt ord. Det er en forkortelse for hash bang. Det er de to første tegnene der. Husk vi kaller utropstegn ofte en smell i informatikk. Det kan også være for skarpt smell. Det er et par måter å tolke det. Men det er i utgangspunktet en spesiell form av kommandoen som PHP tolk forstår som, oh, jeg vil ha du gjennomføre dette programmet, som er tilsynelatende / user / bin / php, som er faktisk der PHP tolk spesielt lever videre vårt system. Så it's-- hva som skjer her er tolken forstår, oh, Jeg tydeligvis ment å bruke i dette programmet for å kjøre denne filen. Og så det tillater deg å hoppe over trinnet for å måtte si php something.php. Det er en annen fangst her, som er at hvis vi ønsker at våre programmer til fungerer som forventet, vi trenger å gjøre noe som kalles en fil tillatelse endring. Og vi vil Vær så god og vi snakker litt litt mer om fil tillatelse endringer i vår video på MVC, men nok det å si at dette er det du trenger å gjøre for å gjøre din .php filer kjørbar. Så la oss ta en titt på dette som vårt siste eksempel over i CS50 IDE. Så her i IDE har jeg to filer i dette Katalog PHP som synes ikke å være kalt php. Jeg har en funksjon som heter add-- Jeg har en fil som heter add3 og en fil som heter dice2. Så la oss ta en rask se og åpne opp add3. Og som du kan se, i begynnelsen av filen min jeg har denne shebang, ikke sant? Denne hash mark utropstegn. Nå, vil du også kanskje Legg merke til at en eller annen grunn, Jeg har ikke noen syntaks utheving lenger, og dette er hva jeg antydet tidligere, som var at hvis jeg ikke nevne min fil Php, jeg har ikke den fordelen av syntax highlighting lenger. Denne filen er bare kalt add3. Slik at jeg kan kjøre den senere med ./ add3 og ikke ./ add3.php. Så reason-- det er fortsatt fint, det er fortsatt gyldig PHP, men det er ikke syntaks markert, fordi denne filen er ikke kalt something.php. Det er den eneste reelle forskjellen her, pluss shebang. Så la oss se hva som skjer når Jeg prøver og kjøre dette programmet. ./ Add3, akkurat som jeg ville gjort med C. Bash. ./ Add3 tillatelse nektes. Dette er hva du skal for å se om du har glemt å bruke kommandoen chmod til å endre tillatelsene for filen. Som det viser seg, vanlig PHP filer kan ikke bare bli henrettet. De kan tolkes, men vi er å gjøre noe litt annerledes her. Vi utfører det. Og så jeg må legge tillatelse henrettelses, chmod a + x til add3. Da kan jeg si ./ add3. Vennligst gi meg et nummer. 5, 6. Summen av disse to tallene er 11. Tilsvarende har jeg allerede CHMODet dice2, så jeg kan bare skrive ./ dice2, du rullet en 1 og en 1, du rullet 5 og 4, og så videre. Så det er ganske mye Ideen om en PHP syntaks, ikke sant? Det er mye å komme gjennom, jeg vet. Men forhåpentligvis du har sett nå at PHP er egentlig ikke så forskjellig fra C og virkelig gir oss muligheten å ta ting opp et hakk eller to. Vi har egentlig ikke trenger å bekymre deg for mye om-- vi egentlig ikke trenger å bekymre deg for mye om lavnivå detaljer vi måtte bekymre seg med C, ikke sant? Vi kan fokusere på høyere nivå ting som PHP tillater oss å gjøre og å ta for gitt at det vil fungere for oss. Så det gir oss muligheten til nå, overgangen fra C til PHP, å lage programmer som er mye mer kompleks og kanskje mye mer robust. Så jeg håper du har det gøy arbeids med PHP, og jeg er Doug Lloyd. Dette er CS50.