[Powered by Google Translate] [Avsnitt 8] [mindre bekväm] [Nate Hardison] [Harvard University] [Detta är CS50.] [CS50.TV] Välkommen till vår näst sista avsnittet. I denna vecka ska vi prata om PHP, och sedan nästa vecka vi ska göra en liten recension för Quiz 1. Vi kommer att börja på sidan 3 av problemet ställer pack, och vi kommer att arbeta igenom den del av frågorna ganska snabbt. På sidan 3, börjar vi prata om denna skillnad mellan C och PHP i den meningen att PHP är ett dynamiskt skrivit språk, medan C statiskt skrivit, och har någon verkligen snabbt gjort några kodning i något som PHP eller Python eller Ruby innan, Javascript? Helt nytt? Okej. Alla dessa språk som jag nyss nämnde skiljer sig mycket från språk som C och C + + och Java i den meningen att när du deklarerar en variabel behöver du inte deklarera vilken typ av variabel det är, så i C vi hade fastnat med att alltid säga Detta kommer att bli en int variabel eller det kommer att bli en char * variabel, medan med PHP, med Python, med Ruby, med många av dessa mer moderna språk behöver du inte göra det alls. Du deklarerar bara din variabel, och i fallet med PHP förklarar du att det är en variabel genom att inleda med en $ tecken, och sedan den typ av variabeln bestäms av det värde det innehar, vilket är ganska häftigt. Att leka med detta lite, vi har prov PHP-kod här mellan början och slut-taggar. Vi använder denna typ av som HTML i den meningen att vi har dessa fästvinklarna här för att öppna och stänga. Du ser detta med HTML. Du ser samma sorts syntax med XML också. Detta indikerar början på ett PHP-block. Detta? Php är specifikt för PHP. Vi stänger allt med en?> Också. Vi öppnar upp en fil i vår apparaten med vad du vill. I detta paket står att ringa dynamic.php. I sanning, kan du kalla det vad du vill, men filnamnet kommer upp och vara viktigt senare, så kom ihåg vad du kallar det. Jag ska gå över till apparaten, och jag kommer att göra en katalog för § 9 Jag tror att vi är på nu. Och vi kommer att gå in i 9 §, och jag kommer att använda gedit. Låt oss se, gedit, och jag kommer att ringa min dynamic.php. Boom. Inom dynamic.php, eftersom detta är en PHP-fil och jag vill köra detta genom PHP tolken Jag måste börja allting med de öppna taggar, så jag ska börja de genast, ge mig lite utrymme mellan taggarna, och sedan poängen med denna övning var att leka med denna funktion som kallas getType, så getType, denna funktion här. Observera att det inte någon är understreck eller utrymme eller bindestreck eller nåt sånt separera de 2 ord får och skriv, bara ett ord helt och hållet. Men vad detta kommer att göra är om jag passerar i en variabel till getType, säger $ var eller $ x, detta kommer att berätta typ av i en felsökning format vad namnet av den typen är. Vi kommer att experimentera här. I synnerhet om man ser tillbaka på pset spec vi har några olika rader kod här. I den första kodraden vi initierar denna variabel, $ var, vara lika med 7, och sedan har vi denna printf linje som säger hej, är printf var tom. Printf är en av de många sätt vi kan skriva ut saker i PHP. Ofta ser du eko-funktionen används i stället för printf, men printf vi alla känner till att ha kodning i C för en stund. Vad du kan faktiskt göra är låt oss se om kopiera och klistra in fungerar. Jag ska ge det ett försök. Vi ska gå tillbaka till apparaten. Okej, och där vi går. Och avståndet är lite funky, men nu kör vi. Vi har den här koden i här. [Student] Är det inte bra stil till fliken det? Ursäkta? [Student] Är det vanligt att fliken det? Rätt, så Sam frågar om det är konvention att fliken eller inte. Vanligtvis ja. I det här fallet har jag valt att inte. Ärligt talat, ser du olika saker mellan olika programmerare. PHP används vanligtvis ofta i kombination med HTML och andra språk, och så ibland utskriften kommer att se lite funky Om du strecksatsen inom PHP start-och sluttaggar. Det beror egentligen. I detta fall kopiera och klistra inte klistra flikarna i för mig, men det definitivt gör, som du sa, gör det tydligare. Okej, om du sparar den här koden i dynamic.php sedan vad du kan göra är att komma ner till din terminal fönster där jag är just här nere i gedit, och att göra motsvarande sammanställa med att göra och sedan köra din kod i C allt du har att göra med PHP-filen är igång PHP tolken, vilket är ett litet program som kallas PHP, och argumentet du ger tolken är den fil du vill tolka. I det här fallet, dynamic.php. Hoppsan, vart jag uttrycka det? Åh, jag satte den i punkt 9, och här är jag. Det är därför. Nu om jag kör det igen Vi ser att i mitt första getType funktionsanrop var är ett heltal. I nästa var en sträng, och sedan i den tredje var en boolean. Det intressanta med detta är om vi bläddra tillbaka upp ser vi att dessa är olika typer liknande de som vi hade i C. Vi hade Ints i C. Vi sorts hade strängar i C, så strängar var inte en helt legit typ i den meningen att vår CS50 sträng var verkligen vad? Ursäkta? Missy? [Missy] Char *. Ja, det var det char * vi använt. I början av terminen var vi med sträng typ, men det var verkligen en char * under huven. Vi bara skriva definierade det, medan i PHP dessa strängar är en verklig typ. Det finns ingen mer av denna char * typ grejer. Du kommer att se att vi kan göra många fler saker med strängar mycket lättare i PHP än vi kunde i C, och slutligen har vi den här boolesk typ och den stora skillnaden här är att om vi bläddra tillbaka ner ser vi att namnet på dessa typer Nu heltal, sträng, och boolesk istället för int och bool, och som du plockar upp olika programmeringsspråk, antar att någon gång i ditt liv kommer du att komma i kontakt med olika som du kommer att märka små egenheter som denna där C kallar heltal Ints. Vissa kallar det heltal. Det finns andra termer som du kommer att stöta på. Stor int vi såg idag i SQL. Det finns även nummer och sedan bool, boolean, alla sorters skillnader där. Detta är inte särskilt intressant, men nu ska jag ge er lite tid Om vi ​​what ut-att arbeta igenom denna övning längst ned på sidan 3 där den frågar vilka typer motsvarar dessa värden här i botten. Vi har 3,50. Vi har den här saken här, vilket är intressant. Vi har inte sett det förut, men om du har följt med i föreläsning du förmodligen redan vet vad det är. Sedan har vi detta, vilket det är typ av funky. Du känner igen det här. Vad är det i C? Sam? Vad skulle detta ge dig i C? Det skulle öppna en fil som heter dynamic.php och göra den läsbar. Ja, och vad skulle vara den typ av variabel som vi skulle överlåta detta till? >> Fil stjärna. Exakt, skulle vi ge det till en fil stjärna. Detta är legitimt PHP också. Kör det. Se vad som händer när du passerar det till getType. Och sedan också kolla vad null är, vad det kan vara i PHP. Jag ska ge er ett par minuter. Du kan bokstavligen kopiera och klistra in dessa värden i, och då ska vi göra lite slumpmässigt uppmanar er och se vad du har. [Student] Jag har en fråga. << Ja. I en av föreläsningarna David sade finns det något du kan sätta på toppen av din fil så att du inte behöver skriva in PHP varje gång. Vad var det? Han var antagligen talar om pundet bang, hash smäll. Det är ett direktiv att om du markerar filen som exekverbar vad den gör är när du kör filen det kommer att berätta skalet programmet att använda PHP tolken att tolka innehållet i filen. Frågan är vad som var denna speciella linje att vi skulle kunna innefatta överst på våra PHP-filer att inte behöva omfatta detta PHP linje eller detta PHP kommando när vi vill köra filen? Och du kan faktiskt göra detta med en massa olika filer. Jag tror att det beror på var PHP binära lagras, men ofta usr / bin / php är ett bra ställe att börja. Du kan lista ut exakt genom att gå tillbaka till din apparat och skriva ut vilken php. Den som Kommandot räknar ut när du utför binära eller ett kommando där motsvarande fil är. Detta säger mig att PHP är verkligen aliasing detta binär fil som lagras i usr / bin, som är där mycket av systemets binärfilerna är installerade. Till exempel, om jag bläddra upp till toppen, nu när jag har lagt det #! linje i här Jag kan rulla nedåt, och jag kan försöka köra dynamic.php, men jag får detta felmeddelande om tillstånd nekas, och vad det betyder är att den här filen för närvarande inte ger körbara behörigheter. Det är inte markerad som en fil som någon kan köra. När du körde göra eller klang och du fick en körbar från det kompilatorn var smart nog att veta att hey, jag bygger ett körbart. Du vill förmodligen köra det, så det skulle automatiskt konfigurera behörigheterna för dig. Detta är inte fallet, men när du skapar en vanlig fil från grunden, Orsaken är oftast att du inte vill ha alla filer på ditt system vara körbara, så du måste verkligen gå in och manuellt göra det. Det enklaste sättet att göra det är med kommandot chmod, och chmod + x säger lägger den körbara bitar eftersom det är den läsbiten, skriv lite och körbara bitar, R, W och X, och säger chmod + x tänds den körbara bitar för då filen vi anger, som i detta fall kommer att vara dynamic.php. [Student] Är det slås på för alla? Låt oss kolla in det här, så hur skulle jag kontrollera behörigheterna? Vet du hur jag skulle kontrollera behörigheterna för en fil? [Ohörbart elev svar] Förlåt? >> [Student] XSD. XSD ger oss filen i hackar. Lista alla filer,-l, kommer att visa mig alla filer i min katalog typ av i deras långa, verbose notering och så här ser vi att detta dynamic.php fil ändrades senast 5 november kl 16:21. Ägaren av denna fil jharvard. Det är den användare som är inloggad Det är användaren arbetar jag som, och om du är också i apparaten som du arbetar också som användare jharvard. Du är i studenternas gruppen, och det är saker som du kommer att se tillräckligt ofta. Vi kan gå in i en massa detaljer här, men för det mesta vad du vill titta på när du vill se huruvida en fil är körbar främst användaren som äger filen, ägaren, så detta jharvard, och sedan har vi behörighetsinställningarna bitar över här till vänster, och sättet att läsa detta är att den sista biten typiskt används för märkning huruvida eller ej, åtminstone i det här fallet denna sista biten kommer ofta in på annonsen för att ange att filen är en katalog och inte bara en vanlig fil. Då följande 3 bitar här bestämma de behörigheter som ägaren av filen har, så i detta fall jharvard, som ägare till filen, kan läsa och skriva denna fil, men det finns ett streck som säger att jharvard inte kan köra den här filen. De nästa 3 bitar för koncernen, så detta är studenterna gruppen, så om det fanns flera användare på min apparat, och vi hade flera användare som en del av studenternas gruppen, Då kan alla läsa denna fil, men de kan inte skriva det, och likaså alla andra, världen kan bara läsa den här filen. Det finns en bra, lång writeup om detta, så du kan läsa på nätet. I problembild spec vi går in i detta mer i detalj. [Student] Är 218 hänvisar till världen? Den 218 är-från toppen av mitt huvud att jag glömmer, men nej. Låt oss se. Jag blanking på det just nu. Tillbaka till vad vi skulle göra med detta chmod + x där vi ville ge dynamic.php körbara behörigheter, och frågan var huruvida detta skulle ge körbara behörigheter till alla eller bara jharvard, och vi kan se detta genom att köra kommandon och skriva ls-l, och nu ser vi att det är markerat som körbar. Du ser att det fanns en färgförändring. Nu dynamic.php listas i grönt, och det ser ut svaret på frågan är vad, Charlotte? [Charlotte] Endast jharvard. >> Endast jharvard, ja. Om vi ​​ville slå på körbara bit på för alla hur kan vi göra det? Några tankar? >> A + x? Ja, exakt. Charlotte sa att vi kan göra chmod en + x av dynamic.php, och nu när vi kör ls-l ser vi att körbara bitar är verkligen slås på för alla. Och du kan faktiskt göra baksidan av detta, så att du kan stänga av den för alla med minus. Nu är avstängd, och nu kan vi slå på den igen för jharvard så att vi verkligen kan köra det nu, och nu ser när vi kör koden här speciella #! längst upp, #! linje, sade skalet, berättade vår terminal hey, när denna fil körs, Använd / usr / bin / php att tolka den här filen och sedan skriva ut resultatet. [Ohörbart elev fråga] Visst, låt mig rulla tillbaka upp. Precis som här. Du kommer att se alla dessa direktiv börjar med denna pund och sedan utropstecken, ibland kallas Shebang, hash smäll. [Student] Hur kan vi köra det med PHP dynamic.php innan vi gör den körbar? Frågan var hur vi kan köra med PHP binära medan dynamic.php är inte körbar? Detta är super viktigt eftersom det är exakt hur det kommer att fungera när du skriver problembild 7. För det mesta PHP-filerna inte är direkt körbar. Det sätt som fungerar är att det är PHP binära som är körbar. Tolken är det som är exekveras, och så vad det gör är bokstavligen sörplande i hela innehållet vår dynamic.php fil och gå rad för rad och verkställande dessa kommandon, så det använder vår PHP-fil som en lista med instruktioner. Det är inte direkt köra den. Det är där vi säger att dessa filer tolkas vid körning. Det är en körning språk i stället för något som är bestämd vid kompileringen, inte ett kompilerat språk som C. Finns det något sätt att få ett språk körtid att agera som om det är en kompilering språk, som om du har alla driften görs på servern snarare än du vet vad jag menar? Ja, så frågan är Finns det något sätt att få körtid språk att agera mer som kompileringen typer av språk? Och det är, jag menar, det är ett aktivt forskningsområde för många av dessa företag. Jag tror att Facebook har gjort en hel del arbete med PHP och sammanställning ner, vilket gör det snabbare, optimera den eftersom deras webbplats är byggd på PHP. Om du har följt node.js alls, som är typ av ett JavaScript tolk att kunna köra JavaScript utanför webbläsaren, utanför din webbläsare, eftersom traditionellt Javascript skulle bara köra inne i Firefox eller Chrome, och det skulle kunna användas för att göra häftiga animationer hända på en webbsida och gör din webbsida dynamisk. Det är byggt på en hel del arbete som Google har gjort att göra JavaScript och C + + binda samman, så det finns en hel del aktivt forskning få dessa språk att interagera och optimera dem, främst eftersom så många människor kan koda i PHP och JavaScript eftersom det är mycket enklare. Det är mycket trevligare. Du har inte pekare. Du har inte typ flyter runt. De ville få fördelarna med dessa kompilering språk med alla typkontroll och hastigheten och den nedre minnesanvändning och allt det samtidigt bibehålla flexibilitet och användning av dessa nyare. Tillbaka till vår ursprungliga plan för angrepp. Vi har några av dessa frågor här i vårt problem set spec. Låt oss gå igenom dem väldigt snabbt, och vi ska gå runt i rummet. Charlotte, är vilken typ 3,50? [Charlotte] Det är en dubbel. >> Det är en dubbel. Jimmy, vad är det här nästa? >> En array. En array, fantastisk, och Jared, vad är fopen? [Jared] Det är en resurs. >> Det är en resurs. Det är typ av en ny, inte en fil stjärna, inte en fil. Det är en resurs är den typ i PHP, och jag är ledsen, Ella, är det sista noll vad? Null. Null, hur är det stavas i PHP? >> På samma sätt. På samma sätt, huvudstäder? >> Ja. Ja, okej. Nu kör vi, vi har en dubbel, vi har en matris, vi har en resurs, och sedan har vi noll. Låt oss se nu du sett, låt oss se, så nu har jag gissa vad jag också vill göra är att dra upp denna webbsida här, här php.net / manuell, så om ni kopierar det och öppna upp en webbläsare. Jag ska dra upp Chrome, sätta det i. Jag vill visa dig det här inte bara för att vi kan prata hela dagen om typer och allt det roliga grejer utan snarare för att det är PHP manual, och det finns en hel del PHP programmerare där ute. Det finns en hel del PHP-webbplatser där ute, och som ett resultat finns det en hel del dokumentation om PHP, och handboken denna php.net är ett riktigt bra ställe att gå när du har frågor om vad som är det bästa sättet att göra X i PHP eller hur ser en funktion ut? Bara typ av att bekanta sig med hur det ser ut eftersom du kommer att komma hit ofta, som lite för problem 7. Om du hamnar gör ett lärdomsprov som använder PHP detta kommer att vara en plats som du kommer att bli mycket väl förtrogen med. Ofta hur människor gör detta är att de använder Google för att söka efter platsen, och de använder inte sökrutan som är här uppe i övre högra, som är typ av små. Om du googla runt efter något att göra med PHP och du ser en av de manuella länkarna dyker upp du normalt kan lita på det som en ganska bra resurs. Awesome, så av dessa typer, bara av nyfikenhet, vilka har vi inte sett? Allt vi har inte sett här? [Student] Resurs. >> Vi såg resurs med fopen samtalet. [Student] Objekt. >> Objekt vi inte sett säkert. Återuppringning vi inte har sett. Det är några av dessa pseudo-typer. Vi definitivt bara såg heltal och dubbel. Vi såg några av de andra, så om vi klickar på heltal Vi kan se är det några andra heltal som de har här? Är de helt så heltal, heltal, heltal. Vissa språk har större heltal typer, som vi såg på MySQL idag var int och sedan stora int. Cool. Så, PHP manual. Låt oss gå tillbaka till vår problembild spec, och vi kommer nu rulla ner på sidan 4. En av de saker som händer när du får dessa språk som inte har denna statiska skriva, så dessa språk där man måste deklarera typen av en variabel på framsidan är att få dig fall du kan börja ha variabler av olika typer interagera med varandra, och PHP gör denna sak där man försöker göra vad den anser vara det mest förnuftiga att göra när du har 2 olika typer interagerar med varandra. Till exempel, om vi ser på dessa kodrader här Ni ser att vi har vad som händer när Vi försöker lägga till strängen 1 till heltalet 2. Vad händer om vi försöker lägga en sträng som inte är ett numeriskt värde utan snarare verkliga karaktärer, CS till antalet 50? Sedan får vi se är det något annat som händer där stället för att lägga en sträng till ett antal som vi lägger ett nummer till en sträng, och så vidare och så vidare till den punkt där vi får någon form av konstiga saker här där vi har 7 + sant. Vad sjutton betyder det? Om ni går vidare och klistra del av denna kod i din apparat. Du kan hålla den i dynamic.php. Vi får se vad som händer. [Student] Använd bara skriva ut, inte printf? Ja, så finner du att utskriften är också ett giltigt funktion för utskrift i PHP. Det finns många olika sätt att göra det. Vi får se med ett par av de exempel som senare när vi börjar prata om den unika problem som vi kommer att skriva och sedan koncentrationer problem som vi kommer att skriva att även om vi har fopen och fclose Det är ofta inte det enklaste sättet att läsa i innehållet i en fil. PHP har många av dessa C-liknande holdovers. [Student] När jag sätter i alla 6 av de saker jag bara få ett nummer som en utgång. [Nate H] När du sätter i alla 6 av dessa saker. Låt oss se är det eftersom det är möjligen- en sak är att dessa tryckta samtal inte avslutas i slutet med nya linjer. Det finns ingen ny rad mellan varje av dessa tryckta samtal, så kanske du får en stort antal, och det är egentligen bara blandning av nya linjer tecken. [Student] Okej, hur gör jag se- Nåväl, det finns en massa olika sätt. Du kunde manuellt lägga in en utskrift av en ny rad tecken, ett eko av en ny rad tecken, utskrift av ny rad. [Student] Så eko är samma sak som printf? Printf är som C printf där du skriver en formaterad sträng. Du levererar det formatsträng och alla variabler platshållare. Det är ofta något som inte används, låt oss se, en ansvarsfriskrivning, Jag är mindre bekant med PHP än jag med andra web språk, och när jag har programmerat i PHP Jag brukar inte använda printf eftersom jag tycker att det är snabbare att använda sträng interpolering funktioner som den har, som vi kommer att gå in och jag ska visa dig på bara en sekund, medan i C vi slags måste göra detta Hacky sak att få det att skriva ut på rätt sätt. Du kan faktiskt sätta variabler direkt i strängar i PHP. Printf är typ av alltför lång för vad jag brukar göra. Ja, Ella. [Ella] Generellt om du får tolka fel betyder det- som på C det inte berätta exakt var felet är och vad det är, så betyder det titta igenom hela din kod och räkna ut det? Det är oftast mer riktade än så. Jag tror i det fallet var lite utanför, så jag tror i så fall vi saknade ett semikolon. Det försökte vettigt av allt, så som dessa tolkade språk, är tolken ska försöka och gör sitt bästa för att få allt att fungera korrekt. Du kommer att se, till exempel, i JavaScript Du kommer ofta online uttalanden avslutas med ett kommatecken precis som de gör i PHP, precis som de gör i C. I JavaScript vissa av JavaScript tolkar i många av de webbläsare sätta i semikolon för dig Om du råkar vara saknas dem. De ska försöka rymma för några slarv från din sida. Det är där det kan vara att försöka och försöka och försöka göra saker och ting fungerar, och slutligen kommer det att komma till en punkt där det står okej, Jag kan inte göra saker och ting fungerar på ösa, och det är där du får ett radnummer som kan verka lite off från den exakta platsen. Okej, så låt oss gå igenom det här verkligen snabbt. Vi slutade med Ella, så låt oss gå över till Missy, och Missy, vad utskrift av sträng 1 plus antalet 2 ge dig? [Missy] 3. >> 3. Verkar det vettigt? Sortera på? Ger det dig ett nummer? Ger det dig en sträng? [Missy] Ett tal. >> Det är en siffra. Men det är att skriva ut det, så det kommer att ge dig någon form av snöre. En sak vi kan göra för att kontrollera detta är om vi gör $ var = 1 + 2 och då säger vi eko av getType, så vi använder tredjedel sorts skriva här. Nu kan vi se vad som händer här. Här är vad vi har är att vi fick ett heltal av detta. Även om vi lägger denna sträng till ett tal, vi fick inte en sträng av det, precis som Missy sa. Vi fick ett heltal. Okej, så låt oss se, nästa upp, Kevin. CS + 50? >> [Kevin] 50. [Nate H] 50. Verkar det vettigt? [Kevin] Ja. [Nate H] Varför? Varför gör det meningsfullt för dig? [Kevin] Eftersom det bara är att ha strängen med noll numeriskt värde. Ja, bra. Typ av tvetydiga situationer, men det är bra att veta vad som händer. Stella, vad som händer härnäst med nummer 1 + string 2? [Stella] 3. >> 3 igen. Och i detta fall, får vi en sträng eller ett nummer? Låt oss ge det ett försök. Någon snabbare än mig få svaret? Charlotte? Åh, jag didn't-Okej, låt oss se, vi kommer att göra samma sak där vi har en rad plus en sträng, och vi kommer att upprepa den typ, se vad vi får. Vi får också ett heltal. Det spelar ingen roll vilken som är den sträng, som en är antalet. Vi kommer fortfarande att få ett heltal. Det kommer fortfarande att göra vad vi kan förvänta oss. Okej, så Sam, hur 90 + 9 flaskor öl på väggen? [Sam] 99. >> 99. Inga flaskor öl på väggen, men. Det ger oss lite mer information om vad som händer. [Sam] Om du hade skrivit 9 med bokstäver då skulle du ha 90, eller hur? [Nate H] Ja. Frågan var om vi hade skrivit 9 ut som N-I-N-E skulle vi ha fått 99 eller 90? Vi skulle få 90. Det är bokstavligen bara ute efter siffra tecken. Det är inte smart nog att inse antal ord och det där. Ja. [Student] Finns det något sådant som typecasting i PHP? Det finns, och det är precis som du skulle göra det i C. Vad sägs om 10/7, Charlotte? [Charlotte] 1,4285. [Nate H] Ja, så vad kan vara förvånande om det här? Vad skulle hända om du gjorde samma saker i C, om du gjorde 10/7 i C? [Charlotte] Det skulle bara ge dig-beroende på hur du typecasted antar jag Det skulle ge dig endast ett begränsat antal siffror efter decimalkommat. Ja, så ett begränsat antal siffror efter decimalkommat. Vad kan vara-skulle det ge dig några siffror efter decimalkommat? Ofta inte, så igen, beroende på hur du typecasting det Det kan eller inte kan konvertera den till ett flyttal. Här var det typ av trevligt att det gjorde. Hade vi visat dig detta tillbaka när vi började göra den här typen av saker i C det förmodligen skulle ha gjort lite mer känsla att det inte bara gå till 1. Och slutligen, Jamie, hur 7 + sant? [Jamie] 8. >> 8. Vad betyder det? Jag antar att det bara ger sann värdet 1. Ja. Vad händer om vi ändrar det till false? [Student] 7. Ja, så kom ihåg var vi talar om dessa binära värden, 1 är på, 0 är avstängd? Nu har vi riktigt är 1, 0 falsk, och du kanske inte har sett detta i C-exempel som vi har gjort detta tidigare termin, men historiskt bool typ i C inte har varit en riktig typ, så att folk har använt 0 och 1 i stället för sant och falskt. Detta är en manifestation av detta. Okej, så en viktig del om allt detta är att vi har dessa olika typer. De kan samverka med varandra. De kan ofta interagera med varandra på ett sätt som är bra, som vi har sett här. Det är trevligt att kunna ha snöre 1 och nummer 2, lägga ihop dem och få 3. Som är vettigt. Men när du skriver webbplatser och speciellt när du bearbetar indata, så att du har skrivit ett webbformulär som samlar in information från användaren och sedan går att bearbeta den på baksidan slutet, på serversidan i PHP-kod om du förväntar värdet som användaren skrivit in och lämnas till formuläret för att vara ett heltal eller att vara ett flyttal eller något liknande måste du explicit kasta den och gör sedan någon typ kontroll. Du vill inte att bara förlita sig på denna typ av jonglering för att göra saker och ting fungerar, särskilt av säkerhetsskäl och bara för robusthet på din webbplats. Bara något att tänka på att när du hanterar formulärdata, allt som kommer i inlägget eller GET superglobals se till att du alltid validera den och omvandla den och typecast det. Och precis som vi pratade om en stund sedan att typecasting i PHP är exakt samma som i C, där du har parenteser och sedan typen. Kom ihåg det. En funktion som kommer väl till pass när du gör detta är att vi har använt, och det är typ av som en parentes, Vi har använt denna getType funktion här att räkna ut vilken typ av en variabel, och medan detta är praktiskt för felsökning och för att se vad en variabel är av typen du inte vill använda detta, till exempel i ett tillstånd där du kontrollera om getType av $ var = heltal göra något. Detta är dålig, dålig, dålig. Istället finns dessa funktioner kallas är heltal, är sträng, är array som du vill använda i stället, så i det här fallet vad jag skulle vilja göra i stället för den här killen här är att använda är heltal var. Och de är ofta kallas är is_ * i den meningen att man skulle kunna ersätta * med heltal, sträng, et cetera, och bara för att se riktigt snabb Detta är int php. Ser ut som du kan göra antingen är int eller finns heltal också? Ja, alias, så int heltal alias. Cool. Hur gör vi? Låt oss öka takten lite. Nu ska vi prata om arrayer, så att du kan se i nästa del av spec vi talar om hur arrayer i PHP är lite annorlunda än de är i C. I sanning, de är typ av en blandning av de matriser som du har lärt känna och älska i C där allt är av samma typ lagras i följd och intilliggande i minnet, och du har dessa numeriska index. Du har index 0, 1 index, index 2, och du lagra värden på dessa index. Du också i C, när du skrev Speller, många av er gjorde hash-tabell strategi, och du såg att det hade vi en annan typ av lagring där vi kartlägga en nyckel till ett värde, så när du försökte spara något i hashtabell var du tvungen att ange att du ville spara den med en särskild nyckel, och att nyckeln bestäms platsen för värdet och där det skulle lagras. Du har typ av fick båda dessa begrepp som händer på samma gång i en PHP-array, och som ett resultat, kallar vi ofta dessa associativa arrayer där vi associera en nyckel i ett värde. I nästa del vi talar om en enkel PHP-array där vi har nycklar a, b, och c, alla strängar, kartläggning av heltalen 1, 2, och 3. Och du kan få nycklarna av olika slag. Du kan ha vissa tangenter som är strängar, vissa nycklar som heltal. Du kan ha värden av olika slag. Du kan ha ett värde som är en sträng, ett värde som är ett heltal, ett värde som är ett föremål eller annan matris, till exempel, alla i samma Array-objekt, är vilken typ av konstigt. Du behöver inte ha en array som bara har fått en typ av element i den. Du kan ha många olika saker på gång där. Den andra sak att notera är att när du ser något liknande i din kod, som är giltig PHP att förklara en rad precis som denna, 0, 1, 2, 3, 4, 5, som kommer att förklara en initierad $ arr vara här arrayen. Men vad du faktiskt får under huven är den här typen av implicita generering av nycklar där vi fick 0 till 0, 1 till 1, 2 till 2, 3 till 3. Och det visar sig att även om du har en array som den här killen här uppe där du har a, b och c som tangenterna och då du börjar använda metoden array tryck för att börja använda denna array som en skorsten, så att du kan se att denna array objektet är denna matris verkligen blir överbelastad. Vi kan använda det som en array. Vi kan använda det som en hashtabell. Vi kan använda det som en stapel. När du börjar trycka saker på denna rad det första du trycker på denna kommer att vara index 0 och sedan index 1 och index 2. Du kan få den här typen av implicit generationen av nycklar om du inte anger dem explicit. Det sätt du anger nycklar uttryckligen naturligtvis är att använda detta fäste notation, som liknar arrayer utom i stället för endast tillåta heltal index i här, nu låter vi något. Om du vill att din nyckel till en sträng, skulle du ange det så här. Om du vill att det ska vara en int anger du den med int du vill använda. Frågor om det så här långt? En av de trevliga sakerna med denna idé är att du kan alltid bara ha ett värde som lagras med en viss nyckel. Om vi ​​går tillbaka till vår apparat-Låt mig ta bort en del av det här. Och låt oss säga att jag initiera en array som 0, 1, 2, gjort. Om jag vet nu att, till exempel, om jag echo $ arr [0] Jag kommer att få värdet 0 skrivs ut, och eftersom det kan alltid bara vara ett värde som lagras för en viss nyckel Om jag lagrar något på $ arr [0], säger en, då vet jag när jag echo $ arr [0] igen Jag tänker inte få 0 skrivas ut som tidigare. Jag kommer bara att få en. Så detta är i grunden att säga att jag inte kan ha $ arr [0] lagring 2 olika värden. Det kan inte lagra både 0 och strängen en, som denna bokstavligen ersätter vad var på $ arr [0] tidigare. Anledningen till att jag tar upp detta körs det, se vad som händer. Se här att jag fick 0 skrivas ut och sedan en här nere. Det finns ingen ny linje där eftersom jag var lat och inte lägga det i. Vad är coolt om detta är att vi kan använda detta som ett sätt att fånga denna idé av en uppsättning där vi inte kan ha flera nycklar i en matris. Vi kan inte ha samma nycklar i en matris. Jag kan inte ha nyckel 0 och värdet 1 och viktiga 0 och värde en eller nyckel 0 och värdet true. Nycklarna är all-det finns bara 1 nyckel i arrayen. Även om du kan ha samma värde som lagras flera gånger i rad under olika nycklar det är inte möjligt att ha identiska nycklar flera gånger i din PHP-array. Om vi ​​tittar på det här nästa problem, unique.php, där vi vill öppna upp en PHP-fil innehåller en lista med strängar, en sträng per rad, och vi vill hitta alla unika strängar i filen allt vi behöver göra är att använda en av dessa PHP arrayer och använda strängar i filen som nycklarna till denna array och hålla uppdatera vår array som vi lagrar dessa nya nycklar. När vi läser varje rad ur filen kan vi lagra det i arrayen, och i slutet kommer vi att ha som våra nycklar i vår grupp alla de unika strängar i filen. Verkar det vettigt? Låt oss se hur det fungerar. Vi kommer att öppna upp, enligt spec, kallas en ny fil unique.php. Öppna. Oj, förlåt, ny fil. Vi kommer att börja den med samma start och slut-taggar. Vi kommer att spara den i 9 §, och vi kommer att kalla det unique.php. Okej, nu zooma in Tanken här är att öppna en fil, Läs i filen rad för rad. För varje rad i fil Vi kommer att ha en matris där vi har  linjen som vår nyckel. Och sedan när vi kommer till slutet här $ Arr nycklar är unika linjer från filen eftersom vi vet att om jag sätter linje i denna array flera gånger det kommer bara fortsätta åsidosätta det gamla värdet, och vi kan faktiskt sätta array linje som själv bara så. Detta är lite konstigt. Vi lagrar samma nyckel värde par om och om och om igen, men eftersom vi är garanterade att det bara kommer att finnas 1 nyckel heter linje så om vi har en fil som säger-en fil av animaliska tongångar och det har woof, woof, mjau, mjau, mu, mu, och varje gång vi läser ett djur brus Liksom woof och vi lagrar det i vår grupp får vi woof, och sedan andra gången Vi lagrar woof skriver den över den första gången som vi lagrat det. I slutet kommer vi bara att ha en post i arrayen för varje djur tongångar i vår djur ljud-fil. Har ni lita på att du kan ta itu med öppnandet av en fil i PHP? Ett sätt att göra det-låt oss gå över detta snabbt-ett sätt att göra det är med fopen, som vi såg tidigare. Du kan fopen some_file.txt. Du kan öppna den i läsläge, precis som i C. Det är en mycket bra sätt att göra det. Du kan även då för att läsa i filen rad för rad har samma funktioner, många av dem, som du gjorde i C. Du har fgets. Du har feof, även om vi inte gillar att använda den eftersom, kom ihåg, det var inte bra i C. Du kan göra det på samma sätt, men här är en riktigt cool grej. Tyvärr, jag vill inte göra $ fil, men det finns en funktion som kallas fil i PHP, och denna funktion här är coolt eftersom den läser hela innehållet för filen som du anger, så some_file.txt, läser hela innehållet i denna fil i en array och sedan kan du iterera över den, vilket är ganska tjusig. Om vi ​​går till exempel till vår webbläsare och vi ser på Google för PHP-fil ni kan se här att vår handbok säger att filen läses hela filen i en array, och vi kan file_get_contents att returnera innehållet i en fil som en sträng, men typiskt bara få det som en matris är riktigt trevligt eftersom vad den gör är den bryter upp det så att varje element i arrayen är en rad i filen, så om vi ser på fil 0, det är den första raden i filen. Fil 1, andra raden, fil 2, tredje raden, och så vidare och så vidare. Skulle det inte vara trevligt om det var allt du hade att göra i C? Ganska tjusig. David visade detta i föreläsning och formspråk han visade var att utöver vår standard för loop-i PHP hade vi att för ($ i = 0; i <10, i + +), och du kan göra detta i PHP även samma sak- Vi har även denna coola konstruktion som kallas foreach. Foreach är verkligen praktiskt när iteration över arrayer eller dessa datastrukturer eftersom det tillåter dig att dra ut varje element i arrayen utan att manuellt behöva göra indexering själv, utan att manuellt behöva skapa ett index variabel öka den, dra ut värdet i arrayen vid den tidpunkten, eftersom det är en mycket vanlig sak att göra. Du har förmodligen gjort att massor av gånger när du gjorde C grejer över terminen, så med denna foreach vi kan slinga över den här filen array, och syntaxen är att vi vill nu slinga över denna rad och ange att variabeln ska vi använda för att lagra inslaget av denna array lokalt lokal till tillämpningsområdet för denna foreach loop, är att vi kommer att kalla det linje. Om det är en fil med bara ord och det finns ett ord i en linje Vi kan kalla det ord också, egentligen bara du ger det ett namn, vad du vill kalla det, och sedan inuti slingan kan du göra vad du vill med denna variabel linje. Om det inte tillräckligt för att få värdet i matrisen och du också vill få indexet tillsammans med det du kan ange ett namn för indexet liksom värdet, och nu har du tillgång till 2 variabler. Du har $ i och linje där $ i är indexet i arrayen, och linjen är den linje som du hämtat från filen. Till exempel, om vi ville skriva ut eko rad 0 i filen som denna, vi kunde göra det precis så här, "är Linje $ i av filen $ raden" och här är något som vi inte heller sett ännu heller där jag bara helt hoppat över hela denna% s% d affärer att vi var tvungna att ta itu med i C, och i stället har jag gått direkt till skriva variabler i rad i min sträng. Detta kallas variabel interpolering, sträng interpolering där du fyllning variablerna rätt i, och PHP tolken är smart nog när det läsa igenom en sträng som börjar med citationstecken, inte apostrof, med enkla noterade strängar du inte kan göra detta, men med dubbla citerade strängar som läser igenom det ser för variabler. Det jagar ner dem, och om den ser variabler kommer det att ta värdet av variabeln och stoppa in den i strängen om det kan omvandla den till en sträng representation, vilket är ganska tjusig. För nu, låt oss kommentera ut resten av allt, spara, och vad vi kan göra nu är att vi kan öppna upp en fil som vi kan kalla some_file.txt-låt oss skapa en ny fil- och vi kan sätta i en massa nonsens grejer här bara för att testa allting, spara den, kalla det some_file.txt, som jag gör här uppe i toppen, och nu om jag zooma ut bara för att kontrollera att allt är i samma katalog- det ser ut som jag har unique.php och some_file.txt i samma katalog. Om jag kör php unique.php se hur det skriver ut varje rad i min fil och vad linjen är? Det är ganska kraftfull, eller hur? Titta, det tog 3 rader kod för att öppna upp en fil. Tja, 4 rader kod. Jag kan inte räkna idag, tydligt. Men egentligen bara 2 intressanta rader kod, eftersom de andra 2 var klammerparenteser, men i detta mycket kod kunde vi öppna en fil, iterera igenom den, dra ut radnummer och själva linjen och skriva ut den. Cool stuff. Charlotte. [Charlotte] Jag har en fråga om syntaxen. Så foreach behandlar varenda rad i filen som du öppnar, och sedan när du vill göra saker med varenda linje du göra just det som och sedan associera värdet. [Nate H] Vad du kan göra här, frågan var den foreach har att göra med arrayen, så foreach syntaxen är foreach verkligen, och märker att det finns inget utrymme eller något mellan för och var. De måste gå bredvid varandra, och sedan tar i en array, och då har du här andra sökord kallas det måste finnas där, och sedan efter det så kan du antingen lägga en variabelnamn, i vilket fall du kommer att dra ut värdena i matrisen, inte de index, eller om du gör det som vi har skrivit under du får nycklar och värden. Du har foreach-element i arrayen eller paret av arrayen som fastkilad till värde eller som bara värde. Beroende på vad du behöver, om du inte behöver nycklarna, då kan du gå med värdet. Om du vill att knapparna kan du gå med dem också. [Charlotte] Jag insåg också att vi aldrig förklarade i eller linjen. Hur vet ens vad de är? [Nate H] Vad menar du med deklarera? [Charlotte] Vi har aldrig berättade vad jag eller linje medel. [Nate H] Vi sa aldrig datorn vad jag eller linje innebär i termer av- [Charlotte] att de är indexerade eller att Dom- [Nate H] Vi berättade aldrig att detta är tänkt att vara indexet eller nyckeln och värdet, och det beror på att det är PHP tolken. Detta fungerar som deklarationen och säger okej, är nyckeln kommer att vara en variabel kallas i lagras i en variabel som kallas i.. Värdet kommer att lagras i en variabel som kallas linje, så detta fungerar som förklaring av dessa variabler och säger $ i är en nyckel, och $ linje är ett värde. Ja, Ella. [Ella] Om tangenterna inte görs numeriskt Hur avgör man vilken ordning det kommer att skriva ut allt? Är som det bara ordning det in i? [Nate H] Låt oss ge det ett försök. Låt oss skapa en variabel som heter arr, och vi kan göra en går till 7. Låt oss säga 0 går till en annan array med 1, 2 eller äpple. Låt oss säga 7 går till 1, går b 2, och 3 går till 4. Detta är lite av en galen ser exempel eftersom vi blandar ihop strängar och heltal överallt. Det finns ingen riktig ordning på detta arrayen. Jag menar, vi kan beställa allt i alfabetisk ordning efter nycklarna. Vi kunde beställa allt alfabetiskt efter värdet. Vi kan försöka ta hänsyn till att vissa är strängar, vissa är Ints, och vi kunde försöka omvandla dem alla till samma typ och se vad som händer, eller vi kan betrakta dem i värdet som vi redan angett dem där vi sätter den här killen i första, den här killen i andra, den här killen i tredje, den här killen i fjärde, et cetera. Låt oss se vad som händer när vi kör den här koden. Om vi ​​bläddra ner och göra samma sak, och här är inte skriva ut de nya linjerna. När det läser saker ur filen det inklusive de nya linjerna i de värderingar, som varför det skrivs ut fint, medan här är det inte, så det är därför allt är smushed ihop. Låt oss lägga till i den nya linjen bara för att göra saker och ting bra. Låt oss köra den och så här titta på vad som hände. Det tryckta ut allt i den ordning som vi sätter in det i arrayen. Det bevarar ordningen i den meningen. Att gå tillbaka till problemet med Uniques där vi vill kunna iterera över en fil, och vi ska ge det some_file.txt, och vi kommer att iterera över det så här. Vi sade att vi ville använda en array för att se till att vi hade fått alla unika linjer ur det, och vi skulle kunna göra det riktigt lätt genom att bara lagra i en array som vi naturligtvis förklara utanför en slinga, och vi sa att om vi använde raderna i filen som nycklar i vår grupp om vi gick in i en dubblett linje vi skulle åsidosätta det tidigare värdet. Det är inte alltid möjligt att ha 2 nycklar som är identiska i samma matris. Vi kan göra just det. Vi ska bli av med denna eko uttalande här. Här vi lagra rad i filen i vår grupp använda sig själv som nyckeln. Inget att den, och det visar sig att vi inte ens behöver denna nyckel. Vi behöver inte jag variabel. Vid denna punkt om vi skulle göra en annan foreach loop och vi skulle slinga över varje arr och linje nu om vi ECHO oops, sorry. Vi kan inte använda kommatecken. Vi måste använda detta som sökord. Nu om vi upprepar linje vi bör få alla unika ord i filen. Om vi ​​går upp till some_file.txt, och låt oss säga att vi äpple, banan, äpple, äpple, banan, om vi skriva ut alla unika ord i denna fil vi bara få äpple och banan för att skriva ut. Om vi ​​rädda denna, nu här ska vi in ​​igen i, php unique.php och ta-da. Vi har lyckats uniqued filen. Den sista delen av detta problem ber dig att sortera denna array innan du skrev ut eftersom i detta enkla exempel som vi har just gjort Vi hade tur i den meningen att fil- vi gjorde detta krystat exempel med äpplen och bananer. Det var redan sorterade. Men att använda den enkla sorteringsfunktionen kan du sortera en array, vilket är ganska tjusig. Det sista jag ville prata med er om riktigt snabbt är att denna typ av PHP är allt gott och väl, och det är super praktiskt att veta hur man ska göra om du någonsin behöver göra lite, snabba saker programmatiskt. Till exempel, om jag behöver skriva ett program som, säg, sätter alla i sektioner Jag tänker inte gå och skriva det i C. Det kommer att vara lång. Det kommer att bli lite av en smärta, speciellt om det finns inblandade filer, precis som ni har sett. Det är så trevligt att med bara så mycket kod här vi kunde rippa genom en fil, dra ut alla unika värden och skriva ut dem tillbaka ut. Men för era uppdrag, för dina projekt, om du bygga webbplatser med PHP strömmen är att Vi kör våra PHP-filer genom denna tolk och tolken bearbetar allt inom PHP-taggar, lämnar allt annat orört och spotta ut resultaten. Vi kan göra detta för att bygga HTML programmering. Nu, om vi går tillbaka till spec, det sista problemet i spec talar om denna idé av koncentrationer och skapa en rullgardinsmeny, som du kanske eller kanske inte vill göra, beroende på vad din slutliga projekt gör, som tillåter användaren att välja från en lista över alla möjliga koncentrationer deras en koncentration. Nu är denna typ av en smärta att skriva ut det här och måste göra allt detta manuellt, speciellt när du har att se att du har alla fästvinklarna på rätt plats och alla citat på rätt plats, så med PHP kan du göra detta programmatiskt, och du kan göra detta riktigt snabbt. Låt oss se hur man gör detta. Vi kommer att öppna upp en ny fil. Vi kommer att sätta i våra PHP-taggar. Vi kommer att kalla det concentrations.php, och nu när du gör detta, typ av det goda tänka när du försöker att mixa och matcha din PHP och HTML är att räkna ut, okej, vad är den del som jag vill programmässigt generera? Vad är den del som jag programmässigt kan generera? Det är sant att du kan göra alla dina HTML insidan av PHP block. Du kan upprepa alla HTML som strängar. Till exempel, om jag vill börja göra de utvalda taggar inuti PHP Jag kan säga eko, säger välj namn = koncentration, och sedan ner under jag kunde ha en annan eko-taggen eller annan eko kallas stänga välja. Detta är ett sätt att göra det eftersom det här är bokstavligen kommer att göra är skriva ut denna sträng när det körs via PHP-tolken, så blir resultatet HTML. Om jag sparar filen som det är just nu och jag kör php concentrations.php titta på vad jag fick. Jag fick denna öppna stäng Välj tagg. Om jag skulle göra detta och jag skulle spara resultatet till en fil, säger concentrations.html-vänta, ser det ut som på l har gått över till andra sidan, nu om jag öppnar upp här concentrations.html ser jag har en giltig HTML-fil. Är det slags konstig? Vi använder PHP för att skapa HTML, skapa giltig HTML. Det sätt vi gör det är vi bara ska ha PHP utskrift HTML som vi vill att det ska skrivas ut. Detta är bokstavligen hur PHP-webbplatser fungerar. När du besöker en webbplats som skickar dig till något liknande något, något, något dot com slash index.php datorn bokstavligen ringa upp index.php, kör det genom PHP tolken och vad skräp kommer ut det skickar tillbaka till webbläsaren och säger hej, webbläsare, tolkar detta som HTML. Det fina är att det kan vara jobbigt att ständigt skriva eko, eko, eko, eko och bifoga allt citat som detta, så om du vill skriva HTML som kommer att vara statiska själv kan du göra det så här, sätta den utanför, stänga den, och så här du sätter bara in PHP-taggar det som du vet du vill programmatiskt skapa, och i detta fall är det de alternativ taggar som är en smärta att generera. Till exempel skulle vi kunna skapa tusen alternativ taggar genom att göra något sådant, $ i <1000, i + + och säger value echo option = $-hoppsan, jag kan inte göra det. Nåväl, låt oss ge det ett försök och se vad som händer. $ I och sedan säga $ i