DOUG LLOYD: Så vi har gjort et stort arbejde i C, og C er en virkelig cool sprog, fordi det giver dig evnen til at dykke virkelig lavt niveau i dine programmer. Vi får at gøre ting, som virkelig minut som manipulere individuelle bytes af hukommelse. Husk på, at pointere virkelig tillade os, at fleksibilitet. Men gør vi altid nødt til at have at finkornet detaljeringsgrad i vores programmer? Sandsynligvis ikke, vel? Og hvis vi er nødt til en afvejning mellem at være stand til at gøre rigtig, rigtig minut ting og virkelig, virkelig store ting, som vi ikke behøver at tænke omkring, behøver vi ikke at gennemføre disse virkelig store ideer, hvis de er allerede bygget i for os, generelt til opbygning store programmer eller store projekter, vi sandsynligvis kommer til at fejle på siden for at have flere sprog ting bygget i for os, i stedet for at på lavt niveau kram. Og det er her, PHP virkelig kommer i. Nu en af ​​grundene at vi lærer PHP i CS50 er, at det er stærkt inspireret af C. Og i virkeligheden, efter min mening, Der er virkelig to progenitor sprog, er meget almindelig i dag. C og LISP. Og de er progenitor sprog fordi hver anden moderne programmering sprog, har udviklet Siden da er inspireret af den ene eller anden syntaktisk. PHP er meget ens syntaktisk til C, mens sprog som Scheme for eksempel, som du måske har hørt om, er stærkt inspireret af et sprog kaldet LISP, som er en ældre sprog. Så årsagen til at vi underviser PHP i CS50 er, ved at kende C som fundamentalt som du gør på dette tidspunkt, optagning PHP, som giver dig evne til at gøre meget højere ting niveau end C gør, er ikke at meget af en forhindring, fordi du allerede har Grundideen af ​​syntaksen. C har været rundt i næsten 45 år på dette tidspunkt. PHP har eksisteret i omkring 20 år. Og i den 25 år i mellem, programmører besluttet, at de ville meget hellere have højere niveau evner, og de fejl og kampe af de 20 år i mellem førte til PHP og andre moderne sprog. PHP er et stort udvalg af sprog til software at allow-- for software at-- hvor du nødt til at gøre ting, som i C er faktisk kompliceret. Så for eksempel, der arbejder med strenge i C er meget kompliceret, fordi som vi ved, strenge i C i virkeligheden kun arrays af tegn. Det er ikke en indbygget datatype. Eller måske mere grundlæggende, noget vi ikke engang dække i C, hvad nu hvis du skal gøre nogle computernetværk? Okay? C har evnen til at gøre det, men det er så mystiske og så svært at rent faktisk gør. Ville det ikke være rart, hvis det sprog havde en indbygget, nem måde at gennemføre netværk? Og PHP er et sprog, der gør det, eller letter, at en hel del mere. Som jeg sagde, PHP er meget stærkt inspireret ved C. Syntaksen er meget ens. Og så skulle det forhåbentlig gøre det overgangen fra den ene til den anden lidt blødere end nogle andre sprog kan være. For at begynde at skrive PHP, bare åbne op en fil med php fil forlængelse. Teknisk er det ikke faktisk kræves, men hvis du vil ting som syntaks fremhæver i IDE, så denne type navne eller variable navne, funktioner, du ved, de søgeord i sproget er fremhævet i en bestemt farve, du generelt ønsker at navngive dine filer med en bestemt fil forlængelse. Så har vi navngivet vores fil med en .php forlængelse, men så også med PHP, al den PHP kode vi skriver i, at fil skal være indesluttet i disse PHP afgrænsere, som vi ser her på skærmen. Vinkel beslag? Php til at starte. Så vi skriver alle vores PHP kode, som vi ønsker i mellem. Og så ? vinkel beslag til at lukke. Hvis vi ikke gør det, så hvad der kommer til at ske? Det kommer ikke til at gå ned. Det kommer ikke til at virkelig ødelægge vores program. Men det kommer ikke til at have den virkning, at vi ønsker. Hvad vil der ske, virkelig, er at når vi prøver og køre dette program, alt ikke mellem disse afgrænsere vil blive udskrevet ordret. Det kommer ikke til at faktisk udføre koden, det vil bare printe den ud ordret. Nu hvorfor det er tilfældet? Så C er hvad der er kendt som en kompileret sprog. Du er sikkert bekendt med det trin gøre dine programmer, dreje .c filer og .H filer i en enkelt eksekverbar med fabrikat, især ved hjælp af Klang som vores compiler. PHP, dog ikke har denne tilsvarende. PHP er, hvad der kaldes en fortolket sprog. Og hvad betyder det? Tja, det betyder at vi ikke behøver at konvertere vores kildekode til nuller og ettaller på forhånd. Snarere er der et program, som også kaldes PHP, der forstår PHP og kan slags gøre det på farten. Det er ikke rigtig præcis nøjagtig, men det er en temmelig god analogi af, hvad der sker. Det fortolke dem nuller og ettaller i farten. Og så hvis det ikke kender hvordan man behandler noget, hvis det ikke ved, hvordan man proces PHP, har du sandsynligvis ønskede at sætte denne tekst derinde, ikke? Du har sikkert ønskede at sætte koden i der, selv om det ikke er mellem PHP-- PHP afgrænsere. Men-- så det kommer ikke til at slette det for dig, det bare at gå til stort set kassere det. Så det kommer til at udskrive det ud til skærmen. Dette virker som det er en dårlig ting, men faktisk er det kommer til at være en rigtig god ting, som vi får se, når vi taler om PHP web udvikling, fordi det betyder, vi kan intersperse PHP og HTML. Vi kan bruge dem sammen til skabe en mere dynamisk webside. Men mere om det i video på PHP webudvikling. Så hvad er syntaksen for PHP? Det er, hvad denne video handler om. Lad os tale om det. Så for at starte ud, variabler. Eksisterer PHP variabler. Der er blot to store forskelle fra C. Den første er, at der er ingen type anvisning. Vi behøver ikke at sige int, char, float, alt det der. Vi behøver ikke at gøre det længere. PHP er et moderne sprog. Det kan regne ud, hvad du er forsøger at gøre eller lave en bedst gætte på, hvad du forsøger at gøre. Så det er ret nice. Den anden ting er, at alle variable navne nødt til at starte med et dollartegn. Det er bare noget at vænne sig til. Det er lidt underligt, fordi det er så at PHP kan forstå hvad er en variabel og hvad der ikke. Så hver variabelnavn starter med et dollartegn. Så i C vi måske sige noget som dette, int x = 54. Vi behøver ikke at gøre det længere i PHP. Vi kan bare sige $ x = 54. Og vi kunne sige, for eksempel i C, hvis vi havde pund-omfattede CS50 .h header-fil, kunne vi sige string sætning = "Dette er CS50." Vi behøver ikke at gøre det i PHP, selv om. Vi kan bare sige $ sætning = "Dette er CS50." Og i virkeligheden, streng er nu en indbygget datatype i PHP, eller rettere PHP forstår hvad en streng er. Det er adskilt fra et array tegn, som det er i C. Alle dine favorit betingede udsagn fra C er stadig tilgængelige for dig at bruge. Så ingen store overgang der. Vi kan say-- vi kan have hvis udsagn som dette. hvis $ y 43, eller $ z = 15. Så det er temmelig ligetil. Vi kan have, hvis og andet. Vi kan have, hvis og andet, hvis. Og bemærker noget ret nice her, og dette er slags en af ​​dem Fordele ved PHP versus C, varsel hvilken funktion vi ikke bruge her? Vi bruger == at sammenligne en variabel, $ navn, til en streng. Vi kunne ikke gøre det i C, ikke? Vi var nødt til at bruge en funktion kaldet StrComp eller StrEndComp eller sine tilknyttede fætre. Og så allerede vi ser disse fordele. Vi behøver ikke at gøre noget så dum eller måske unintuitive som kalder en funktion kaldet StrComp hvis jeg bare ønsker at teste om en værdi er lig med en streng. Jeg kunne bare bruge lig ligemænd, ligesom jeg kunne gøre noget andet. Så der er en fordel. Nogle gange, ved den måde, kan du se ellers hvis i ét ord, ElseIf. Og det er OK i PHP så godt. Så nogle gange er du måske se det. Det er ikke en stavefejl. PHP faktisk forstår elseif. Jeg ved ikke, hvorfor de besluttet at gennemføre det, men som vi har set mange gange hele vores videoer hidtil, vi programmører elske det, hvis vi kan gøre tingene hurtigt, så at komme af, at rummet er tilsyneladende en stor fordel. Så det er hvis og elseif. Vi har også den ternære operatør, tilbagekaldelse spørgsmålstegn colon, efter virkelig korte formular, hvis ellers eller betinget forgrening. Og tilsyneladende, i denne, hvad vi prøver at gøre her er tildele variabel $ brev enten sand eller falsk, afhængigt af om $ var er en alfabetisk karakter. Så dette er temmelig ligner isalpha at vi er bekendt med fra C. Det er en slags modværdien i PHP. Funktionen er tilsyneladende kaldet ctype_alpha, men det er hvordan vi gør det i PHP. Så alt dette vil være er, hvis $ var er et brev, $ brev er sandt. Hvis $ var ikke et brev, $ brev er falsk. Vi har også switch udsagn stadig. Vi husker dem fra C så godt. På toppen er der, det er, hvordan vi gør noget lignende get int eller få streng. Så PHP har der indbygget. Vi har ikke brug for CS50 biblioteket længere. Vi kan bare bruge funktionen readline. Hvad det kommer til at gøre, er at udskrive et budskab, "Din tilstand, please, "og derefter blinkende prompt og venter på at brugeren indtaster nogle oplysninger. Nu opdager, hvad der ellers vi kan gøre med kontakt. Hvis du har brugt det før, kan du huske, at kontakten er begrænset temmelig meget for heltal og tegn, men nu kan vi bruge strenge. Og i virkeligheden, switch-statementet i PHP er ganske lidt mere fleksibel end dens fætter fra C. Loops. Ligesom betingede, alle dine gamle favoritter er der stadig. Vi har mens sløjfer, der tæller fra 1 til 100 i dette tilfælde. Vi har gøre, mens løkker der tæller fra 1 til 100, og vi har efter sløjfer at tælle fra 1 til 100. Så ingen store spring der. Syntaksen er temmelig meget nøjagtig det samme, undtagen nu vi bruger dollar tegn variabel i stedet erklære heltalsvariabler eller sådan noget for vores tællere. Her er hvor tingene bliver en meget bedre end C, selv om. Arrays. Så husker, da vi var taler om C, med henblik på for os at vokse og skrumpe sæt af oplysninger, vi havde brug for at sortere for misligholdelse til denne idé om en linket liste, fordi C-arrays blev fastsat i størrelse. Vi kunne ikke skrumpe dem. Vi kunne ikke dyrke dem. Vi var nødt til at omfordele hukommelse og gøre alt dette vanvid eller bruge hægtede lister, som tage op ganske lidt mere plads. Men i PHP, arrays er ikke fast i størrelse længere. De kan vokse og de kan krympe. Så igen, disse 20 år, der eksisterede mellem den første udgave af C og den første udgivelse PHP, besluttede vi, at du ved, det ville være virkelig stor hvis vi kunne gøre dette. Og så vi implementeret dette. Så PHP arrays er ikke fast i størrelse, og fordi PHP ikke rigtig have programmør fremadvendte forestillinger om typer, Vi kan blande datatyper i vores arrays, også. Så vi behøver ikke engang at bruge alle heltal eller alle flydende punkter, Vi kan have en blanding af alle forskellige former i et enkelt array. Erklære et array er temmelig ligetil. Det er ligesom enhver anden variabel. $ nums = array (1, 2, 3, 4), matrix er en funktion der er indbygget i PHP, der vil skabe en række for dig. Dette skaber et array af fire værdier, numre i dette tilfælde kaldet $ nums. Og der er mere end én måde at gøre det. Og vi kommer til at ser dette meget i PHP. PHP er blevet udviklet af mange forskellige mennesker og vokser og vokser og vokser. Der er normalt ikke bare to eller tre måder at gøre noget i PHP, der er normalt ligesom 10 eller 20. Her er bare en anden almindelig måde at erklære et array. $ nums = firkantede beslag 1, 2, 3, 4. Så dette er slags ligner C vinkel br-- krøllet tandbøjle notation, snarere. $ - eller det ville være int nums firkantet parentes lig krøllet Brace 1, 2, 3, 4. I PHP er det $ nums = firkantet beslag 1, 2, 3, 4. Men begge disse eksempler her give mig et array af fire i dette tilfælde heltal. Hvad hvis jeg ønsker at hæfte noget på nu? Jamen jeg kan bare sige $ nums 4, som igen, er vi stadig tælle fra 0 her i PHP, ville være den femte element i arrayet. Jeg kan bare sige det. Jeg har ikke tænkt mig at lide et seg fejl, fordi min array er bare kommer til at vokse til at rumme det. Det er ret nice, ikke? Og i virkeligheden, jeg behøver ikke engang at angive, hvor jeg ønsker at sige det. Jeg kan blot sige dette og blot tack det lige på til slutningen, eller jeg kunne bare sige $ nums 20 eller 1.000. Det gør ikke rigtig noget. Det er stadig bare at tack det lige til det sidste. Så jeg kan vokse, og as-- vi er ikke kommer til at dække det ind her, men jeg kan splejse eller strimler elementer ud af array'et samt, og arrayet vil skrumpe til at rumme at nu mangler eller tom plads. Der er en anden måde at hæfte noget på et array, som er en funktion kaldet array_push. Så igen, bare denne idé om at være stand til at gøre ting mange forskellige måder. Så vi har set tre forskellige måder nu at hæfte et andet element på et array. Så dette tilføjer et andet element til slutningen af ​​$ nums array. Og vi kan blande vores datatyper. Så jeg kunne have en vifte af ikke 1, 2, 3, 4, men 1, sandt, 3, 4, hvor sandt er en boolesk, og derefter hvis jeg ønsker at hæfte på et andet element til den opstilling, måske en streng, strengen "fem", jeg kunne gøre det. Og nu er min matrix ville være 1, sand, 3, 4, fem. Ordet fem, ikke det hele tal 5. Så en masse fleksibilitet der. Fleksibiliteten får endnu bedre, selv om, fordi PHP understøtter noget kaldet et associativt array. Og vi slags vagt talte om associative arrays i C i forbindelse med hash-tabeller, fordi hvad associative arrays er virkelig alle om gør nøgle værdi par tilknytninger. Og i dette tilfælde, det keys-- hvis Vi er bekendt med arrays fra C, tasterne er indekstal. 0, 1, 2, 3. Og værdierne er, hvad vi finder, at matrix 0, 1 matrix, matrix 2, og så videre. Så tasterne er indekser, og værdierne er hvad der er i den opstilling placering, specificeret af dette indeks. Men i PHP, behøver vi ikke at gøre dette begrebet matrix 0, matrix 1, matrix 2 længere. Vi kan nu bruge faktiske ord at kortlægge nøgler til værdier. Og så jeg kunne sige noget som dette. Jeg kunne skabe en række ved hjælp af firkantede beslag syntaks som følger. $ pizzaer = firkantet beslag "ost" og derefter denne form for dobbeltpilen notation, 8.99, "pepperoni," pil 10.99-- 9.99, og så videre. Og så hvad sker der her? Hvad skal jeg faktisk gør? Jeg skaber vigtige værdi par tilknytninger. Så i stedet for at sige, for eksempel, pizzaer 0, stykker 1, pizzaer 2, Jeg kan nu sige pizzaer ost, pizzaer pepperoni, og henviser til de værdier forbundet med dem. Så her er vores nøgler i grønt. Ost, pepperoni, grøntsager, buffalo kylling. Her er pilen, der gør denne nøgle værdi par kortlægning. Og så her er de værdier på den opstilling placering. Så det er ligesom at sige vifte 0 er lig med 8,99. Nøglen er 0. Værdien er 8.99. Jeg kan nu sige vifte ost, eller i dette tilfælde pizzaer ost, ost er nøglen, og hvad jeg finder på pizzaer ost er 8.99. Det er den værdi, som jeg finde der. Så jeg kan sige ting som. $ pizza ost = 7,99. Sig Jeg har et salg. Jeg vil dis-- jeg ønsker at tabe prisen på ost pizza. Eller jeg kan bruge den vegetabilske pizza som en del af en tilstand, eller jeg kan tilføje et nyt element til min array, ligesom jeg kunne gøre tidligere. Jeg kan tilføje et nyt element til denne associative array med nøglen "bacon" og værdien 13,49. Men denne slags indfører et problem, hvis du tænker over det et øjeblik. Hvordan ville vi gentage gennem dette array? Højre? I C, ville vi bare have en for loop typisk, at ville løbe fra 0 til størrelsen af ​​arrayet minus 1. Arrayet har n elementer i på den gyldige indekser er 0 til n minus 1. Så vi kunne bruge en for-løkke til gå gennem hver enkelt element. Men det er ikke rigtig tilfældet længere, ikke? Nu hvor vi har nøgleværdi par kortlægninger, hvor nøglerne er ord, hvordan kan vi gentage over alle ordene? Nå, heldigvis, PHP har en måde at håndtere dette også, og så vi vil hoppe tilbage løkker til en anden at indføre en fjerde form for løkke, findes i PHP kaldes en foreach løkke. Og hvad en foreach løkke gør, er det er dybest set den samme idé. Du kan bruge det til nogen form for array. Men det er dybest set den samme idé som en for-løkke, undtagen i stedet for at bruge indekstal, bare du har denne underlige syntaks, hvor du kalder hver enkelt element et navn for så vidt angår dette sløjfe. Så i dette tilfælde, foreach ($ array som $ key). Dybest set, da denne kommentar noter indersiden af ​​denne foreach loop, det kommer til at gå over hver eneste element i $ array, som typisk er vil være et associativt array, men virkelig kan være enhver form for matrix som du ønsker i PHP. Og hver gang, at der i en for-løkke du måske har sagt $ array-kantede parenteser $ i, kunne du bare sige $ nøgle. Så $ nøgle bliver et alias for hver indeks over din PHP associative array, og så du kan bruge det på den måde. Så for eksempel, vi har nu fik vores pizzaer array. Jeg har slags gemt det i hjørnet der så vi kan bruge det til at gøre en hurtig eksempel. Hvis jeg siger foreach ($ pizzaer som $ pizza), ja, hvad sker der? Tja, jeg har tænkt mig at gentage gennem hver enkelt element af array $ pizzaer, og ved at gøre, vil jeg kalde hvert element, når jeg er inde af kroppen af, at der for løkke, $ pizza. Så det er en slags stand-in, tilbagekaldelse, at $ pizza er en stand-in for at sige $ pizzaer kantede parenteser $ i hvis vi bruger en for-løkke, hvor vi kunne gå fra $ i = 0 til, i dette tilfælde, $ i = 3. Hvis vi ikke havde centrale værdipar her, ville det være element 0, 1, 2, 3, og vi ville bruge en for-løkke til at gå $ pizzaer 0, $ pizzaer 1, $ pizzaer 2, $ pizzaer 3. Så nu bare $ pizza er at erstatte for den enkelte tast. Så hvad er dette vil udskrive? Jeg udskrivning ud $ pizza. Hvad skal jeg finde at-- hvis jeg udskrive $ pizzaer, $ jeg? Højre? Hvis jeg har tænkt mig at udskrive den i'te element af pizzaer, hvad skal jeg printe? Jeg har tænkt mig at udskrive værdier ved denne placering, ikke? Ligesom hvis vi lavede dette i forbindelse med C, vi normalt ikke bruge vores iterator variabel, int i = 0, i er mindre end 3, i ++, at udskrive 0, 1, 2, 3. Vi udskrivning ud vifte 0, matrix 1, matrix 2, 3 matrix. Og så, hvad dette udskriver er dette. Det er en liste over de priser. 8.99, 9.99, 10.99, 11.99. Nu er en hurtig bemærkning her. En foreach løkke ikke nødvendigvis udskrive tingene i orden. Det er ikke garanteret. Det gør normalt. Det er normalt baseret på den rækkefølge, hvilke elementer tilføjes til arrayet, så bare huske, på. Det er måske ikke være i orden. Men en foreach løkke vil gentage på tværs af hver eneste element i arrayet pågældende. I dette tilfælde igen, den opstilling er $ pizzaer. Jeg kan ændre syntaks, men hvis Jeg vil have både nøglen og værdien. I stedet for at sige $ pizzaer som $ pizza, kan jeg sige dette. Og hvis man ser på, hvad jeg har markeret med grønt her, det ligner en nøgle værdi par kortlægning. Og så hvis du-- selvom du ikke er helt sikker på, hvad det kommer til at gøre, kan du sikkert gætte at $ topping går at være nøglen i denne sag og $ prisen bliver værdien. Så jeg erstatte nu hvert element på $ pizzaer som en central værdi par, og nu kan jeg henvise til nøglen og værdien, som med praktisk, for eksempel, som følger. "En hel" - det er en masse udskrivning foregår her-- "En hel" topping "pizza koster $" pris, og derefter Jeg udskrive en periode, og en omvendt skråstreg n. Så nu, varsel igen jeg har adgang til en nøgle, $ topping, og en værdi, $ pris. Så kan du gætte, hvad denne kommer til at printe ud? Der er en masse print udsagn, men der er kun én backslash n, så det kommer til at udskrive noget på en entire-- på en enkelt linje kode. Hvis jeg kan henvise til nøglen og værdien, så nu, i stedet for blot at kunne at udskrive de priser, Jeg kan udskrive noget som dette. "En hel ost pizza koster $ 8,99." Og nu jeg bruger alle de keys-- ost, pepperoni, grøntsager, bøfler chicken-- og værdierne. 8,99, 9,99, 10,99, 11,99 Så det er bare en anden måde til at gøre en foreach løkke, der i stedet for bare at give dig adgang til de værdier, det bare giver du-- det giver dig adgang til nøgler og værdier. Så udskrive oplysninger. Jeg har allerede gjort det et par forskellige måder, du måske har bemærket. De to funktioner, vi har primært set er print og ekko. Og for stort set alle virkeligheden formål, de er nøjagtig det samme. They're-- der er en meget subtil forskel, der er ikke engang værd at komme ind, men dybest set overalt du kan bruge print du kan sikkert bruge echo så godt. Og det er ikke de eneste to. PHP har en masse forskellige måder at udskrive tingene ud, og det har også måder at integrere variabler ind i midten af ​​strengen. Så husker fra C, gør du huske, hvad funktion vi kan bruge til at erstatte variabler ind i ting, vi ønsker at udskrive? Du bruger sandsynligvis dette fungere ganske meget. printf, ikke? Så dette er, hvad vi havde før inde af baggrunden for vores foreach løkke. Vi havde disse fem separate print udsagn, fordi det var den eneste måde jeg virkelig vidste på det tidspunkt hvordan du udskriver ud beskeder. Jeg vidste ikke, hvordan man kan integrere de variabel $ topping ind i min PHP kode. Tja, hvis jeg bare taget et vildt gæt, printf, det rent faktisk ville have fungeret. printf er en funktion, som jeg kan bruge i PHP, ligesom jeg kan bruge det i C. Og så noget som dette, printf, Igen, vi er bekendt med det. Den første% s erstattes med værdien af ​​$ topping. Den anden% s erstattes med værdien af ​​$ pris. Og så jeg interpellating, der er bare en fancy måde at sige jeg stikning det variabler i denne placering. Så jeg tilslutte $ topping hvor rødt% s er og $ pris, hvor den blå% s er, og så ville jeg få budskabet, "En hel ost pizza koster $ 8,99." Ikke den eneste måde jeg kan gøre det, selv om. Måske skulle jeg bruge denne metode. Dette er faktisk, hvad der er mest almindeligt kaldes variabel interpellation. Jeg kan bruge et ekko. Jeg kunne bruge en udskrift også, som vi vil se. Men hvad der sker her? Først og fremmest, jeg er nødt til at undslippe dollartegn. Fordi huske, da vi var faktisk udskrive priserne på de pizzaer, Jeg var faktisk formatering dem som monetære tal med et dollartegn. Men vi bruger dollartegn også at repræsentere variabelnavne i PHP, og især når jeg er anvendelse af denne fremgangsmåde af krøllede tandbøjle variabel interpellation metode, jeg har brug for at undslippe min dollar tegn, så det ikke gør tror jeg taler om en variabel. Det kommer til at faktisk, bogstaveligt udskrive et dollartegn. Så slags analogize det til hvad du ser i slutningen der. Det gør faktisk ikke print omvendt skråstreg n, ikke? Det udskriver en ny linje karakter. Dette is-- det kommer ikke til at print omvendt skråstreg dollartegn, det vil udskrive bare et dollartegn karakter. Samme idé. Flygte sekvenser, hvad disse ting kaldes. Men bemærk, at jeg ikke gør nogen form for% s udskiftninger, Jeg er bare bogstaveligt tilslutte i disse variabler. Og så i denne-- hvad der ville ske her er, at værdien af ​​$ topping-- igen, bare tråd med, hvad vi har været taler om så far-- ost ville få sluttet der. Og $ prisen ville være, hvad værdi på pizzaer, kantede parenteser, ost, som var 8,99. Og så ville det også udskrive "En hel ost pizza koster $ 8,99." Og som jeg sagde, jeg kunne bruge udskrive her i stedet for ekko, og funktionaliteten være temmelig meget nøjagtig det samme. Det ville udskrive det samme. Der er en anden måde at gøre det, og dette er en anden fordel af PHP arbejder med strygere. Vi kan gøre strengen sammenkædning. Vi kunne gøre dette i C, også, ved hjælp af en funktion kaldet strcat, men igen, vi var nødt til at kalder adskilte funktioner. Det var hele dette rod at gøre. Vi var nødt til pund-omfatter string.h. Det var en produktion, ikke? Men nu kan jeg bare bruge denne dot operator til at sammenkæde strenge sammen. Så jeg sammenkæde "helhed" og derefter uanset værdien af ​​$ topping er, og derefter en anden streng, "pizza omkostninger $" og derefter sammenkæde uanset værdien af ​​$ prisen er, og derefter i slutningen jeg tacking på perioden backslash n. Og så dette ville også udskrive "helhed" - igen, hvis vi taler om den første element i denne pizzaer array-- "En hel ost pizza koster $ 8,99." Periode, backslash n, igen, med de $ topping og $ pris substituerende for hvad vi havde angivet i vores foreach loop som nøglen værdi parret kortlægning. PHP kan håndtere funktioner. Funktioner var slags integreret til C, som vi så. Ligesom variabler, behøver vi ikke at angive returtypen af ​​funktionen, fordi det er virkelig ligegyldigt. Og vi har ikke specificere datatyper af nogen parametre, fordi de ikke rigtig sag, ligesom vi har set i PHP. Hver funktion indføres med funktionen nøgleordet. Det er, hvordan vi angiver at PHP at hvad vi taler om, er en funktion. Og vi behøver ikke at behandle vigtigste overhovedet, fordi tolken, PHP tolken, arbejder fra top til bund, uanset. Hvis det ser du kan gøre en funktion opkald, det vil gå finde den funktion opkald, selv om det kommer senere. Men det kommer til at læse fra top til bund, så behøver vi ikke at angive, her er, hvor du starter. Du starter på linie 1 af din PHP og arbejde ned derfra. Så her er, hvordan vi ville skabe en funktion kaldet hard_square. Det tager tilsyneladende en parameter, som jeg ringer $ x. Denne funktion er kompliceret bare at illustrere forskellige ting. Vi har stadig retur værdier. Jeg bruger en for-løkke her. Men det er egentlig bare, hvad det beløber sig til er kun $ x gange $ x. Hvad jeg faktisk gør, er blot at tilføje x til 0 x gange eller $ x til nul $ x gange. Men det er effektivt nøjagtig samme som at gange $ x gange $ x. Jeg kan stadig returnere en værdi, i dette tilfælde $ result, og jeg har lavet en funktion i PHP. Her er hvordan du kan bruge det i sammenhæng. Så måske er jeg inde i nogle PHP-fil. Læg mærke i blå der, at Jeg har brugt mine PHP afgrænsere, vinkelbeslag spørgsmålstegn php. Imellem disse er alle PHP, som jeg vil skrive. Så jeg tilsyneladende vil get-- Jeg har tænkt mig at bede brugeren at give mig et nummer, butik, variabel, butik i denne variabel $ x, uanset hvad de gav mig. Så jeg har tænkt mig at gentage hard_square af denne værdi, og tilsyneladende vil at hæfte på en ny linje så godt, og så senere på vil jeg definere funktionen hard_square så at når jeg gør ringe til hard_square, det ved, hvad jeg taler om. Nu kunne jeg også gøre noget som dette. Dette er en smule anderledes. Det er næsten præcis det samme som hvad vi så før, undtagen i stedet for at sige bare $ x der som parameter til hard_square, Jeg siger $ x = 10. Så dette er et eksempel på defensiv programmering, bevogtning dine programmer mod ondsindede brugere. Dette er en måde at gøre nogle fejl kontrol af, at vi ikke rigtig har som en mulighed i C. Vi kunne aldrig angive standardværdien for noget. Vi altid havde til at kontrollere om, for eksempel, hvis vi foretaget et kald til getString, var det mest korrekt, hvis umiddelbart efter, at vi kontrolleret, at, vi kontrollerede om strengen at brugeren gav os er ikke lig med nul, fordi vi ikke ønsker at starte arbejder med en null streng. Her, det er en måde at beskytte sig mod det. Hvis brugeren ikke giver os noget en eller anden måde, hvad skal vi gøre? Nå, vil vi bare sige, hvad de ikke give os, vi bare kommer til at tilslutte 10 i stedet. Så hvis de ikke give os en værdi, bare bruge 10 som standard. Og så her, bemærke, at jeg gør Et opkald til hard_square, men der er ingen prompt til brugeren, ikke? Jeg er bare at gøre en tom opkald. Men min funktion hard_square forventer en parameter. Hvad er dette vil udskrive? Det kommer til at udskrive 100, ikke? Fordi brugeren ikke giv mig noget. Og så er jeg bare kommer til at påtage sig at 10-- 10 er standardværdien. Og så det ville udskrive ud 100 på sin egen linje. PHP filer behøver ikke at være bare en enkelt fil. Du kan kombinere flere filer sammen, ligesom du kan i C. Den måde vi gjorde det i C var typisk til at gøre en # include at få header filer trak. Vi gør ikke det i PHP. Vi gør noget, der hedder require_once. Og så er der hele denne ting, hvad er det __dir__? Det er bare en speciel variabel eller særlige konstant, virkelig, der angiver, hvad din nuværende mappe er. Og så det kommer til at se i din nuværende mappe efter en fil kaldet cs50.php i dette eksempel her, og det kommer til at holde denne fil i toppen af ​​din PHP-program, forudsat at du sætter kræve når linje i toppen af ​​din PHP-fil. Så PHP anvendes primært, men ikke udelukkende anvendes, som et sprog til web-baserede programmer. Det er virkelig, hvordan det kom til at være. Men det er en fuld sprog, som vi har set. Vi har set stort set alle de ting at det kan gøre det der ligner C, og det kan gøre en pokkers af meget mere end det. Men fordi det er en fuldstændig sprog, og vi kan gøre kommandolinje programmering i det. Vi kan køre kommandolinjeprogrammer. Alle, der er påkrævet for at køre en kommando line program, der er skrevet i PHP er, at du har et PHP tolk. Så det er lidt analogt med have en compiler på dit system hvis du ønsker at kompilere din C-kode at gøre det til eksekverbare filer. Du skal have en PHP tolk der findes på dit system så du kan fortolke PHP-filer. Forudsat, at du gør, og som regel denne tolk kaldes PHP, og det er som regel følger med de fleste downloads eller installationer af PHP at du kan få online, og helt sikkert navnet på PHP fortolkeren vi har i CS50, IDE. Alt du skal gøre er at skrive php fil. Og hvad din programmets kommer til at gøre, er at det er kommer til at løbe gennem tolken, er det kommer til at ignorere alt, der er ikke i mellem pågældende mark-- eller, vinkel beslag spørgsmålstegn php, PHP afgrænsere, og printe det ud, og det vil fortolke og udføre kode inde i dine PHP adskillere. Så lad os pop over til CS50 IDE og have et kig på et par af PHP-filer, kører et par PHP-filer, i kommandolinje interface CS50 IDE. Så her er vi i CS50 IDE, og jeg har taget den frihed for at åbne en fil kaldet hello1.php. Og tilsyneladende, indholdet af denne fil er blot PHP afgrænsere der, og i mellem, ekko ("Hej, verden"). Dette er en temmelig simpel PHP-program. Jeg bare at rulle ned til min terminalvindue her, og jeg har tænkt mig at skrive php hello1.php, tryk enter. Hej Verden. Det er sandsynligvis, hvad vi var forventer det at gøre, ikke? Lad os gå op og tage andet se på et program. hello2.php. Stort set de samme ting, ikke meget foregår her. Denne gang dog vil jeg bede brugeren til at give mig deres navne. Jeg bruger at readline funktion igen. $ name = readline. Det er den hurtige, "Hvad er dit navn?" Tilsyneladende er jeg udskrivning det på sin egen linje. Og så, så linjen nedenfor der vil være en hurtig hvor brugeren kan indtaste deres navn. Og så er jeg bruger en lille smule variabel interpellation her på linje 3 at udskrive "Hello" og uanset brugeren skriver. Så dette er analog med at sige, Hej, komma,% s, hvis vi brugte printf i C. Så lad os gå og fortolke dette program. Så igen, vil jeg rulle ned til min terminalvindue. php hello2.php. Hvad er dit navn? Doug. Hej, Doug. Jeg har også en anden fil kaldet hello3.php. Jeg har tænkt mig at rydde min skærm med Kontrol L, og jeg har tænkt mig at udføre det. Hvad er dit navn? Doug. Hej, Doug. Så adfærd er identisk med hello2.php, men hvorfor er det hello3.php? Nå, her er forskellen. I dette tilfælde skal meddelelse at der på linje 1 her, Jeg har noget, der ikke er i mellem PHP skilletegn. Jeg er bare udskrive out-- eller jeg lige har skrevet: "Hvad er dit navn?" Når PHP fortolkeren ser dette, er det har ingen idé om, hvordan man skal fortolke det som PHP, og så i stedet for at fejle, det bare at gå at spytte det ud. Så mærke på linje 3 nu, min opfordring til readline, er der ingen hurtig længere. Jeg er bare faktisk går at-- når PHP fortolkeren ser dette, det kommer til at udskrive "Hvad er dit navn?" Så ser det, åh, OK, here's-- alt andet vil være tolkes som PHP, så det er derfor det virker. Jeg behøver ikke at nødvendigvis bede brugeren at-- indersiden af ​​readline, Jeg kan bare have det uden af PHP afgrænsere og tillade tolken at bare printe den ud for mig. Så du behøver ikke faktisk kun har at have et sæt af PHP adskillere i dit program. Du kan faktisk få flere af dem, åbning og lukning af dem efter behov. Så lad os tage et kig på et par programmer i CS50 IDE, hvor vi illustrere denne idé om at have flere sæt afgrænset PHP. OK, så jeg har åbnet en fil her kaldes add1.php. Og læg mærke til, hvad der sker her. Lige som før, jeg har en enkelt PHP sæt adskillere. Jeg har tænkt mig at udskrive meddelelsen "Giv mig et nummer." Så jeg har tænkt mig at læse en linje og gemme det i variablen $ num1. Så jeg har tænkt mig at udskrive igen. Giv mig et andet nummer. Læs en linje fra brugeren, butikken hvad de har skrevet i i $ num2. Tilføj dem sammen og opbevare, at resultere i en variabel kaldet $ sum, og derefter udskrive, "The Summen af ​​disse to tal er, "og derefter interpellate der variablen $ sum. Så lad os bare køre dette gennem tolken at bekræfte, at dette er, hvad vi forventer. php add1.php. Giv mig et nummer, 3. Giv mig et andet nummer, 4. Summen af ​​disse to tal er 7. Det er 3 plus 4. OK? Så noget forfærdeligt fancy der. Og lad os nu åbne op add2.php. Her, jeg har et par PHP afgrænset sæt der, ikke? Linje 1, 3-- linjerne 1 og 3 har ingen PHP afgrænsere. Så når tolken ser dem, er det bare kommer til at spytte ud af præcis hvad jeg har skrevet der. Så det er, hvor jeg er gør alle mine spørge. På linie 2 og 4, ser vi meget velkendt $? php slags afgrænsere, så disse to linjer er kommer til at udføre som PHP. Og så på linie 5, jeg har denne underlige ting lige her, lige? Denne vinkel beslag spørgsmålstegn lighedstegnet. Jeg vil endda zoome ind lidt længere. Du kan se, dette er, hvad jeg er taler om lige der, denne $? =. Det viser sig, at det er så almindeligt, at grunden til, at vi åbner et sæt PHP afgrænsere er at udskrive en værdi. Og det er alt, hvad vi vil gøre. Men der er endda stenografi for det. $? = Er PHP forkortelse for at sige noget som $? php echo summen af num1 og num2. Så dette er blot en anden forkortelse for det. Så hvis jeg køre dette program, php add2.php. Jeg vil zoome ned en lille smule. Giv mig et nummer, 4. Giv mig et andet nummer. Og da jeg ikke virkelig bekymrer sig om datatyper i PHP, kan jeg sige 4.8. Summen af ​​disse to tal er 8,8. Denne funktion opfører sig temmelig meget nøjagtig det samme som vi ville forvente, samt. Og jeg har endnu et åbnet heroppe kaldes dice.php. Prøve dette igen. Jeg har en mere her kaldes dice1.php, som også, se har denne vinkel beslag spørgsmål markere lighedstegn notation derinde, men bemærke, at jeg i dette tilfælde er kalde funktionen rand, hvilket som du kunne forvente genererer et tilfældigt tal. "Du rullede en", og det kommer til at beregne nogle tilfældige tal, mod 6 + 1. Så det vil give mig nummer i området fra 1 til 6. Husk, at mod 6 ville give mig et tal i intervallet fra 0 til 5, men hvis jeg simulerer terninger ruller, hvilket er, hvad jeg laver her, Jeg ønsker ikke disse terninger at gå fra 0 til 5, jeg vil have terninger, der går fra 1 til 6. Og så er det en måde at få mig i området fra 1 til 6. Jeg gør dette to gange. Så tilsyneladende jeg rullende to terninger i dette program. Så jeg vil rydde min skærm, og jeg vil gøre php dice1.php. Du rullede en 4 og en 2. Og hvis jeg kører programmet igen, du rullede en 5 og en 5. Så hver gang jeg kører programmet, Jeg får forskellige tal, fordi hver gang jeg gør så, det starte forfra. Det kommer til at generere en ny sæt af tilfældige tal til mig. Så hvis vi er vant til kørende programmer fra C, vi er vant til at skrive ./ den navnet på et program, ikke? Det er, hvordan vi har gjort alt af vores programmer i C hidtil. Vi kan gøre dette i PHP såvel ved at tilføje noget, der hedder en shebang til toppen af ​​vores PHP-fil. Jeg ved, det er sådan en fjollet ord. Det er en forkortelse for hash bang. Det er de første to tegn der. Husk vi kalder udråbstegn ofte et brag i datalogi. Det kan også være for skarp bang. Der er et par måder at fortolke den. Men det er dybest set en særlig slags af befaler, at PHP tolk forstår som, åh, jeg vil dig til at udføre dette program, som tilsyneladende / bruger / bin / php, som er faktisk hvor PHP fortolkeren specifikt bor på vores system. Så it's-- hvad sker her er tolken forstår, åh, Jeg tilsyneladende skulle bruge i dette program til at køre denne fil. Og så det giver dig at springe over trinnet for at skulle sige php something.php. Der er en anden fangst her, nemlig at hvis vi ønsker, at vores programmer til fungerer som forventet, vi nødt til at gøre noget, der hedder en fil tilladelse ændring. Og vi vil go-- og vi taler lidt lidt mere om fil tilladelse ændringer i vores video på MVC, men er det tilstrækkeligt at sige, at dette er, hvad du skal gøre for at gøre din php filer eksekverbare. Så lad os tage et kig på dette som vores endelige eksempel ovre i CS50 IDE. Så her i IDE har jeg to filer i dette PHP bibliotek, der synes ikke at være kaldet php. Jeg har en funktion kaldet add-- Jeg har en fil kaldet ADD 3 og en fil kaldet dice2. Så lad os tage et hurtigt se og åbne ADD 3. Og som du kan se, i begyndelsen af min fil jeg har denne molevitten, ikke? Denne hash mærke udråbstegn. Nu, vil du også måske Bemærk, at en eller anden grund, Jeg har ikke nogen syntaks fremhæve mere, og det er det, jeg hentydede til tidligere, som var, at hvis jeg ikke nævne min fil php, jeg har ikke fordelen af syntaksfremhævning længere. Denne fil er blot kaldes ADD 3. Så jeg kan køre det senere med ./ ADD 3 og ikke ./ add3.php. Så den reason-- det stadig fint, det er stadig gyldige PHP, men det er ikke syntaks i fremhævet, fordi denne fil er ikke kaldt something.php. Det er den eneste reelle forskel her, plus molevitten. Så lad os se hvad der sker, når Jeg prøver og køre dette program. ./ ADD 3, ligesom jeg ville gøre med C. Bash. ./ ADD 3 tilladelse nægtet. Dette er, hvad du vil for at se, hvis du glemmer at bruge chmod-kommandoen til at ændre tilladelserne til filen. Da det viser sig, regelmæssig PHP filer kan ikke bare blive henrettet. De kan fortolkes, men vi er gør noget lidt anderledes her. Vi udfører det. Og så jeg har brug for at tilføje tilladelse af udførelse, chmod a + x for at ADD 3. Så kan jeg sige ./ ADD 3. Giv mig et nummer. 5, 6. Summen af ​​disse to tal er 11. På samme måde har jeg allerede chmoded dice2, så jeg kan bare skrive ./ dice2, du rullet en 1 og en 1, du rullet en 5 og en 4, og så videre. Så det er stort set den idé om en PHP syntaks, ikke? Der er meget at komme igennem, jeg kender. Men forhåbentlig du har set nu, at PHP er egentlig ikke så forskellig fra C og virkelig giver os mulighed at tage tingene op et hak eller to. Vi har ikke virkelig nødt til at bekymre sig for meget om-- vi ikke rigtig at bekymre sig for meget om de lavt niveau detaljer vi måtte bekymre sig om med C, ikke? Vi kan fokusere på højere niveau ting, PHP tillader os at gøre, og for at tage til givet, at det vil arbejde for os. Så det giver os mulighed for nu, overgang fra C til PHP, at lave programmer, der er meget mere komplekse og måske en meget mere robust. Så jeg håber du har det sjovt arbejdsmiljø med PHP, og jeg er Doug Lloyd. Det er CS50.