DOUG LLOYD: Så vi har gjort en hel del arbete i C, och C är en riktigt cool språk eftersom det ger dig förmågan att dyka verkligen låg nivå i dina program. Vi får göra saker som verkligen minuten som manipulera enskilda byte minne. Minns att pekare verkligen tillåter oss att flexibilitet. Men behöver vi alltid ha att finkorniga detaljnivå i våra program? Förmodligen inte, eller hur? Och om vi ska ha en kompromiss mellan att vara kunna göra riktigt, riktigt minuten saker och riktigt, riktigt stora saker som vi inte behöver tänka om vi inte måste införa dessa riktigt stora idéer förekommande de är redan byggt in oss, i allmänhet för att bygga stora program eller stora projekt, vi förmodligen kommer att missta sig på sidan att ha mer språk grejer inbyggd för oss, istället för att ha låg nivå grejer. Och det är där PHP verkligen kommer in. Nu, en av orsakerna att vi lär PHP i CS50 är att det är starkt inspirerad av C. Och i själva verket, enligt min mening, Det finns egentligen två ursprungsspråk som är mycket vanliga nuförtiden. C och LISP. Och de är ursprungsspråk eftersom alla andra moderna programmering språk som har utvecklats sedan dess inspireras genom en eller den andra syntaktiskt. PHP är mycket lik syntaktiskt C, medan språk som Scheme till exempel, som Du kanske har hört talas om, är starkt inspirerad av ett språk kallas LISP, vilket är en äldre språk. Så anledningen till att vi lär PHP i CS50 är att genom att veta C såsom i grunden som du gör på denna punkt, plocka upp PHP, vilket ger dig förmåga att göra mycket högre nivå saker än C gör, är inte att mycket av ett hinder, eftersom du redan har grundidé syntaxen. C har funnits i nästan 45 år på denna punkt. PHP har funnits i cirka 20 år. Och i att 25 år däremellan, programmerare fastställt att de skulle mycket hellre ha förmåga högre nivå, och misstag och kamp av de 20 åren däremellan ledde till PHP och andra moderna språk. PHP ett stort utbud av språk för programvara att allow-- för programvara that-- där du måste göra saker som i C är faktiskt komplicerat. Så till exempel, arbetar med strängar i C är mycket komplicerad, eftersom som vi vet, strängar i C i verkligheten bara uppsättningar av tecken. Det är inte en inbyggd datatyp. Eller kanske mer fundamentalt, något som vi inte ens omfatta C, vad händer om du behöver göra vissa datornätverk? Okej? C har förmågan att göra det, men det är så svårbegripliga och så svårt att faktiskt göra. Skulle det inte vara trevligt om språket hade en inbyggd, enkelt sätt att genomföra nätverk? Och PHP är ett språk som gör att eller underlättar att ganska lite mer. Som jag sa, är PHP mycket starkt inspirerad genom C. Syntaxen är mycket lika. Och så ska det förhoppningsvis göra Övergången från en till den andra lite mjukare än vissa andra språk kan vara. Att börja skriva PHP, bara öppna upp en fil med .php filändelsen. Tekniskt sett är detta inte faktiskt krävs, men om du vill saker som syntax belyser i IDE, så den typen namn, eller variabla namn, funktioner, du vet, nyckelorden för språket markeras i en specifik färg, du vanligtvis vill namnge dina filer med en viss filändelse. Så vi har namngett vår fil med en .php förlängning, men då också med PHP, alla PHP-koden vi skriver i det fil måste inneslutas i dessa PHP avgränsare som vi ser här på skärmen. Fästvinkel? Php att starta. Sedan skriver vi alla våra PHP kod som vi vill ha i mellan. Och då ? vinkelparentes att stänga. Om vi ​​inte gör det, då vad som kommer att hända? Det kommer inte att krascha. Det kommer inte att verkligen förstöra vårt program. Men det kommer inte att ha den effekt som vi vill ha. Vad kommer att hända, egentligen, är att när vi försöker köra det här programmet, allt inte mellan dessa avgränsare kommer att skrivas ut ordagrant. Det kommer inte att faktiskt köra koden, det kommer att bara skriva ut ordagrant. Nu varför är fallet? Så C är vad som är känt som ett kompilerat språk. Du är förmodligen bekant med steget att göra dina program, vrida .c filer och .h filer i en enda körbar med make, särskilt genom Klang som vår kompilator. PHP, dock inte har denna motsvarande. PHP är vad som kallas en tolkat språk. Och vad betyder det? Tja, innebär det att vi inte behöver konvertera vår källkod till nollor och ettor i förväg. Snarare finns det ett program, som också kallas PHP, som förstår PHP och kan sorts göra det i farten. Det är inte riktigt helt exakt, men det är en ganska bra liknelse om vad som händer. Det är att tolka dem nollor och ettor i farten. Och så om den inte vet hur du kan bearbeta något, om det inte vet hur man processen PHP, du förmodligen ville lägga texten i det, eller hur? Du ville förmodligen sätta koden i där, även om det inte mellan PHP-- PHP avgränsare. Men-- så det inte kommer för att radera det åt dig, det är bara att gå till grunden kasta det. Så det kommer att skriva ut den ut till skärmen. Det verkar som om det är en dålig sak, men det är faktiskt kommer att bli en riktigt bra sak, som vi ska se när vi talar om PHP webbutveckling, eftersom det innebär att vi kan blanda PHP och HTML. Vi kan använda dem tillsammans för att skapa en mer dynamisk webbsida. Men mer om det i video på PHP webbutveckling. Så vad är syntaxen för PHP? Det är vad den här videon handlar om. Låt oss prata om det. Så för att börja, variabler. PHP variabler existerar. Det finns bara två stora skillnader från C. Den första är att det finns ingen typ specifikation. Vi behöver inte säga int, röding, flöte, allt det där. Vi behöver inte göra det längre. PHP är ett modernt språk. Det kan räkna ut vad du är försöker göra eller ge bästa gissa vad du försöker göra. Så det är ganska trevligt. Den andra saken är att alla variabel namn måste börja med ett dollartecken. Det är bara något att vänja sig. Det är lite konstigt, eftersom det är så att PHP kan förstå Vad är en variabel och vad som inte. Så varje variabelnamn börjar med ett dollartecken. Så i C kan vi säga något så här, int x = 54. Vi behöver inte göra det längre i PHP. Vi kan bara säga $ x = 54. Och vi skulle kunna säga, till exempel, i C, om vi hade pund-inkluderat CS50 .h header fil, kan vi säga string frasen = "Detta är CS50." Vi behöver inte göra det i PHP, men. Vi kan bara säga $ fras = "Detta är CS50." Och i själva verket är sträng nu en inbyggd datatyp i PHP, eller snarare PHP förstår vad en sträng är. Det är skild från en array tecken som det är i C. Alla dina favorit villkorliga uttalanden från C finns fortfarande tillgängliga för dig att använda. Så ingen stor övergång där. Vi kan säga-- vi kan få om uttalanden som detta. om $ y 43, eller $ z = 15. Så det är ganska enkelt. Vi kan ha om och annat. Vi kan ha om och else if. Och lägg märke till något ganska trevligt här, och detta är en slags ett av dem fördelarna med PHP kontra C, meddelande vilken funktion vi inte använder här? Vi använder == för att jämföra en variabel, $ name, till en sträng. Vi kunde inte göra det i C, eller hur? Vi var tvungna att använda en funktion som kallas StrComp eller StrEndComp eller någon av dess närstående kusiner. Och så redan ser vi dessa fördelar. Vi behöver inte göra något som dum eller kanske intuitiv som kallar en funktion som kallas StrComp om jag bara vill testa om ett värde är lika med en sträng. Jag kunde bara använda lika jämlikar, som om jag kunde göra något annat. Så det är en fördel. Ibland, förresten, kanske du se annars om som ett ord, ElseIf. Och det är OK i PHP samt. Så ibland kan du se det. Det är inte ett stavfel. PHP faktiskt förstår elseif. Jag vet inte varför de beslutat att genomföra det, men som vi har sett många gånger hela vår video hittills, Vi programmerare älska det om vi kan göra saker snabbt, så att bli av med det utrymmet är uppenbarligen en stor fördel. Så det är om och elseif. Vi har också ternära operatören, minns frågetecken kolon, för riktigt kortform om annat eller villkorad förgrening. Och tydligen, i detta, vad vi försöker göra här är tilldela variabeln $ brev antingen sant eller falskt, beroende på om $ var är en bokstav. Så det här är ganska lik isalpha att vi är bekant med från C. Detta är typ av motvärdet i PHP. Funktionen är tydligen kallas ctype_alpha, men det är hur vi gör det i PHP. Så allt detta kommer att bli vill säga om $ var är ett brev, är $ brev sant. Om $ var inte ett brev, $ brevet är falskt. Vi har också switch uttalanden fortfarande. Vi minns dem från C samt. Högst upp där, det är hur vi gör något som få int eller få sträng. Så PHP har som inbyggd. Vi behöver inte CS50 biblioteket längre. Vi kan bara använda funktionen readline. Vad det kommer att göra är att skriva ut ut budskapet, "Din statliga, please "och sedan blinkar snabbt väntar på användaren att mata in lite information. Nu märker vad vi kan göra med omkopplare. Om du har använt det tidigare, Du kanske minns att switch begränsas ganska mycket till heltal och tecken, men nu kan vi använda strängar. Och i själva verket switch uttalande i PHP är ganska lite mer flexibel än sin kusin från C. Loops. Precis som villkors, alla dina gamla favoriter finns kvar. Vi har medan slingor som räknas 1-100 i detta fall. Vi har att göra medan slingor som räknas från 1 till 100, och vi har för slingor som räknas från 1 till 100. Så ingen big språng där. Syntaxen är ganska mycket exakt samma, utom nu vi använder dollartecken variabel i stället att förklara heltalsvariabler eller något liknande för våra diskar. Här är där det blir en mycket bättre än C, dock. Matriser. Så minns när vi var talar om C, i syfte för oss att växa och krympa uppsättningar av information vi behövde för att sortera för fallissemang denna idé av en länkad lista, eftersom C arrayer fixerades i storlek. Vi kunde inte krympa dem. Vi kunde inte odlar dem. Vi var tvungna att omfördela minne och göra allt detta vansinne eller använd länkade listor, som ta upp ganska lite mer utrymme. Men i PHP, matriser är inte fast i storlek längre. De kan växa och de kan krympa. Så återigen, dessa 20 år som fanns mellan den första utgåvan av C och den första utgåvan PHP, vi beslutat att, du vet, det skulle vara riktigt bra om vi kunde göra det här. Och så vi genomfört detta. Så PHP arrayer inte är fasta i storlek, och eftersom PHP inte riktigt har programmerare front-vända föreställningar om slag, vi kan blanda datatyper i våra matriser också. Så vi behöver inte ens använda alla heltal eller alla flytande punkter, vi kan ha en blandning av alla olika slag i en och samma matris. Förklara en array är ganska enkelt. Det är precis som alla andra variabler. $ nums = array (1, 2, 3, 4), arrayen är en funktion som är inbyggt i PHP som kommer att skapa en array för dig. Detta skapar en array med fyra värden, siffror i det här fallet, som kallas $ nums. Och det finns mer än ett sätt att göra det. Och vi kommer att ser detta mycket i PHP. PHP har utvecklats av många olika människor och växer och växer och växer. Det är oftast inte bara två eller tre sätt att göra något i PHP, det finns oftast som 10 eller 20. Här är bara en annan vanlig sättet att deklarera en array. $ nums = klammer 1, 2, 3, 4. Så det här är en slags liknar C vinkel br-- klammerparentes notation, snarare. $ - eller det skulle vara int nums kvadrat konsoler är lika lockigt stag 1, 2, 3, 4. I PHP är det $ nums = square konsoler 1, 2, 3, 4. Men båda dessa exempel här ge mig en matris med fyra i detta fall heltal. Vad gör jag om jag vill att slå något på nu? Jag kan väl bara säga $ nums 4, som igen, vi fortfarande räknar från 0 här i PHP, skulle vara den femte element i gruppen. Jag kan bara säga att. Jag tänker inte drabbas av en seg fel, eftersom min array är bara kommer att växa för att rymma det. Det är ganska trevligt, eller hur? Och i själva verket inte ens behöver jag ange var jag vill uttrycka det. Jag kan bara säga detta och bara tack rätt till slutet, eller jag kunde till och med bara säger $ nums 20 eller 1000. Det spelar egentligen ingen roll. Det är fortfarande bara kommer att tack rätt till slutet. Så jag kan växa, och as-- vi är inte kommer att täcka det här, men jag kan skarva eller remsor element av arrayen också, och matrisen kommer att krympa för att rymma som nu saknas eller tomrum. Det finns ett annat sätt att slå något på en array, vilket är en funktion som kallas array_push. Så återigen, bara denna idé om att vara kunna göra saker många olika sätt. Så vi har sett tre olika sätt nu att slå ett annat element på en matris. Så detta läggs ett annat element till slutet av $ nums arrayen. Och vi kan blanda ihop våra datatyper. Så jag kunde ha en rad inte 1, 2, 3, 4, men en, riktigt, 3, 4, där sant är en Boolean, och sedan om jag vill tack på ett annat element till den array, kanske en sträng, strängen "fem" Jag kunde göra det. Och nu min samling skulle vara ett sant, 3, 4, fem. Ordet fem, inte heltalet 5. Så en stor flexibilitet där. Flexibiliteten blir ännu bättre, men, eftersom PHP har stöd för något kallas en associativ array. Och vi slags vagt talade om associativa arrayer i C inom ramen för hashtabeller, eftersom vad associativa arrayer är verkligen allt om gör nyckel värde par avbildningar. Och i detta fall, den keys-- om Vi är bekant med arrayer från C, knapparna är indexnummer. 0, 1, 2, 3. Och värden är vad vi finner att array 0, array 1, array 2, och så vidare. Så knapparna är index, och värdena är vad som finns i den arrayen plats, specificeras av detta index. Men i PHP, vi har inte att göra detta begreppet matris 0, array 1, array 2 längre. Vi kan nu använda faktiska ord att kartlägga nycklar till värden. Och så jag kunde säga något sånt här. Jag skulle kunna skapa en array med hjälp av klammer syntax som följer. $ pizzor = hakparentes "ost" och sedan denna typ av dubbelpilen notation, 8.99 "pepperoni," pil 10.99-- 9,99, och så vidare. Och så vad som händer här? Vad jag faktiskt gör? Jag skapar viktiga värde par avbildningar. Så istället för att säga, till exempel, pizzor 0, delarna 1, pizzor 2, Jag kan nu säga pizzor ost, pizza pepperoni, och refererar till värdena i samband med dem. Så här är våra nycklar i grönt. Ost, pepperoni, grönsak, buffalo chicken. Här är pilen som gör denna nyckelvärde paret kartläggning. Och så här är värdena på den arrayen plats. Så det är som att säga array 0 är lika med 8,99. Nyckeln är 0. Värdet är 8,99. Jag kan nu säga array ost, eller i detta fall pizzor ost, är ost nyckeln, och vad jag hittar på pizzor ost är 8,99. Det är det värde som jag hittar det. Så jag kan säga saker som. $ pizzaost = 7,99. Säga att jag har en försäljning. Jag vill dis-- Jag vill släppa priset på ost pizza. Eller jag kan använda vegetabiliska pizza som en del av ett tillstånd, eller jag kan lägga till ett nytt element i min array, precis som jag kunde göra tidigare. Jag kan lägga till ett nytt element i detta associativ array med knappen "bacon" och värdet 13,49. Men denna typ av inför ett problem, om man tänker på det för en sekund. Hur skulle vi iterera igenom denna uppsättning? Höger? I C, skulle vi bara ha en for-loop, typiskt, att skulle löpa från 0 till storleken på matrisen minus ett. Uppsättningen har n element i på den giltiga index är 0 till n minus ett. Så vi kunde använda en for-loop till stega igenom varje enskilt element. Men det är inte riktigt fallet längre, eller hur? Nu när vi har nyckelvärde paret avbildningar där nycklarna är ord, hur vi iterera över alla ord? Tja, lyckligtvis, har PHP ett sätt att hantera detta också, och så vi ska hoppa tillbaka att öglor för en andra att införa fjärdedel slags slinga som existerar i PHP kallas en foreach slinga. Och vad en foreach loop gör är det är i princip samma idé. Du kan använda den för någon form av matris. Men det är i grund och botten samma idé som en for-loop, utom i stället för att använda indexnummer, du bara har denna konstiga syntax där du ringer varje enskilt element ett namn för tillämpningen av denna slinga. Så i detta fall, foreach ($ array som $ key). I grund och botten, eftersom den kommentaren anteckningar, inne i nämnda foreach slinga, det kommer att gå över varenda elementet i $ matris, som typiskt är kommer att bli en associativ array, men kan verkligen vara någon form av matris som du vill ha i PHP. Och varje gång i en for-loop som du kanske har sagt $ array hakparenteser $ i, kan du bara säga $ key. Så att $ key blir ett alias för varje index för din PHP associativ array, och så att du kan använda det så. Så till exempel, vi har nu fått våra pizzor array. Jag har typ av stoppade det i hörnet där så att vi kan använda den för att göra en snabb exempel. Om jag säger foreach ($ pizzor som $ pizza), ja, vad som händer? Tja, jag kommer att iterera igenom varje enda element i arrayen $ pizzor, och på så sätt kommer jag att ringa varje element, när jag är inne i kroppen av den for-loop, $ pizza. Så det är en slags stand-in, minns, att $ pizza är en stand-in för att säga $ pizzor hakparenteser $ i om vi använde en for-loop, där vi kunde gå från $ i = 0 till, i detta fall, $ i = 3. Om vi ​​inte har nyckelpar värde här, skulle detta vara elementet 0, 1, 2, 3, och vi skulle använda en for-loop för att gå $ pizzor 0, $ pizzor 1, $ pizzor 2, $ pizzor 3. Så nu bara $ pizza ersätta för att enskilda nyckel. Så vad detta kommer att skriva ut? Jag skrivs ut $ pizza. Vad ska jag hitta at-- om jag skriver ut $ pizzor, $ i? Höger? Om jag ska skriva ut det i: te elementet av pizzor, vad ska jag skriva ut? Jag kommer att skriva ut värden på den platsen, eller hur? Som om vi gjorde detta i samband med C, vi brukar inte använda vår iterator variabel, int i = 0, i är mindre än 3, i ++, att skriva ut 0, 1, 2, 3. Vi skriva ut array 0, array 1, array 2, array 3. Och så vad detta skrivs ut är det. Det är en lista över priserna. 8,99, 9,99, 10,99, 11,99. Nu en snabb anteckning här. En foreach slingan inte nödvändigtvis skriva ut saker i ordning. Det är inte garanterat. Det brukar. Det är oftast baserat på den ordning vilka element läggs till arrayen, så bara ha detta i åtanke. Det kanske inte är i ordning. Men en foreach slingan kommer iterera över varje enskilt element av matrisen i fråga. I detta fall, återigen, att matrisen är $ pizzor. Jag kan ändra syntaxen, men om Jag vill ha både nyckeln och värdet. Istället för att säga $ pizzor som $ pizza, kan jag säga detta. Och om man tittar på vad jag har markeras med grönt här, det ser ut som ett nyckelvärde paret kartläggning. Och så om du-- även om du inte är helt säker på vad det kommer att göra, du kan nog gissa att $ topping går att vara nyckeln i detta fall och $ priset kommer att vara det värde. Så jag ersätter nu varje element på $ pizzor som ett nyckelvärde paret, och nu kan jag hänvisa till nyckeln och värdet, vilket kanske väl till pass, exempelvis enligt följande. "En hel" - det är en hel del utskrift pågår här-- "En hel" toppade "pizza kostar $" pris och sedan Jag skriver ut en period och ett bakvänt snedstreck n. Så nu, meddelande igen jag har tillgång till en nyckel, $ toppning och ett värde, $ pris. Så kan du gissa vad det här kommer att skriva ut? Det finns en hel del tryckta uttalanden, men det finns bara en backslash n, så det kommer att skriva ut något på en entire-- på en enda rad kod. Om jag kan hänvisa till nyckeln och värdet, då nu, istället för att bara kunna att skriva ut de priser, Jag kan skriva ut ungefär så här. "En hel ost pizza kostar $ 8,99." Och nu är jag använder alla keys-- ost, pepperoni, grönsaker, buffel chicken-- och värdena. 8,99, 9,99, 10,99, 11,99 Så det är bara ett annat sätt att göra en foreach loop som i stället för bara ger dig tillgång till de värderingar, det ger bara du-- det ger dig tillgång till nycklar och värden. Så skrivs ut information. Jag har redan gjort det ett par olika sätt, kanske du har märkt. De två funktioner som vi har i första hand sett är trycket och eko. Och för ganska mycket allt väsentligt och ändamål, de är exakt samma. They're-- det finns en mycket subtil skillnad det är inte ens värt att komma in, men i princip överallt du kan använda trycket som du kan förmodligen använda eko också. Och det är inte de enda två. PHP har en massa olika sätt att skriva ut saker, och det har också olika sätt att integrera variabler i mitten av strängen. Så minns från C, gör du minns vilken funktion vi kan använda för att ersätta variabler i saker som vi vill skriva ut? Du använder förmodligen detta fungera en hel del. printf, eller hur? Så det här är vad vi hade tidigare inne av ramen för vår foreach loop. Vi hade dessa fem separata färg uttalanden, eftersom det var den enda sätt jag verkligen kände vid den tidpunkten hur du skriver ut meddelanden. Jag visste inte hur man ska integrera variabeln $ toppade i min PHP-kod. Tja, om jag bara tagit en vild gissning, printf, det faktiskt skulle ha fungerat. printf är en funktion som jag kan använda i PHP, precis som jag kan använda den i C. Och så något liknande detta, printf, igen, vi är bekant med det. Den första% s ersätts med värdet av $ toppning. Den andra% s ersätts med värdet av $ pris. Och så jag interpellating, som ligger bara ett fint sätt att säga att jag fastnar i variabler till den platsen. Så jag koppla in $ toppning där röd% s är och $ pris där den blå% s är, och då skulle jag få ut budskapet, "En hel ost pizza kostar $ 8,99." Inte det enda sättet jag kan göra det, men. Kanske skulle jag vilja använda den här metoden. Detta är faktiskt vad som är vanligast kallas variabel interpellations. Jag kan använda ett eko. Jag skulle kunna använda en utskrift också, som vi får se. Men vad som händer här? Först av allt, jag måste fly dollartecken. Eftersom minns, när vi var faktiskt skriva ut priserna på pizzor, Jag var faktiskt formatera dem som monetära siffror med ett dollartecken. Men vi använder dollartecken också att representera variabelnamn i PHP, särskilt när jag är användning av denna metod av lockigt stag variabel interpellation metod, jag behöver fly min dollartecken så det inte tror att jag talar om en variabel. Det kommer att faktiskt, bokstavligen ut ett dollartecken. Så slags analogize den till vad du ser i slutet där. Det gör faktiskt inte print backslash n, eller hur? Den skriver ut ett nyradstecken. Detta är-- det kommer inte att print backslash dollartecken, det kommer att skriva ut bara ett dollartecken tecken. Samma idé. Escape-sekvenser, vad dessa saker kallas. Men märker att jag inte gör någon form av% s ersättningar, Jag bara bokstavligen plugga i dessa variabler. Och så i this-- vad som skulle hända här är att värdet på $ topping-- igen, bara hålla med vad vi har varit talar om så far-- ost skulle få inkopplad där. Och $ priset skulle vara vad som helst värde är på pizzor, hakparenteser, ost, vilket var 8,99. Och så skulle detta också skriva ut "En hel ost pizza kostar $ 8,99." Och som jag sa, jag kunde använda ut här i stället för eko, och funktionaliteten vara ganska mycket exakt samma. Det skulle skriva ut samma sak. Det finns ett annat sätt att göra det, och detta är en annan fördel PHP arbetar med strängar. Vi kan göra strängsammanfogning. Vi kunde göra detta i C också, genom att använda en funktion som kallas strcat, men återigen, vi var tvungna att Ring separata funktioner. Det var hela den här röran att göra. Vi var tvungna att pound-inkluderar string.h. Det var en produktion, eller hur? Men nu kan jag bara använda den här punktoperatorn att sammanfoga strängar tillsammans. Så jag sammanlänka "En hel" och då oavsett värdet på $ topping är, och sedan en annan sträng "pizza kostar $" och sedan sammanfoga vad värdet på $ priset, och sedan i slutet jag tacking på perioden backslash n. Och så detta skulle också skriva ut "En hel" - igen, Om vi ​​pratar om den första del av detta pizzor array-- "En hel ost pizza kostar $ 8,99." Period, omvänt snedstreck n, återigen, med de $ Taklagsfest och $ pris substituerande för vad vi hade som anges i vår foreach slinga som den viktigaste värdeparet kartläggning. PHP kan hantera funktioner. Funktioner var typ av integrerad del C, som vi såg. Liksom variabler, behöver vi inte specificera returtyp av funktionen, eftersom det spelar egentligen ingen roll. Och vi inte ange datatyper av några parametrar, eftersom de inte riktigt materia, som vi har sett i PHP. Varje funktion införs med nyckelordet function. Det är så vi meddela PHP att vad vi pratar om är en funktion. Och vi behöver inte itu med huvud alls, eftersom tolken, PHP tolk, arbetar från topp till botten, oavsett. Om det ser du kan göra ett funktionsanrop, det ska gå hitta funktionsanrop, även om det kommer senare. Men det kommer att läsa uppifrån botten, så vi behöver inte ange, här är där du börjar. Du börjar på rad 1 i din PHP och arbeta ner därifrån. Så här är hur vi skulle skapa en funktion som kallas hard_square. Det tar tydligen en parameter, som jag ringer $ x. Denna funktion är komplicerat bara att illustrera olika saker. Vi har fortfarande returvärden. Jag använder en for-loop här. Men det är i princip bara, vad detta uppgår till bara $ x gånger $ x. Vad jag egentligen gör är att bara lägga x till 0 x gånger eller $ x till noll $ x gånger. Men det är ett effektivt sätt exakt samma som att multiplicera $ x gånger $ x. Jag kan fortfarande returnera ett värde, i det här fallet $ result, och jag har gjort en funktion i PHP. Här är hur du kan använda den i sitt sammanhang. Så kanske jag inne i någon PHP-fil. Lägg märke i blått där som Jag har använt min PHP skiljetecken, vinkelparentes frågetecken php. Mellan de är alla PHP som jag vill skriva. Så jag tydligen ska get-- Jag kommer att uppmana användaren att ge mig ett nummer, butik som variabel, butik i den variabeln $ x, vad de gav mig. Då kommer jag att upprepa hard_square av detta värde, och uppenbarligen kommer att slå på en ny rad liksom, och sedan senare jag definiera funktionen hard_square så att när jag gör ringa för att hard_square, Det vet vad jag pratar om. Nu kunde jag också göra något som det här. Detta är något annorlunda. Det är nästan exakt detsamma som vad vi såg tidigare, utom i stället för att säga just $ x där som den parameter som hard_square, Jag säger $ x = 10. Så detta är ett exempel på defensiv programmering, vakta dina program mot skadliga användare. Detta är ett sätt att göra något fel kontrollera att vi inte riktigt har som ett alternativ i C. Vi kunde aldrig ange standardvärdet för något. Vi hade alltid att kontrollera huruvida, till exempel, om vi gjorde ett anrop till getString, var det mest korrekt om omedelbart efter att vi kontrolleras att vi kontrollerat huruvida strängen att användaren gav oss är inte lika med noll, eftersom vi inte vill starta arbetar med en tom sträng. Här, är detta ett sätt att skydda sig mot det. Om användaren inte ger oss något på något sätt, vad ska vi göra? Tja, vi ska bara säga vad de inte ge oss, Vi kommer bara att plugga in 10 istället. Så om de inte ge oss ett värde, bara använda 10 som standard. Och så här, märker att jag gör Ett samtal till hard_square, men det finns ingen snabb för användaren, eller hur? Jag bara gör en tom samtal. Men min funktion hard_square förväntar sig en parameter. Vad detta kommer att skriva ut? Det kommer att skriva ut 100, eller hur? Eftersom användaren inte ge mig något. Och så jag ska bara anta att 10-- 10 är standardvärdet. Och så detta skulle skriva ut ut 100 på en egen rad. PHP-filer behöver inte bara vara en enda fil. Du kan kombinera flera filer tillsammans, precis som du kan i C. Vägen Vi gjorde det i C var typiskt att göra en #include att få header-filer drog. Vi gör inte det i PHP. Vi gör något som kallas require_once. Och så finns det här hela sak, vad är detta __dir__? Det är bara en speciell variabel, eller special konstant, verkligen anger vad det din aktuella katalogen är. Och så det kommer att se ut i den aktuella katalogen för en fil som heter cs50.php i detta exempel här, och det kommer att hålla filen på toppen av din PHP-program, förutsatt att du sätter behöver när linjen på toppen av din PHP-fil. Så PHP används främst, men inte uteslutande används, som ett språk för webbaserad programmering. Det är verkligen hur det kom att bli. Men det är en fullständig språk, som vi har sett. Vi har sett ganska mycket allt att det kan göra detta är liknande till C, och det kan göra en fan av mycket mer än så. Men eftersom det är en hel språk och vi kan göra kommandoraden programmering i det. Vi kan köra kommandoraden program. Allt som krävs för att köra ett kommando line program som är skriven i PHP är att du har en PHP tolk. Så det är typ av analogt med med en kompilator på ditt system Om du vill kompilera din C-kod att förvandla det till körbara filer. Du måste ha en PHP tolk som finns på ditt system så att du kan tolka PHP-filer. Förutsatt att du gör, och vanligtvis denna tolk kallas PHP, och det är oftast levereras med de flesta nerladdningar eller installationer av PHP att du kan få på nätet, och säkert namnet på PHP tolken Vi har i CS50, IDE. Allt du behöver göra är att skriva php-fil. Och vad ditt program kommer att göra är att det är kommer att gå igenom tolken, är det kommer att ignorera allt som är inte mellan ifråga mark-- eller vinkelparentes frågetecken php, PHP avgränsare, och skriva ut den, och det kommer att tolka och verkställa kod insidan av PHP avgränsare. Så låt oss pop över till CS50 IDE och Ta en titt på ett par PHP-filer, kör ett par PHP-filer, i kommandoradsgränssnitt för CS50 IDE. Så här är vi i CS50 IDE, och jag har tagit mig friheten att öppna en fil som heter hello1.php. Och tydligen innehållet i denna fil är bara PHP avgränsare där, och däremellan, echo ("Hej, världen"). Detta är en ganska enkel PHP-program. Jag kommer bara att rulla ner till min terminalfönster här, och jag kommer att skriva php hello1.php, tryck enter. Hej världen. Det är förmodligen vad vi var förväntar sig att göra, eller hur? Låt oss gå upp och ta en annan tittar på ett program. hello2.php. Ungefär samma sak, inte mycket som pågår här. Den här gången, men jag kommer att uppmana användaren att ge mig sitt namn. Jag använder den readline funktionen igen. $ name = readline. Det är uppmaningen: "Vad heter du?" Tydligen jag utskrift det på en egen rad. Och sedan, så raden nedanför som kommer att vara snabb där användaren kan ange sitt namn. Och sedan använder jag lite variabel interpellation här på rad 3 att skriva ut "Hej" och oavsett användaren skriver. Så det här är analogt med att säga, hej, kommatecken,% s om vi använde printf i C. Så låt oss gå och tolka detta program. Så återigen, jag bläddra ner till min terminalfönster. php hello2.php. Vad heter du? Doug. Hej, Doug. Jag har också en annan fil som heter hello3.php. Jag kommer att rensa skärm med Kontroll L, och jag kommer att köra det. Vad heter du? Doug. Hej, Doug. Så beteendet är identisk med hello2.php, men varför är det hello3.php? Tja, här är skillnaden. I detta fall, tillkännagivande att på rad 1 här, Jag har något som inte mellan PHP avgränsare. Jag bara skriver ut out-- eller jag just skrev, "Vad heter du?" När PHP tolken ser detta, det har ingen aning om hur man ska tolka det som PHP, och så i stället för att misslyckas, det bara att spotta ut. Så märker på rad 3 nu, min uppmaning till readline, det finns ingen snabb längre. Jag bara faktiskt går att-- när PHP tolken ser detta, det kommer att skriva ut "Vad heter du?" Då ser, oh, OK, here's-- allt annat kommer att vara tolkas som PHP, så det är därför det fungerar. Jag behöver inte nödvändigtvis föranleda användaren att-- insida readline, Jag kan bara ha det utanför av PHP avgränsare och tillåta tolken att bara skriva ut den för mig. Så du behöver inte egentligen bara ha att ha en uppsättning PHP avgränsare i ditt program. Du kan faktiskt ha flera av dem, öppna och stänga dem efter behov. Så låt oss ta en titt på ett par program i CS50 IDE där vi illustrerar denna idé om att ha flera uppsättningar av avgränsade PHP. OK, så jag har öppnat en fil här kallad add1.php. Och lägg märke till vad som händer här. Precis som tidigare, har jag en enda PHP uppsättning avgränsare. Jag kommer att skriva ut meddelande, "Var snäll och ge mig ett nummer." Då kommer jag att läsa en linje och förvara den i variabeln $ num1. Då kommer jag att skriva ut igen. Ge mig ett andra nummer. Läs en linje från användaren, lagra vad de skrev in i $ num2. Lägg ihop dem och lagra den resultera i en variabel som heter $ summa, och sedan skriva ut, "The summan av dessa två tal är "och sedan INTERPELLERA där variabeln $ summan. Så låt oss bara köra detta genom tolken för att bekräfta att detta är vad vi förväntar oss. php add1.php. Kan du ge mig ett nummer, 3. Kan du ge mig ett andra nummer, 4. Summan av dessa två siffror är 7. Det är tre plus 4. OK? Så inget hemskt fint där. Och nu ska vi öppna upp add2.php. Här har jag ett par PHP avgränsade uppsättningar där, eller hur? Lines 1, 3-- ledningarna 1 och 3 har ingen PHP avgränsare. Så när tolken ser dem, det är bara kommer att spotta ut exakt vad jag har skrivit det. Så det är där jag gör alla mina uppmaning. På linje 2 och 4, ser vi mycket bekant $? php slags avgränsare, så dessa två linjer är kommer att exekvera som PHP. Och sedan på rad 5, jag har denna konstig sak här, eller hur? Vinkelbeslaget frågetecken likhetstecken. Jag ska även zooma in en lite längre. Du kan se det här är vad jag talar om just där, denna $? =. Det visar sig att det är så vanligt att anledningen till att vi öppnar upp en uppsättning PHP avgränsare är att skriva ut ett värde. Och det är allt vi ska göra. Men det finns även en förkortning för det. $? = Är PHP förkortning för att säga ungefär $? php echo summan av num1 och num2. Så det här är bara en annan förkortning för det. Så om jag kör det här programmet, php add2.php. Jag ska zooma ner lite. Kan du ge mig ett nummer, 4. Kan du ge mig ett andra nummer. Och eftersom jag inte riktigt bryr sig om datatyper i PHP, kan jag säga 4.8. Summan av dessa två siffror är 8,8. Denna funktion fungerar ganska mycket exakt samma som vi skulle förvänta oss, också. Och jag har en mer öppen upp här kallas dice.php. Försök detta igen. Jag har ett mer här kallas dice1.php, som också, se, har den vinkelparentes fråga markera likhetstecken notation där, men märker att i detta fall är jag anropa funktionen rand, som när du kan förvänta sig genererar ett slumptal. "Du rullade en", och det kommer att beräkna några slumptal, mod 6 + 1. Så det ska ge mig nummer inom området från en till sex. Kom ihåg att mod 6 skulle ge mig ett nummer i området från 0 till 5, men om jag simulera tärningskast, vilket är vad jag gör här, Jag vill inte att dessa tärningar att gå från 0 till 5, jag vill tärningar som går från 1 till 6. Och så detta är ett sätt att få mig i intervallet 1 till sex. Jag gör detta två gånger. Så tydligen jag rullar två tärningar i detta program. Så jag ska rensa skärmen, och jag kommer att göra php dice1.php. Du rullade en 4 och en 2. Och om jag kör programmet igen, rullade en 5 och 5. Så varje gång jag kör programmet, Jag får olika nummer, eftersom varje gång jag gör så, det börja om. Det kommer att skapa en ny uppsättning av slumptal för mig. Så om vi är vana vid köra program från C, vi är vana vid att skriva ./ den namn på ett program, eller hur? Det är så vi har gjort allt av våra program i C hittills. Vi kan göra detta i PHP samt genom att lägga till något som kallas en shebang till toppen av vår PHP-fil. Jag vet att det är typ av en dum ord. Det är kort för hash bang. Det är de två första tecknen där. Kom ihåg att vi kallar utropstecken ofta en smäll i datavetenskap. Det kan också vara för skarp smäll. Det finns ett par olika sätt att tolka det. Men det är i princip en speciell sorts av befaller att PHP tolken förstår som, åh, jag vill du kör programmet som är tydligen / användare / bin / php, som är faktiskt där PHP tolken specifikt bor i vårt system. Så it's-- vad som händer här är tolken förstår, oh, Jag uppenbarligen tänkt att använda i detta program för att köra den här filen. Och så kan du att hoppa över steget att behöva säga php something.php. Det finns en annan fångst här, vilket är att om vi vill att våra program till fungerar som förväntat, vi behöver göra något som kallas en fil tillstånd förändring. Och vi kommer go-- och vi pratar lite bitars mer om fil tillstånd förändringar i vår video på MVC, men det räcker att säga att detta är vad du behöver göra för att göra din php filer körbar. Så låt oss ta en titt på detta som vårt sista exempel över i CS50 IDE. Så här i IDE Jag har två filer i detta PHP katalog som inte verkar vara kallas .php. Jag har en funktion som kallas add-- Jag har en fil som heter ADD3 och en fil som heter dice2. Så låt oss ta en snabb ser och öppna upp ADD3. Och som ni kan se i början av min fil jag har denna shebang, eller hur? Denna hash märke utropstecken. Nu ska du också kanske märke som av någon anledning, Jag har inte någon syntax belyser längre, och det är vad jag hänvisade till tidigare, vilket var att om jag inte nämna min fil .php, jag har inte förmånen av syntax highlighting längre. Denna fil kallas bara ADD3. Så att jag kan köra det senare med ./ ADD3 och inte ./ add3.php. Så reason-- det är fortfarande bra, det är fortfarande giltigt PHP, men det är inte syntax markerat, eftersom den här filen kallas inte something.php. Det är den enda verkliga skillnaden här, plus Shebang. Så låt oss se vad som händer när Jag försöker och kör detta program. ./ ADD3, precis som jag gör med C. Bash. ./ ADD3 tillstånd förnekas. Detta är vad du tänker för att se om du glömmer att använda kommandot chmod för att ändra behörigheterna för filen. Som det visar sig, vanlig PHP filer kan inte bara utföras. De kan tolkas, men vi är göra något lite annorlunda här. Vi utför det. Och så jag måste lägga tillstånd om verkställighet, chmod a + x ADD3. Då kan jag säga ./ ADD3. Kan du ge mig ett nummer. 5, 6. Summan av dessa två siffror är 11. På samma sätt har jag redan chmoded dice2, så jag kan bara skriva ./ dice2, du rullade en en och en 1, du rullade en 5 och 4, och så vidare. Så det är ganska mycket Idén om ett PHP syntax, eller hur? Det finns en hel del att få igenom, jag vet. Men förhoppningsvis du har sett nu att PHP är egentligen inte så annorlunda från C och verkligen ger oss möjlighet att ta saker upp ett hack eller två. Vi behöver verkligen inte oroa dig för mycket about-- vi egentligen inte oroa sig alltför mycket om detaljerna låg nivå vi behövt oroa med C, eller hur? Vi kan fokusera på högre nivå saker som PHP tillåter oss att göra och att ta för givet att det kommer att fungera för oss. Så det ger oss möjlighet nu, övergår från C till PHP, att göra program som är mycket mer komplex och kanske mycket mer robust. Så jag hoppas att ni har kul arbets med PHP, och jag är Doug Lloyd. Detta är CS50.