[Powered by Google Translate] [Uke 8]
[David J Malan] [Harvard University]
[Dette er CS50.] [CS50.TV]
>> Velkommen tilbake.
Dette er CS50, og dette er begynnelsen av uke 8.
Et par muligheter denne uken,
blant dem denne talen her, der noen mat vil bli servert.
For mer informasjon sjekk ut lysbildene som er online.
Og også en annen hendelse denne uken av vår egen Thomas Carriero.
Han er en av CS50 er tidligere leder undervisning stipendiater som er nå på Dropbox,
og han er fyren som hektet oss opp med det du vet hva,
så hvis du vil ha mer av det hodet til deres snakk ettermiddag for Dropbox og mer.
CS50 lunsj er denne fredagen.
Vær med oss ​​hvis du er i stand, 1:15, som vanlig, på Fire and Ice.
>> Og nå har vi dykke inn i noe som kalles Seminarer.
Våre CS50 Seminarer, husker, er disse valgfrie klasser ledet av undervisningen fellows
og kurs assistenter og venner av kurset,
folk fra en gruppe på campus kalt ABCD, som er en gruppe av
technophiles på campus, samt en gruppe som heter HCS,
Harvard Computer Society, studenter som er på samme måte interessert i databehandling.
Årets liste over seminarer omfatter seminarer om Android og iOS og JavaScript
og PHP, Unix, Vim, og mer, så innse at disse seminarene kommer opp.
Hvis du ønsker å RSVP for noen av dem leder til den aktuelle nettadressen der.
Vi vil da legge ut på kursets hjemmeside tider og steder når de er ferdigstilt.
Men vet det er 5 år med tidligere seminarer tilgjengelig på nettet,
mange av dem er fortsatt svært mye strøm i form av teknologier du kan
ønsker å spille med for den endelige prosjekter, så hodet det for noen tilgjengelige videoer av disse.
>> CSS, de av dere som er kjent med CSS allerede,
hva er det i et nøtteskall?
Hva er CSS?
Det stilark, og hva betyr det?
Hva gjør det for oss, CSS?
Greit, la oss varme opp med en enklere en, HTML, HyperText Markup Language.
Hva gjør det for oss?
Noen i det hele tatt?
Det blir veldig vanskelig å stille disse spørsmålene.
HTML, HyperText Markup Language.
Ja? Nei?
[Uhørlig student respons]
Ok, bra, gjør det oss til å markere tekst som skal vises i en nettleser.
Det er ikke et programmeringsspråk.
Det er faktisk et kodespråk, som betyr det instruerer leseren hvordan å vise
informasjon, slik den enkleste inkarnasjon av dette som vi har sett
er noe super enkelt som boldfacing, sier åpen brakett b lukket brakett
gjør denne teksten fet, og det er faktisk bare en av mange måter
hvor vi kan gjøre det, og faktisk, i disse dager en bedre tilnærming
til stilisering websiden din, noe som gjør ting fet og kursiv
og sentrert og begrunnet og lignende, ikke gjøres via HTML-koder alene
men heller med en teknikk som kalles CSS, Cascading Style Sheets.
Dette er et språk i seg selv.
Det er også ikke et programmeringsspråk, men-
alle, dette er Dan, som holder med oss ​​i dag.
Noen tekniske problemer. Ikke et problem.
>> CSS tillater oss å stilisere en side
ved å sette det som kalles egenskaper, så la oss ta en titt på denne
ved hjelp av noen enkle eksempler.
La meg gå inn i apparatet i dag.
Jeg har kilden 8 mandag katalogen her,
og jeg kommer til å gå inn i en katalog som heter CSS der vi har en hel haug
av filer som venter på oss akkurat her,
og i denne mappen har vi for eksempel search0.html fra forrige gang.
Nå husker med search0 vi igjen på dette notatet
etter slags implementere Google eller egentlig bare fronten for en uke eller så siden,
og legge merke til at vi hadde noen nye koder der.
Vi hadde h1 for en stor, fet overskrift,
form, som tillot oss å faktisk ha en HTML-skjema for inndata fra brukeren.
Action, hva var meningen med en handling attributt
på HTML-skjema tag?
Hva var meningen med dette, action?
Jeg vil bare gjøre dette i dag.
Handling er målet til hvor skjemaet skal sendes inn.
Det faktum at det står action = "google.com / search"
betyr at når brukeren klikker på send-knappen eller tilsvarende
uansett form felt de fylt ut kommer til å bli sendt ikke til vår server
eller vår apparatet, men snarere til det spesifikke webadressen Google.
Og metoden det kommer til å bruke kalles få,
og få, for nå, er bare en teknikk for bestått informasjonen sammen til en webserver
ved hjelp av URL, så la oss ta en rask titt tilbake på hvordan dette fungerer.
>> Legg merke til at det er en inngang som heter q
hvis type er tekst og deretter en andre inngang av attraksjon sender
hvis verdi er CS50 Søk, og faktisk, hvis vi åpner opp denne filen her,
search0.html, det er en super enkel form,
og hvis jeg søker etter noe som informatikk
og trykk Enter eller klikk på CS50 Søk
legge merke til at det som skjer er utenfor å komme til Google
Jeg har spesielt havnet på denne nettadressen på toppen,
google.com / search? q = datamaskin + vitenskap,
og informatikk er åpenbart hva jeg skrev i.
Den + betyr bare at er der et mellomrom var,
og det er gjort av nettleseren bare for å være sikker på at det er ingen
forvirring og hvit plass i selve nettadressen.
Og deretter q, selvfølgelig, er parameteren navnet.
Vi har ikke sett hvordan vi programmerer, kan faktisk få tilgang q ennå.
Vi kan anta at Google vet hva de skal gjøre med dette her,
men vi får det i god tid i dag.
>> Men la meg ta en titt i stedet på search1.html,
som ser litt annerledes fordi jeg bestemte meg for at dette skjemaet her var bare litt halt.
Jeg mener, det er øverst til venstre.
Det er egentlig ingen estetikk til det, og så vil jeg stylize dette
litt mer som Google, hvis hjemmeside, husker,
selv om du kanskje ikke besøke den så ofte, ser ut som dette i dag på Halloween.
Dersom vi i stedet åpne opp versjon 1 av denne filen, søk 1.html, jeg har sentrert den.
Fremdeles ganske stygg, men minst nå har jeg begynt å kontrollere estetikk denne siden,
ikke bare merke opp derav.
La oss ta en titt på søk 1, og det er egentlig bare en forskjell her,
som kan hoppe ut på deg, eller kanskje ikke,
men hva er en linje eller utdrag av forskjellen?
>> Det er denne stilen egenskap, så viser det seg at i HTML
de fleste elementer, kan de fleste brikker har en stil attributt på dem,
og innsiden av at stilen attributt er en sitert streng
og at sitert streng er CSS.
Du kan sette stilark i det
ved å angi den som en eiendom navn
etterfulgt av et kolon etterfulgt av en verdi.
Dette er litt av en uheldig konstruksjon avgjørelse for noen år siden
at CSS er et språk i seg selv,
men syntaktisk det er veldig forskjellig fra HTML.
I dette tilfellet ser vi at innsiden av websiden min, som er skrevet i HTML,
Jeg har CSS innsiden av disse sitatene, og konvensjonen for CSS
er at du har det som kalles en eiendom etterfulgt av, igjen, et kolon,
etterfulgt av verdien av denne eiendommen, så det er ingen likhetstegn.
Det er ingen ekstra anførselstegn.
Det er bare denne kolon separert nøkkelverdi par,
og tekstlinjen gjør akkurat det den sier.
Det justerer teksten i kroppen på siden, noe som er virkelig guts på siden,
i midten.
>> Ok, sluttresultatet da, for å være klar, er dette.
Ikke alle som sexy, men minst det er sentrert og litt mer som den virkelige Google.
Men hva om jeg i stedet åpner opp versjon 2 av denne
og påpeke her nede en ny kode helt?
Nå i hodet på siden min, som tidligere bare hadde som tag
i alle tidligere eksempler?
Det hadde bare dette, tittelen.
Et øyeblikk siden hodet tag så ut som dette.
Nå i stedet den har en stil tag innsiden av det,
og dette også, jeg beklager, ser syntaktisk svært forskjellig fra HTML,
men du blir vant til det, der innsiden av stilen koden
Jeg kan nå faktor ut hva som var et øyeblikk siden
et attributt, stilen attributt, og jeg kan sette den på toppen av siden min.
>> Hvorfor?
Vel, dette er et skritt mot å rydde ting opp, mye som skriftlig C-kode
vi ville noen ganger skrive funksjoner for å faktor ut felles funksjonalitet.
Det er bare litt renere å starte factoring ut ting som estetikk
til en sentral plassering i stedet for å ha den flette hele HTML-koden.
Dette gjør også hva den sier, selv om det er en bit av ny syntaks.
Dette her er en selector, og kroppen bare betyr å velge kroppen element
og gjelder følgende egenskaper til det.
Vel, er eiendommen nøyaktig det samme.
For godt mål har jeg lagt et semikolon på slutten,
som har en tendens til å være konvensjonen, og jeg har pakket hele denne eiendommen
i klammeparentes fordi jeg kunne faktisk ha forskjellige ting her.
Jeg kunne faktisk si noe sånt Farge: blå;
>> Nå er dette også ikke kommer til å være et skritt mot noe alle som penere,
men hvis jeg nå gå tilbake til versjon 2 har jeg i hvert fall nå gjort kroppen av min
sidens tekst alle blå.
Knappen forblir den samme, fordi det er en inngang. Det er ikke ren tekst.
Men alt annet som er tekst, som CS50 Søk opp toppen, er faktisk blå.
Igjen, er å fjerne alt vi har gjort nå fra kroppen tag, varsel,
stilen attributt, og vi har priset den ut her.
Dette er ikke en stor forbedring, men hvis vi tar dette ett skritt videre
Legg merke til hva vi kan gjøre i denne tredje versjonen her.
>> I search3.html nettsiden er nesten identisk
bortsett fra det nye tag nå?
Link, så dette er ikke veldig treffende navnet
fordi du ikke linking i den forstand av et klikkbart hyperkobling.
Snarere, du liksom gjøre tilsvarende # include i C
hvorved link tag med en href attributt
og en rel-attributtet sier gå videre
og kopiere lime inn innholdet i en fil som heter search3.css her, i hovedsak.
Den ikke helt gjøre det, men det er en ånd av det.
Det sier gå åpent denne filen, search3.css,
og behandle det som om brukeren hadde skrevet det her i hodet av siden
akkurat som jeg gjorde i forrige eksempel.
Search3.css, i mellomtiden, er ganske enkel.
Det virkelig inneholder akkurat hva var et øyeblikk siden
i stil tag, men jeg har priset den ut her til sin egen fil.
>> Selv om vi ikke har tilbrakt mye tid i det hele tatt i HTML eller webprogrammering
bare intuitivt hva som er motivasjonen, kanskje, for factoring ut
denne lille tekstutdrag selv av CSS i sin egen fil
og deretter inkludert det med denne link tag her?
[Uhørlig student respons]
Ok, det er lettere å lese i den forstand at du har din CSS i en CSS-fil.
Du har din HTML i HTML-filen, så det er mer lesbar i den forstand.
Hva annet kan være attraktiv? Ja.
[Uhørlig student respons]
Ja, så du kan ta det mange ganger, så akkurat nå gjør vi disse
grunnleggende eksempler med individuelle filer, men antar at du faktisk gjør
en ekte nettside som du vil for pset 7 eller det endelige prosjektet kanskje,
og du vil ha flere websider, som er sikkert vanlig på
selve World Wide Web, og det ville være slags halt
til å kopiere og lime den samme blå farge
og den samme teksten justert senter i hver og en av disse sidene.
Heller det er mer fornuftig å faktor ut, mye som vi har gjort i C
med. h-filen, legg den i ett sentralt sted,
i dette tilfellet search3.css, og la enhver fil
på nettstedet ditt for å faktisk inkludere denne filen ved hjelp av denne koden her i linje 16.
Som vanligvis er tilfelle, vi startet med versjon 0, hvilken type verk
men er ikke nødvendigvis det beste, og med hvert trinn,
1 søk, 2, og nå søk 3 vi har tatt disse baby trinnene
mot design som er litt renere og er mer forberedende
for mer komplekse sider som vi kan gjøre nedover veien.
>> La meg åpne opp en siste eksempel her bare for å vise
en enda mer stilisert side, men først la oss se på HTML.
Dette er search4.html, og legge merke til at strukturelt det er nesten det samme
med unntak av innføring av en ny kode, div.
Div er en kode som introduserer en divisjon av siden.
Du kan tenke på dette som en usynlig firkant.
Den slags skaper en skjærer av området på websiden
at du kan stylize alt på en gang.
Hva jeg har gjort her er som følger.
Innsiden av kroppen min tag, som har vært der hele tiden,
Jeg sier skape en divisjon av siden her via linjene 45 gjennom 47,
og det betyr i hovedsak gi meg en usynlig firkant øverst på siden.
Så gi meg en ny rektangel, riktignok usynlig, under det,
og identifisere den ved navn innhold, og deretter til slutt,
gi meg en tredje divisjon på siden nederst
kalt ID.
Vi vil se hvorfor jeg har gjort dette i løpet av et øyeblikk,
men konseptuelt jeg har en header divisjon.
Jeg har et innhold divisjon, og jeg har en bunntekst divisjon av siden
selv om disse er bare i markup.
Brukeren er ikke til å se tre rektangler,
men slags strukturelt det bak kulissene
de er faktisk til stede.
>> Nå, hvem bryr seg? Hvorfor faktisk gjøre dette?
Alt annet på siden er den samme som vi har sett før.
Her er min form. Her er mitt innspill, min inngang, et linjeskift og så videre.
Her er et bilde, skjønt, så vi får se hvor dette kom fra en liten stund.
Her er en bunntekst, som er ny, bare fordi jeg ønsket å introdusere
litt mer innhold her.
Hvis vi blar opp merke til at ID for denne div er overskriften.
ID av denne div er innholdet, og ID-dette er bunntekst.
Og som navnet antyder, når du har en ID-attributt
i HTML, per definisjon må det identifisere
ett av elementene, en av kodene på siden din.
Byrden er helt på deg til å huske at du har en header ID allerede.
Du har en bunntekst. Du har et innhold ID allerede.
Datamaskinen er ikke til å finne ut hva en tilgjengelig ID er for deg,
slik at du kan ved et uhell gi 2 koder et ID-header,
og det ville bare være galt.
>> Du må huske på hva du har opprettet,
men når du har gjort det merke til hva vi kan gjøre her.
Jeg kan nå spesifisere i min stil koden øverst
eller ekvivalent i min CSS-fil, hvis jeg var fremdeles bruker denne versjonen,
Jeg kan si # header, og hva det betyr er at uansett hva tag
i denne nettsiden har en ID på header
og #, bare av menneskelig konvensjonen representerer ID.
Den kraftige tegn eller firkanttegn representerer ID.
Overskriften er navnet jeg ga den.
Dette betyr anvende denne CSS eiendom
til hva koden i denne siden bærer en ID for overskriften.
Samme avtale her.
Anvende denne eiendommen, som skjer for å være den samme, noe element
hvis ID er innhold, og deretter ned her
merker jeg fikk litt mer avansert med bunntekst.
Et element som ID er footer, som det kan være bare én per definisjon,
gå videre og gjøre fontstørrelsen mindre,
sin font vekt fet, dens margin 20 piksler.
>> Hva betyr det?
Det er bare en margin på toppen, bunnen, og venstre og høyre.
Dette betyr gi meg en 20-pixel usynlig margin rundt det
bare for å presse alt annet bort fra det litt, som du kan gjøre i Word,
Microsoft Word eller Pages eller lignende.
Og så teksten justere sentrum.
La oss se det endelige resultatet, og så får vi gå tilbake til én gjenværende bit med CSS der.
Dette er versjon 4, vår siste for søk eksempler, og det er mye, mye mer sexy.
Nå, i rettferdighet, jeg bare googlet "google font logo generator."
Og som tillot meg å lage en GIF, et bildeformat, som ser ut som det der.
Faktisk kan du gjøre dette også.
Vi har "google fonter logo generator."
>> La oss se om vi kan gjøre dette.
Ok, jeg tror dette er nettstedet jeg brukte.
Vi kan si Ec 10, for eksempel, og gjøre dem til sine egne.
Du kan spille med dette hele dagen lang, og deretter høyreklikk på den
og deretter laste ned den faktiske GIF, som er alt som jeg gjorde.
Og ja, det er derfor i HTML min, husker, over her
Jeg hadde et bilde tag, som vi så kort forrige uke
hvis kilden er logo.gif.
Og hva var igjen motivasjonen for å ha denne alt-attributtet,
denne alternative attributt?
Ja.
[Uhørlig student respons]
Bra, så to grunner egentlig, hvis leseren ikke kan trekke opp bilde
fordi du har en treg nettverkstilkobling eller bildet er skadet
eller noe sånt minst menneske kan se "CS50 søk,"
og deretter også for tilgjengelighetsfasiliteter grunner.
Hvis du har en bruker som er blind og bruker en skjermleser
og derfor kan selvsagt ikke se bildene de kan i det minste
høre teksten hvis deres datamaskin taler det til dem.
>> Generelt er denne beste praksis når det gjelder tilgjengelighet av sider
slik at også brukere i den situasjonen kan høre eller se, så å si,
hva det er som er på siden din.
Det er en annen ting som jeg gjorde her
som er litt interessant, og vi vil se mer om dette i problemet satt 7
via en av shorts ledet av en av de pedagogiske stipendiater.
Men # innhold refererer til koden
hvis ID er innhold, men så er det et mellomrom, og så er det ordet inngang.
Vel, hva er interessant om CSS er at du kan
referere til koder i en side slags hierarkisk,
og hva dette bit med CSS betyr finne koden
hvis ID er innholdet, og deretter bruke følgende egenskaper
til alle innspill koder som er etterkommere av innhold,
det er at rykkes innsiden av det.
Innrykk, igjen, er bare viktig for datamaskinen, ikke til det menneskelige,
men ved konvensjonen rykke vi ting som vi går dypere inn i en side,
så dette betyr bruke en margin på 5 piksler til noen innspill element
det er et sted inne i eller nestet inne i
elementet som ID er innholdet.
>> Hvem gjelder det til?
Vel, det er faktisk bare disse to gutta her.
Legg merke til at innsiden av formen er det 2 innganger,
som det har vært for alle disse eksempler.
Men legg merke til at de to innganger tilfeldigvis nestes inne,
riktignok litt dypt, et par lag med innrykk,
innsiden av taggen som ID er innholdet.
Hva betyr dette?
Hvis vi går til leseren her kan du se aldri så litt-
la meg zoome inn, at det er en bit av polstring mellom knappen
og mellom tekstfeltet.
>> La meg midlertidig slå den av.
La meg gå opp til CSS min, og la meg gå videre og bare
endre denne marginen fra 5 piksler til 0 piksler.
La meg gå videre da, og lagre filen, gå tilbake til søkemotoren
og legg, og se midt på siden.
Alt fikk komprimert sammen, og når jeg først pisket dette eksempelet opp
Jeg trodde at så dumt med tekstfeltet, og deretter på knappen rett under den.
Jeg ønsket å fylle det litt, så jeg introduserte marginer.
Hva vi ikke vil gjøre i foredraget er å gå gjennom flere dusin
CSS egenskaper som eksisterer fordi igjen, det er ting som skriftstørrelse,
font vekt, margin, tekst justere, og et par dusin andre,
og vi vil henvise deg i oppgavesettet 7 til ulike tutorials på nettet
og referanser som lar deg plukke disse tingene opp.
Men hva er virkelig viktig ved slutten av dagen
>> er å forstå hvordan disse tingene er brukt.
Igjen, hvis vi har stilen tag Innsiden
kan gå velgere, slags identifikatorer som angir
til hvem vil du bruke disse egenskapene,
og deretter sette egenskapene som sentrale verdi-par
atskilt av et kolon og endte med et semikolon,
eller du kan rippe alle som ut og legg den i en egen CSS-fil
seg selv.
Greit, noen spørsmål på begrepene
eller det store bildet av CSS?
Du vil igjen se mer av det i pset 7,
men vi vil holde det generelt ganske enkel.
Nei? OK.
Det er tid for en faktisk programmeringsspråk,
og vi vil komme tilbake til en liten bit av CSS i form av et eksempel.
PHP er faktisk en fantastisk lett forståelig språk
i at det er syntaktisk nesten tilsvarer C.
Med andre ord, hvis du vet C, vet du for det meste PHP,
minst syntaktisk, selv om det er noen nye funksjoner
og noen nye konsepter vi må se på.
>> Men for det meste, nå som vi overgangen fra C til PHP
det meste av nye ting er virkelig i det store bildet,
hvordan du bruker et språk til program på nettet som i motsetning til
på kommandolinjen eller en blinkende spørsmål som vi har gjort så langt.
For referanse, spesielt med pset 7 og det endelige prosjektet framover,
dra nytte av denne nettadressen her hvis du ønsker å lese opp på formaliteter av PHP.
Det er som faktisk et gratis online lærebok effektivt,
og du vil også finne at det er veldig hyggelig om PHP
er at det finnes hundrevis av funksjoner som kommer med det,
mens i C du ikke nødvendigvis har tilgang til
flere funksjoner enn var i matematikk biblioteket, CS50 biblioteket.
I PHP og en rekke moderne språk, Python og Ruby blant dem,
du får tilgang til så mange flere funksjoner, som betyr at du får til å skrive
mye mindre kode fordi du kan stå på skuldrene til andre mennesker
som allerede har skrevet visse ting for deg.
>> La oss ta en rask gjennomgang av syntaksen til PHP og deretter skrive noen eksempler.
Hva er fint om PHP først og fremst
er det ingen hovedfunksjon.
Hvis du ønsker å skrive et program i PHP du bare begynne å skrive kode,
og du trenger ikke å bekymre deg for main.
Det er ingen int. Det er ingen vei tilbake.
Det er ingen argv, argc som er nødvendig når du skriver programmet.
Heller du kan bare begynne å skrive kode, og dette er delvis
fordi PHP er det som kalles et tolket språk.
C ble satt sammen, og det ble utarbeidet i den forstand at du starter
med kildekode, kjøre det gjennom Clang, som er en kompilator,
og til slutt etter noen flere trinn får du objektkode, 0'er og 1'ere.
PHP og Python og Ruby og Pearl og andre
er forskjellige typer språk i at du ikke samle dem.
Du trenger ikke gå fra kildekoden til 0'er og 1'ere.
Du bare kjøre kildekoden, og du kjører kildekoden
ved å skrive i en vanlig tekstfil, som slutter med. php i dette tilfellet
i stedet for. c, og hva programmet gjør på datamaskinen
er den tolker bokstavelig talt koden linje for linje for linje.
>> Med andre ord, i stedet for å skrive et program og kjøre programmet
direkte du i stedet skrive et program med en fil som slutter på. php.
Så du kjører en faktisk program som heter php.exe, hvis du er på Windows,
eller bare PHP hvis du er på Mac OS eller Linux,
og du gir som innspill til PHP-programmet ditt eget kildekoden,
og dens formål i livet er å lese koden topp til bunn, fra venstre mot høyre,
og gjøre hva du har fortalt det til å gjøre.
>> La oss se hva dette kommer til å bety syntaktisk.
I PHP har vi forhold.
Dette bildet er identisk med hva du så tilbake i uke 1
fordi syntaktisk forhold, IFS og annet IFS og annet i PHP
ser akkurat ut som dette.
Når det kommer til boolske uttrykk de kommer til å se ut akkurat som dette.
Når det kommer til Anding ting sammen som boolske det kommer til å se ut akkurat som dette.
Brytere ser det samme, og du får den ekstra fordelen i PHP
at bryterne i C kunne bare slå på en røye eller en int.
Du kan ikke slå på en streng verdi.
I PHP kan du faktisk har et uttrykk
som er en variabel som inneholder en streng,
og du kan faktisk gjøre streng sammenligning i den virkelige intuitiv måte,
ikke pekeren sammenligning, for å bestemme om du vil gjøre tilfelle jeg eller j eller noe annet.
Vi vil se at potensielt før lenge.
>> Løkker for fantastisk er de samme.
For looper har en initialisering, en tilstand, og noen flere oppdateringer.
Mens looper finnes også i PHP.
Gjøre mens løkker finnes også i PHP,
og arrays eksisterer i PHP, men her er der syntaksen begynner å bli litt annerledes,
men konseptene er de samme, og begrepene virkelig er de samme
som de var i uke 0 med Scratch.
Først og fremst er $ tegn.
Dette var en design avgjørelse i PHP der alle variabler
i PHP ved design starter med $ tegn.
Det er ikke mer X, Y, Z. Det er nå $ X, $ Y, $ Z bare fordi.
Det er noe å huske på, og nå på høyre side
Dette ligner på en matrise,
men vi bruker hakeparenteser her.
I PHP og i JavaScript, som vi vil til slutt se,
å erklære en matrise du gjør åpent hakeparentes og lukket hakeparentes,
og da har du en kommaseparert liste med verdier, enten ints
eller strenger eller tegn, hva du vil, på innsiden av det uttrykket der.
>> Nå, hvordan vi gjør noe som dette i C?
Hva var syntaksen for statisk erklære en rekke kjente tall?
Det var klammeparentes, så liten forskjell her, men både PHP
og til slutt JavaScript den bruker bare hakeparenteser, så egentlig
den eneste interessant detalj her er $ tegn for variabelnavnet
og også klammeparentesene, og det er en merkelig ting
som er blitt utelatt, så vel på den venstre side av =-tegn.
Hva mangler på at vi har behov for flere uker nå? Ja.
[Uhørlig student respons]
Størrelsen, så det er ingen omtale av størrelsen på matrisen.
Ærlig talt, det er ingen omtale av hakeparenteser på venstre side
for = tegnet, og hva annet mangler linjen?
Ja. >> [Uhørlig student respons]
Typen, så hva er interessant spesielt om PHP
er at det er ikke et sterkt maskinskrevet språk som C er,
og det er sterkt skrevet i den forstand at du må si røye,
du må si int, må du si flåte.
>> Når du ønsker en variabel du har å fortelle Clang hva dens type er.
PHP er litt lazier.
Det er løst skrevet i den forstand at
du kan ha flyter og chars og strenger
og ints og så videre, men språket selv
bryr seg ikke hva du putter inni en variabel.
Du trenger ikke å informere den på forhånd hva datatype
kommer i en variabel.
Det er helt opp til deg, så dette er hyggelig
i at du ikke trenger å bekymre deg så mye om data skrive
og bekymringsfull hva dine argumenter er og så videre.
Dette betyr også slutt funksjoner i PHP kommer til å være i stand til å returnere
enten en int mesteparten av tiden, og kanskje en gang i blant
de vil returnere en bool, en boolean falsk, for eksempel for å markere at noe gikk galt.
Dette gir oss noen oppsider, men det vil også gjøre oss liksom av design
litt lazier når det gjelder data skrive.
>> Hva annet er det å huske på her?
Variabler ser ganske like denne, så $ s = "hallo, verden."
Det er kanskje inferable fra forrige eksempel,
og vi har en annen type loop.
Dette vil vi faktisk se en gang i en stund siden det er ganske hendig,
en foreach konstruere.
I dette tilfellet tar foreach løkke inne av sin parenteser 3 ord typisk,
$ Noe først, som er hva utvalg vil du iterere over medlemmene i,
så bokstavelig søkeordet som, og deretter til slutt,
en annen variabel navn som du kommer til å velge.
Det kan være foo, bar, eller element,
og hva dette konstruere gjør
er hvis $ matrise inneholder 10 elementer
på hver iterasjon av denne array-sorry, på hver iterasjon av denne sløyfen
variabelen element kommer til å bli oppdatert
å være det første elementet i matrisen, deretter det andre elementet i matrisen,
da den tredje element i matrisen, og dermed obviating behovet
å gjøre det litt irriterende hakeparentes notasjon og
$ I for å indeksere inn i en matrise.
PHP gjør alt som fungerer for deg og på hver iterasjon
bare hender du det neste elementet fra tabellen
uten at du trenger å vite om eller bryr seg om sin numerisk indeks plassering.
>> Og så til slutt, for nå er det en annen funksjon i PHP
som kommer til å bli enormt nyttig, spesielt når vi starter programmering på nettet,
og som er kjent som en assosiativ array.
Matriser som vi vet så langt som 20 sekunder siden
og for de siste 8 ukene er numerisk indeksert matriser,
slags tradisjonelle arrays hvor indeksene er ints,
0, 1, 2, hele veien på opp.
Assosiative arrays er mye kraftigere.
De tillater deg å ha vilkårlige nøkler,
vilkårlige indekser og vilkårlige verdier.
Mens det i en tradisjonell matrise er det 0, 1, 2,
i en assosiativ array kan du ha en indeks
eller en nøkkel av foo hvis verdi er bar.
Du kan da ha en annen tast hvis navn er baz og hvis verdien er qux.
>> Igjen, dumme informatikk generiske variabelnavn her,
men poenget er at denne matrisen ikke har brakett 0 eller brakett 1.
Det er i stedet nødt til braketten foo og braketten baz.
Dette er mye mer allsidig i at vi kommer til å være i stand til å knytte
ord med andre ord, taster med verdier helt vilkårlig,
og vi kommer til å være i stand til å få disse verdiene tilbake i konstant tid
fordi under panseret hva en assosiativ array
egentlig er er en hash table.
Husker at en hash table lar deg sette i noen innspill
liker satt i ordet David hvis du vil sette inn David inn i en slags ordbok,
og så får du tilbake noen verdi typisk.
I tilfelle av stavekontroll, sant eller usant.
David eller hva ordet er i eller ikke er i ordboken.
En assosiativ array er egentlig bare en hash table,
men det er en mye mer brukervennlig inkarnasjonen av det.
Som vi vil se, det kommer til å tillate oss å gjøre noen ting
veldig, veldig enkelt.
>> La oss ta en titt på noen grunnleggende PHP
eksempler og se hva vi kan gjøre med dette språket.
La meg gå videre og åpne opp i vår kilde katalog i dag
en fil som heter hello1.php.
Denne filen er mer kommentar enn det er selve koden,
så la meg faktisk fjerne alle kommentarene fra filen
og presentere deg kanskje den enkleste PHP-programmet her.
5 linjer, og noen av dem er hvite mellomrom,
så merke til noen viktige forskjeller her.
Filen heter hello1.php.
Den aller første linje, skjønt, er <? Php.
Lignende i ånden til HTML,
at tegnsekvens forteller datamaskinen
"Hei, datamaskin, her kommer et program vi er i i PHP."
Det gjør at det ikke er forvirret at det er et annet språk.
Linje 2 er en interessant mellomrom.
Linje 3 er vår gamle venn printf,
denne gangen i sammenheng med PHP.
PHP har sin egen versjon av printf som oppfører seg akkurat det samme,
så dette er bare kommer til å skrive ut "Hei, verden."
Og så dette motsatte tag her,>, som betyr at det er for min PHP kode.
>> La oss se hvordan å kjøre dette.
Jeg kommer til å gå tilbake til min terminal-vinduet her.
Jeg kommer til å gå inn i min PHP katalogen.
Legg merke til at vi har en hel haug med filer, den første som er hello.php.
La meg gå videre og kjøre denne, hello1.php, skriver.
Ingen tillatelse. Okay.
Hvordan har vi løst ting som dette i det siste?
Hva er det? >> [Uhørlig student respons]
Vi trenger lese og skrive, men la meg gjøre ls-l.
Husk dette noe kryptiske utgang der hello1
synes å være lesbar og skrivbar av meg
men kan leses av alle andre.
Det viser seg dette faktisk ikke er et skritt i riktig retning.
Forskjellen, igjen, med et tolket språk
er du ikke kjøre programmet direkte.
Du i stedet kjøre en tolk og gi den koden
at du har skrevet slik at den kan tolke det linje for linje.
I dette tilfellet tolk eller programmet jeg faktisk ønsker å kjøre
er bokstavelig talt kalles PHP.
>> Et sted på denne harddisken av apparatet er det et program
noen andre skrev kalt PHP, eller på Windows php.exe.
Hva jeg skal gjøre her er jeg kommer til å faktisk kjøre PHP
men gi det som en kommandolinje argument koden som jeg skrev,
og så skal jeg zoome ut og trykk enter.
Det kjører mitt program for meg, fra topp til bunn, fra venstre til høyre.
La meg gå videre og åpne opp en liten varians av dette.
I hello2.php merke til at dette også
er det meste kommentarer, så la meg bli kvitt de som en distraksjon,
og hva er helt klart annerledes nå om denne filen?
Det er denne nye linjen, noe kryptisk på toppen.
I linje 1 er det #! / Bin / php.
Bin er en konvensjon om Linux og Mac OS for binærfiler,
so / bin betyr at dette er en mappe som inneholder en haug av binærfiler
som er programmert, hvorav én er PHP.
The #! er kallenavnet shebang,
som er den rask måte å si det, og hva dette betyr
er at når du kjører dette programmet nå er det et hint på toppen av filen
som forteller datamaskinen hva tolken å bruke.
>> Det blir litt irriterende hvis du måtte fortelle brukerne og dine kunder
"Hei, vi skrev dette programmet heter hello1.php."
Alt du trenger å gjøre er alltid kjøre PHP og deretter navnet på dette programmet.
Oppriktig, ville det bare være bedre å kjøre hello1.php,
og ja, kan vi hvis vi gjør følgende.
La meg gå videre og gjøre ls-l, og varsel i hello2 det fortsatt bare lese skrive
og deretter lese lese, så jeg kan ennå ikke gjøre dette, hello2.php.
Men vi introduserte dette aldri så kort siste gang, chmod kommandoen.
Hvis jeg gjør chmod a + x, som betyr at alle pluss kjørbarhet,
og deretter hello2.php og deretter gjøre ls-l igjen merke hva endret.
En, er Linux viser meg filnavnet i grønt for å formidle ideen
at det er kjørbare, men enda viktigere, på venstre side
merke til at litt representerer x for kjørbar er nå satt.
Hva dette betyr nå er at jeg kan kjøre ./hello2.php som vanlig,
trykk enter, og på grunn av shebang på toppen av filen
det er et hint, igjen, til Linux som sier
bruke denne tolken til å kjøre denne filen.
Ikke bekymre deg om å tvinge brukeren til å faktisk skrive det.
>> Og hva er fint er nå det er slags irrelevant for mine kunder eller mine venner
hvilket språk jeg skrev dette programmet i, så jeg kan gå videre med MS
og endre navnet på denne tingen å hello2, for eksempel.
Og nå hvis jeg gjør ./hello2
og zoome ut mitt program fortsetter å kjøre.
Disse filtypene er en menneskelig konvensjon som er nødvendig
for noe sånt Clang og Make som ser etter dem.
Men for PHP, kan jeg kalle denne filtypen hva jeg vil.
Jeg kunne lure verden til å tro at jeg er virkelig god til Ruby,
og jeg kunne skrive hello2.rb og deretter kjøre dette,
og voila, nå har jeg Ruby-versjonen, som er en komplett løgn.
Men filtyper er meningsløst
hvis filen er kjørbar, og har denne spesielle hint øverst filen.
>> Nå, som en side, la meg vise deg raskt versjon 3,
som er liksom en nyttig triks å vite.
I hello3 gjorde jeg noe litt galt
at jeg skal oppdatere kildekoden på nettet.
I versjon 3 viser det seg at på de fleste Linux-maskiner
det er et program som heter konv for miljø,
og hva du kan gjøre her er hvis du har ingen anelse om hvor PHP
er installert på den lokale harddisken, fordi faktisk det kunne variere avhengig av datamaskinen
at noen bruker, sier env bare kjøre konv,
som er på de fleste systemer, og finne ut hvor PHP er.
Bare en vanlig triks slik at du ikke trenger å bekymre deg om å finne ut hvor et program er.
Men hvis du bryr for å finne ut hvor et program er, og du ikke har brydde så langt
du kan bruke hvilken kommando.
>> La meg zoome ut og type som php,
og legge merke til det forteller meg at det er faktisk i usr / bin / php.
Det er en slags løgn. Det er også i bin.
Det er bare å vise meg det første treffet.
Hvis du noen gang lurt på hvor Clang er, som Clang, er at i usr / bin / clang,
som gjør, er usr / bin / gjøre, og hva det betyr all denne tiden
du kunne ha vært å skrive usr / bin / clang inn for å kjøre Clang,
men det er slags kjedelig å gjøre det, så noen mapper
som usr / bin og bin antas å være mislighold
så maskinen vet å lete i dem for deg.
Eventuelle spørsmål om å skrive en super, super enkelt Hello World-programmet
i PHP, og deretter kjøre den?
Fordi nå skal vi begynne å innføre mer overbevisende syntaks.
Greit, her vi går.
Disse programmene vi har sett faktisk alle av dem før.
>> Hvis jeg åpner opp, for eksempel, la oss gjøre beer1.php,
Vi vil ikke gå gjennom flere versjoner av denne, men det jeg gjorde
ble jeg satte meg ned og helte det eller konverteres
min C-kode til PHP-kode her.
De fleste av toppen av filen er kommentarer her oppe.
Det viser seg at det er en ny funksjon vi trenger kalt readline.
GetString, tilbakekalling, fra uke 0 framover var en CS50 ting.
PHP kommer med sin egen brukervennlig funksjon som heter readline
som tar en argument som spesifiserer meldingen
som du ønsker å vise til brukeren, og hva readline gjør
er den returnerer uansett brukeren skriver i.
I dette tilfellet, jeg erklære en variabel kalt $ n.
Jeg lagrer i det returverdien av readline
etter spørre brukeren med denne strengen.
Bare for å sikkerhetskopiere, å faktisk kjøre denne tingen, la meg gå videre
og kjøre php beer1.php.
Hvor mange flasker vil det være? La oss bare gjøre to denne gangen.
Enter. Det er alt.
>> Programmet er funksjonelt identisk med C-versjonen fra uker siden.
Men syntaktisk la oss se hva som er annerledes.
Etter at jeg får en int fra brukeren beskjed om at jeg gjør noen feil kontroll,
og hvis n er mindre enn 1 jeg sluttet og jeg skrive ut
en lei melding til brukeren og avslutt med 1.
Dette er også litt annerledes.
I c hva gjorde vi? I C returnerte vi en.
I PHP avslutte deg med en, som oppriktig er jeg tenke litt mer intuitivt
fordi du bokstavelig talt å avslutte programmet.
Greit, og deretter ned her irriterende sangen er identisk syntaktisk
med unntak av variabel, så her nede i linje 24 og fremover
merker min for loop er nesten det samme,
men jeg har $ foran i og n,
og hva mangler også fra linje 26 som vi har hatt i det siste
når erklære en variabel jeg?
Det er ingen type.
Det er feil i PHP for å si int.
Du rett og slett ikke trenger å gjøre det.
Datamaskinen, er tolken PHP smart nok til å innse
at hvis du skriver inn et tall i $ jeg det vil behandle det
som et tall for deg.
Og deretter ned her vi kobler til $ i, $ i, $ i - en.
Alle som er den samme, og deretter ned her vi gjør en "Wow, det er irriterende" printf
og deretter avslutte (0).
>> Igjen er det takeaway her at selv om vi kommer til å bruke relativt
lite tid på PHP, sikkert i motsetning til hva vi gjorde på C,
det er nesten det samme, og så hva vi skal gjøre i dag og neste uke
og utover er fokus virkelig på noen av de nye ideene.
Bare for å se at en annen ting ikke oversette over fra C,
dette var en super enkelt program vi gjorde i uke 1
eller 2 som cubed en verdi.
Men hva var interessant på den tiden om dette programmet er at det
introduserte begrepet en tilpasset skriftlig funksjon som vi selv skrev.
Syntaksen i PHP er nesten det samme.
Her er mitt program opp toppen.
Legg merke igjen fraværende er noen forestilling om main.
Jeg begynner å skrive kode, og dette er hva som kommer til å bli henrettet av tolken.
Jeg skriver ut x er nå 2, formodentlig.
Så jeg hevder cubing ...
Så ringer jeg kuben funksjon og passere i $ x
og tilordne returverdien til $ x.
Så jeg hevder at det er cubed, og deretter si jeg dette, som forhåpentligvis
vil si x er nå 8.
Syntaksen for funksjonen i PHP er aldri så litt annerledes.
Igjen mangler er returtypen.
Igjen mangler er avkastningen type og også mangler er hva andre type?
[Uhørlig student respons]
Vel, ok, det er bra. La oss komme tilbake til det i et sekund.
>> Vi har for eksempel int her.
Vi har ikke, for eksempel, har int her fordi, igjen, i PHP
du rett og slett ikke trenger til og bør ikke gjøre det,
men det er denne nye søkeordet kalt funksjon.
I PHP er det nesten litt klarere fordi når du vil ha en funksjon
du bokstavelig talt si funksjon, gir du den et navn og deretter en kommaseparert liste
hvis noen av argumentene.
Du trenger ikke å si ugyldig eller noe sånt, og deretter avkastning er den samme,
$ A * $ a * $ a.
Hva mangler også? Sammy påpekt dette her.
På toppen av filen helt fraværende i PHP er også en prototype.
Dette er også med design.
Språk og tolker som PHP er smartere enn C noensinne var
i kompilatorer som Clang.
>> Husker at Clang, hvis du ikke forteller det at kuben eksisterer,
Hvis du ikke fortelle det som printf eksisterer som en prototyp
eller med en # include, vel, det skulle kjefte på deg og ikke engang kompilere koden din.
PHP og mer moderne språk er mye smartere når det kommer til dette.
De vil ta på seg å lese gjennom alle koden din
og deretter kjefte på deg bare hvis den finner kube ingensteds.
Det spiller ingen rolle om kube er på bunnen eller toppen eller i en separat fil.
PHP og lignende språk er nå smart nok til å se fremover
på alt før deeming deg som har gjort en feil.
Hvor blir det oss?
>> La oss gjøre en siste eksempel her i forhold,
og hvis jeg åpner opp conditions2.php varsel for
syntaks her er nesten det samme.
Jeg bruker readline istedenfor GetString, men at linjen er den samme som før,
"Jeg vil gjerne ha en heltall please."
Jeg har da en hvis tilstand, en else if, og deretter en annen,
men funksjonelt dette programmet er også identisk med hva vi gjorde uker siden,
så hvis jeg kjører denne tingen, php av conditions2,
og jeg gir den et tall som 23 -
Jeg plukket et positivt tall. Hvis jeg gir den -1 jeg plukket et negativt tall.
Hvis jeg gir den 0 jeg faktisk plukket 0.
Så hvem bryr seg om alt dette?
Vel, en av de morsomme slags øvelser her
for meg minst var å gå tilbake og se hvor raskt jeg kunne implementere pset 5,
den feilstavinger pset.
Husker at det var denne filen som heter speller.c,
og det var en fil som heter dictionary.c.
Hva jeg gjorde var jeg slags brukte noen minutter, og jeg konverterte C-kode
til PHP-kode, og vi vil ikke bruke mye tid på stavekontroll
fordi akkurat som i pset 5 ikke du virkelig trenger å
bruke mye tid på stavekontroll seg selv fordi din oppmerksomhet var på ordlisten.
>> Det er nok å si at hvis du leser gjennom stavekontroll,
denne filen her, det er ganske mye tilsvarer C-kode
Vi ga deg for pset 5.
Jeg har nettopp lagt noen $ steder.
Jeg har endret visse funksjonsnavn hvis de ikke eksisterer i PHP.
Det er en ekstra ting her, preg_match,
som er litt mer avansert måte å gjøre noe, men vi vil komme tilbake til det etter hvert.
Men kort sagt, er stavekontroll nesten identisk, og hvis du ser på bunnen
hva det til slutt spytter ut dette her,
ord feilstavet, ord i ordbok, ord i teksten.
All right, så hva er interessant nå er følgende.
På toppen av filen min jeg krever dictionary.php.
Akkurat som C har omfatte # PHP har en spesiell funksjon som kalles krever
at ganske mye gjør det samme, krever en fil som heter dictionary.php.
Hvordan kan jeg gå om å implementere pset 5?
La meg gå videre og åpne opp en fil her.
La meg ta et lite referanse her.
Og la meg lage en ny fil og begynne å ringe dette dictionary.php.
La meg sette det i en annen mappe, slik at vi kan gjøre dette live.
Og nå skal jeg zoome inn
Jeg kommer til å starte min PHP-fil med åpen brakett php stengt braketten.
Og så her var det noen funksjoner jeg trengte å gjennomføre for pset 5,
så la meg begynne å implementere noen av dem,
så funksjonskontroll, som måtte ta et ord i som et argument.
Vi vil gjøre det og komme tilbake til det i et øyeblikk.
>> Det var funksjon belastning, som tok i hva som argument?
Ordbok, slik at filen som jeg faktisk ønsket å laste.
Det var funksjon størrelse, som ikke tar noen argumenter
og det var funksjons-hva var den andre?
Losse, som ikke tar noen argumenter heller.
Dette er de fire funksjonene som jeg trenger å nå implementere i PHP,
og hva jeg skal gjøre er å gå videre og gjøre dette.
Mange av dere brukt en hash tabell i pset 5,
så la meg gå videre og lage en hash tabell i PHP.
Ferdig.
Det gir meg en hash table. Vel, hvorfor?
One, er variabelen $ tabellen, bare å trylle frem ideen om en hash table.
Klammeparentesene, men husker, representerer det?
En matrise, men i PHP matriser ikke trenger å være numerisk indeksert.
De kan også være assosierende matriser,
som betyr at du kan ha vilkårlige nøkler og verdier.
>> Mye som i 5 pset, de av dere som gjorde hash table implementeringer
du sannsynligvis satt ordet og deretter satt den inn i en kjede med koblede lister,
eller du lagret verdien av sann sted eller noe som uttrykker.
Du liksom husket at ordet var der.
For nå, som kommer til å være min hash table,
og så nå skal gå om å gjennomføre sjekken funksjon
Jeg trenger bare å se innsiden av det hash table
og se om et ord er der.
Det jeg skal gjøre er jeg kommer til å si om-
la oss si isset, som er en PHP funksjon som bokstavelig talt betyr bare er nøkkelen sett,
så isset ($ tabell [$ ord],
og hvis så returnere sann.
Det var det. Det er pset 5 i PHP.
Vel, i rettferdighet, ok.
Else return false, så det er ikke der.
Hva som egentlig skjer her?
Vel, hvis tabell-eller hash table her mer generelt-
er en assosiativ array som betyr at du kan indeksere inn i det
med et ord som "ord", og du må få tilbake noen verdi.
>> Vi er slags få ett skritt foran oss.
Det ville være slags fint om vi faktisk lastet ned filen først,
så belastningen er ikke fullt så enkelt, men la meg gå videre og piske opp
en virkelig rask implementering av last.
La meg gå videre og si ord får fil ordbok.
Filen funksjon i PHP åpner en fil
og returnerer til deg en rekke av alle ordene i den filen,
bare hendene dem til deg.
Det var en stor smerte også, ikke sant?
Nå foreach, dette er vår nye konstruksjon, foreach ($ ord som $ ord).
Denne sløyfen skal begynne iterating over rekke ord
og tilordne til $ ordet variabel hvert ord i filen
fra det første til det andre til tredje til fjerde hele veien
så jeg trenger ikke å gjøre det irriterende [i] notasjon og lignende.
Og hva jeg bare kommer til å gjøre for hvert av disse ordene
er lagre det i mitt bord ved indeksering inn i tabell
og deretter gjøre sant fordi å huske
at et ord er i min ordbok alt jeg egentlig har å gjøre
Er Flip slags litt og si dette ordet i min hash table er der, sant.
Og hvis det ikke er der, jeg har ikke eksplisitt satt falske,
ellers ville jeg nødt til å sette usant for alle mulige ord i universet.
>> Det er nok for meg bare å sette en indeksverdi
til true hvis et ord er faktisk i min hash table.
Nå er jeg kutte et par hjørner her at jeg vil vinke hendene mine på for nå,
men nå lasten funksjonen er ferdig.
Jeg legger alle ordene fra filen inn i en matrise.
Jeg iterere over denne matrisen, og for hvert ord i rekken
Jeg kobler den til min hash table med en linje med kode.
Dette er moro. Du vet hvordan vi kan implementere størrelse nå?
Vel, er størrelsen alltid ganske enkelt, i rettferdighet.
Her kan vi bare kommer tilbake telling av tabellen.
Det er ganske enkelt også, telle hvor mange ting i tabellen.
Det er faktisk slags ikke den mest effektive.
Jeg bør kanskje ha en variabel kalt størrelse slik at vi kan gjøre det
i konstant tid, men det er ganske enkelt.
Oh, og deretter losse, hvis vi virkelig ønsker å være anal her
Vi kan si det er hvordan du fjerner noe.
Du bare setter den variable lik en tom array,
og det blir kvitt alt som var der.
Du trenger ikke å ringe gratis.
>> Igjen, jeg har kuttet noen hjørner, og jeg beklager for tilordning problem sett 5
kanskje i C, men hvis vi nå gå videre og kjøre denne,
Jeg kommer til å faktisk kjøre den versjonen som jeg skrev på forhånd
bare slik at jeg ikke gjør noen syntaktiske feil overhodet.
La meg gå videre og kjøre stavekontroll. Bruken er den samme.
Her er en ordbok fil som bare inneholder ordet foo.
Her er en tekstfil som bare inneholder foo bar.
La oss stavekontroll dette, så stavekontroll, ved hjelp av denne ordboken filen på denne tekstfilen.
Det er en feilstavet ord, bar, og voila.
Ferdig med pset 5.
La oss ta en 5-minutters pause her, og vi vil komme tilbake med mer om PHP.
Greit, vi er tilbake.
La oss gjøre-hater meg for en stund.
La oss nå faktisk se om dette ikke var en positiv
faktisk implementere denne tingen i PHP.
Gitt, det tok 45 sekunder å gjennomføre.
>> Men la oss gå videre nå og kjøre ting.
La meg gå videre og kjøre en C-versjon
av stavekontroll, og vi vil kjøre den på en av de største filene,
som er King James Bible.
Og det er her i-la oss gå inn i våre C-mappen,
stavekontroll på King James 5te.
Mange av feilstavede ord.
Ok, så det er utgang du sannsynligvis fått selv om tidene er litt annerledes,
hvis du fikk alt fungerer, og så gang totalt å stave sjekk
King James Bible var 0,38 sekunder, så ganske bra med at gjennomføringen.
Nå la meg gå inn i PHP versjon, som vi nettopp skrev.
La meg kjøre stavekontroll på King James.
Whoops, ignorere denne feilen. Jeg er i feil katalog.
Speller på King James 5te.
Nesten ferdig.
>> Ok, vil gløgg observatør innse at var mer enn 3 sekunder der.
Det er den sanne kjøretid.
Det viser seg at det tar tid å spytte mye tekst ut
på grunn av bufring problemer, men lang historie kort,
som var 3,15 sekunder av maskin tid, CPU tid,
i motsetning til hva det var for et øyeblikk siden?
Som 0,3.
Jeg mener, det er en størrelsesorden tregere, så der er det
latterlig nedgangen kommer fra?
Vel, har som vært tilfellet med de fleste noen design beslutningen vi har gjort
i klassen de siste 9 ukene er det nesten alltid dette kompromisset.
Noen ganger mellom bare plass, noen ganger mellom tid og rom,
plass, tid og utviklingsarbeid, og faktisk her, selv om
vi lagret en enorm mengde tid, kanskje potensielt 10-20-30 timer
av utvikling tid å implementere stavekontrollen
ved å piske den opp på kun 45 sekunder med dette språket
prisen vi betaler er at det er en størrelsesorden tregere som et resultat,
og dette er vanligvis tilfelle med de fleste noen tolket språk,
PHP, Python, Ruby, Pearl eller andre der
hvis du kommer til å kjøre det gjennom en tolk og ha det lese koden din
linje for linje, fra topp til bunn, fra venstre mot høyre,
som mellommann kommer til å ta litt tid for seg selv,
og hva du følte her i 3 sekunder i motsetning til 0,3 sekunder
er det faktum at det er denne som må mellommann bokstavelig tolke vår kode
linje for linje, og Gud forby hvis du er inne i en løkke
med en stor fil som inneholder flere hundre tusen ord.
>> Som overhead kommer til å legge opp og legge opp og legge opp og legge opp.
For et verktøy som dette er det sannsynligvis ikke det beste språket å bruke for å implementere
en stavekontroll hvis umiddelbarhet er av interesse for brukerne og til deg.
Men luksusen vi har i et øyeblikk er hvis du
bruke et språk som PHP eller mye av tolkede språk
i sammenheng med nettet, for den saks skyld, har du fordelen
at internett er en mye tregere enn de fleste datamaskiner.
Du har en GHz CPU i maskinen, 2 GHz, kanskje enda mer i disse dager.
Men realiteten er på internett er det en stor mengde latency
der for en nettleser å snakke med en server, selv om vi så forrige uke
at det er ganske fort, et halvt millisekund eller så,
som legger også opp, og hvis du laster ned ting som et bilde
eller en Facebook-bildet eller få direktemeldinger over Facebook skravling,
Gchat eller lignende, alle disse for rundtur
mellom nettleseren og serveren begynner å legge opp,
som gjør bestemt valg av språk i mange tilfeller
ikke alle som relevant, så du er fin med en litt tregere språk
som PHP eller Python eller Ruby
men som det er store oppsider til deg og dine kolleger
og vennene dine fordi du kan implementere ting så, så mye raskere.
Og dessuten har du mye mindre risiko for visse sikkerhetshull.
Det er ingen pekere i PHP.
Det er ingen SEG feil som du enkelt kan indusere
på samme måte som du kunne i C.
Med C du super nær maskinvaren.
Med PHP og lignende språk er du liksom høyere nivå, så å si,
med mange forsvar mellom deg og hva som faktisk skjer
inne i maskinen, og det er bare en byttehandel.
>> Vi har kommet til et punkt for å ha disse mer moderne, høyt nivå språk
som PHP grunn av erfaringene i språk som PHP i C.
Men hvis du ikke forstår hva som har foregått på under panseret hele tiden
du absolutt ikke kan ta de riktige design beslutninger,
og sikkert når det kommer til å jobbe på et sted som Facebook eller Google
eller noen av disse stedene som i økende grad spiller med store datasett
selv om du går tilbake og gjør premed og jobber med noen MD
på noen store datasett med pasienter og leger
og lignende bruke de riktige verktøyene er enormt overbevisende
fordi ellers din analyse av noen datasett kan ta sekunder,
eller det kan bokstavelig talt ta timer.
Dette er bare ett eksempel, for ikke å frustrere deg med hvor mye mer innsats
det var i C, men for å hjelpe deg setter pris på at når du implementerer noe i C
du virkelig forstår, eller i teorien, virkelig forstå
hvordan alt er eller skal jobbe, og du har nesten full kontroll
over hva som skjer under panseret, og med disse høyere nivå språk
du må gi avkall på mer kontroll til folk som oppfant dem
og er underlagt mer til sine design beslutninger enn din.
Men hvis vi tar for gitt at resultatene
er ikke fullt så viktig på nettet på grunn av disse andre problemene,
bare nettverkshastigheter er litt tregere enn CPU hastigheter uansett,
slik at vi kan liksom råd til å bruke en litt tregere språk
hvis upsides er at vi kan utvikle ting 10 ganger raskere eller enda mer.
>> La oss se hvordan vi kan begynne å bruke dette.
La meg gå inn i en mappe
blant dagens eksempler kalt frosh.ims,
og dette ble faktisk personlig motivert av at den aller første
Jeg skrev for Web år siden etter å ha tatt CS50 og CS51
var et nettsted for Frosh IMs program, førsteårsstudent egenutført idrett,
som på den tiden var dette nok år siden at på den tiden
var det ingen nettsted for programmet, selv om det var en Web,
og i stedet var det en proctor i Wigglesworth der hvis du ønsket
å registrere deg for volleyball eller fotball eller hva du vil fylle ut et stykke papir.
Du vil da gå over tunet.
Du vil da banke på døren sin og skyv i deres dør eller hånd til proctor
et stykke papir med navnet ditt på det, om du ønsker å være en lagkaptein,
hvilken idrett du ønsket å gjøre, og hva dorm du var i.
Det var liksom en gamle skolen måte å gjøre ting på, og dette var et godt
mulighet til å automatisere mye av denne prosessen.
Du bare gå til nettstedet. Du skriver noe i.
Du får en e-postbekreftelse, og bom, er du ferdig.
>> Dette var den aller første jeg gjorde, riktignok i et språk som heter Pearl,
men det er relativt enkelt å gjøre i PHP, og dette er slags representant
av problemene kan du begynne å løse når du kan uttrykke deg selv
programmatisk og trenger ikke å stole på ting som Google-områder
eller Excel eller verktøy som er overlevert til deg.
Dere har nå muligheten til å gjøre ting som dette.
Dette er en super stygg versjon av et skjema,
men la oss bare bruke den i begynnelsen av samtalen der dette er
omtrent hva skjemaet så ut som år siden for oss
å aktivere folk på nettet for å registrere deg for Frosh direktemeldinger.
Vi ba om et navn, en avmerkingsboks for hvorvidt de ønsket å være kaptein,
mann eller kvinne, og deretter hva dorm de var i,
og så ville de sende dette skjemaet.
La oss først se under panseret på HTML som representerer denne websiden.
La meg gå inn froshims0,
og som en side, for pset 7 Jeg tar for gitt
katalogene og mappene som jeg setter ting i.
Vi vil gå gjennom nøyaktig hvor ting må gå i apparatet,
som mod kommandoer du må kjøre, så ikke bekymre deg om alle de
dumme detaljer synkronisering i fra få gå her.
>> Greit, her er froshims0.php.
La meg bla nedover, og hva som er nysgjerrig her,
Dette er en PHP-fil, men hva som er inni det, klart?
Det er en hel masse av HTML, og faktisk, PHP opprinnelse
virkelig var for å være en web-sentriske språk.
For et øyeblikk siden vi brukte den til å implementere øl eksempel
forholdene eksempel, hallo eksempel, og det er fint.
Du kan bruke PHP som skriptspråk
hvor et skript er egentlig bare nomenklatur gitt til en rask og skitne program
eller noe som du skriver i en skriptbasert eller mer generelt et tolket språk.
PHP er super nyttig for det fordi du har sett hvor raskt
relativt vi kan piske opp programmer i PHP.
Men det var egentlig laget for å brukes til web,
og designet for web i den forstand at merke opp her på toppen av filen
Jeg begynner med <? Php.
Så jeg har en haug med unyttig kommentarer, gitt, men da jeg lukker PHP-modus.
Men da jeg slippe inn HTML-modus.
>> Hva er interessant om PHP er, selv om filen slutter på. Php
det er generelt ment å være co-blandet med HTML,
noen PHP-kode, noen HTML.
Og vi får se etter hvert at vi kan begynne å erte dem fra hverandre
og holde vår HTML atskilt fra PHP vår helt,
men opprinnelsen til PHP virkelig skulle gi deg denne fleksibiliteten,
at hvis du vil ha litt HTML bare skrive det, og det vil være
spytte ut identisk til nettleseren.
Men hvis du trenger noe programmering teknikk,
noen programmeringskode, kan du også sette den i nøyaktig samme fil, som vi snart se.
Her er min HTML.
Jeg har en tittel av dette for Frosh direktemeldinger.
Jeg har en body-koden som har fått noen CSS på den til sentrum alt i midten,
og deretter ned her har jeg en form som tilsynelatende kommer til å bli sendt
til en ny fil som heter register0.php, så vi får se det i et øyeblikk.
Den bruker en metode som kalles innlegget, som vi vil komme tilbake til også.
Så jeg har noen form innganger, en som heter navn, hvis typen er tekst,
en som heter kaptein, som type er boksen,
og dette har vi ikke sett det før, men det gjør akkurat det den sier.
Du vil få en avmerkingsboks i stedet for en tekstboks.
Her nede du har en radio knapp, som er en av de sirkulære knapper
at du kan enten velge denne eller den.
>> Legg merke til det er bevisst at jeg ga begge radioknappene navnet kjønn.
Dette er hvordan du får gjensidig utelukkelse der du må klikke
enten denne eller at man, og ved å klikke på andre
det unchecks den andre, så du må gi dem samme navn
Hvis du vil de skal være gjensidig utelukkende sånn.
Og deretter for dorm, jeg tror ikke vi har sett dette ennå, men det er en utvalgt meny, en drop-down menyen.
Koden for det er select.
Du kan deretter gi drop-down menyen et navn,
og da har du en hel haug av disse alternativene.
Den første, bare for estetikk, er en tom streng.
Jeg ville bare slippe ned for å være blank som standard,
og så er det Apley, Canaday, Grays, og så videre.
Og legg merke til motsetningen her.
Alternativet i drop ned har en verdi,
men da den har en menneske-vennlig navn, som i dette eksemplet
er identisk, men hvis vi virkelig ønsket å være anal vi kunne ha
verdien av denne rullegardinlisten bare være den korte versjonen,
Grays, men vi kunne virkelig si Grays Hall at den menneskelige faktisk ser,
men det er ikke alle som interessant, så jeg bare holdt det enkelt og gjort dem identiske.
Deretter ned på bunnen har vi en send-knappen
som vi har sett før, men jeg merker bare ga det et annet ord.
I stedet for CS50 søk ga jeg etiketten "Registrer".
>> Sluttresultatet er denne websiden her, og igjen,
hvor kommer dette bli sendt til?
Det blir sendt til noen fil, verdien av handlingen attributt,
som var register0.php.
La oss se hva som faktisk skjer her.
La meg gå videre og fylle ut dette skjemaet, sier David,
mann, Matthews, og så skal jeg si registrer deg.
La meg zoome ut, og klikk registrer deg.
Ok, så snilt av unyttig, men la oss se hva som faktisk skjer.
Legg merke til at nettadressen er endret til å være register0.php.
Hva er merkelig fraværende fra URL, skjønt, selv om vi bare sendt et skjema?
[Uhørlig student respons]
Ok, det er bare Chrome blir brukervennlig disse dager.
Det er faktisk det. De bare skjule det for å spare plass.
Men god tanke, god tanke.
Mot den andre enden av URL, men hva er det som mangler? Ja.
[Student] Søkestrengen.
Søkestrengen, så husker fra våre enkelt Google-søk eksempler.
Så snart jeg klikker på send-knappen URL
tok meg til Google, men så var det? q = informatikk eller hva jeg hadde skrevet i.
Det er fordi vi brukte get metoden med søket eksempel.
>> Denne gangen vi bruker hvilken metode i stedet?
Innlegg, og en av de umiddelbare utmerkelser
mellom få og legge inn er at innlegget ikke sette brukerens input i nettadressen.
Det skjuler det. Det sender fortsatt det.
Faktisk det vi ser i nettleseren her, så vi vil avsløre et øyeblikk
ved å se på register0, er jeg bare se innholdet
av tabellen som ble sendt fra nettleseren til serveren.
Men URL ikke har en?, Ikke har noen søkeord
eller verdier i det, og hvorfor er det?
Vel, lar innlegget du fortsatt sende inn data fra skjemaet til en server,
men det ser ikke sette den i URL, så hva slags informasjon er post
spesielt egnet for kanskje når du ber brukeren om å
skrive inn innspill til et skjema?
Noe som et passord, noe som hva annet?
Kredittkortnumre.
Noe som er mildt sensitiv du sannsynligvis ikke vil havne i URL
hvis bare fordi det betyr at romkameraten eller familiemedlem kan bare troll gjennom
din internett historie og deretter bokstavelig talt se passordene dine,
bokstavelig talt se dine kredittkortnumre fordi de fleste nettlesere
husker i historien uansett nettadressene du har vært på,
så hvis bare fordi det ville være en dårlig idé.
Bruke dine skjuler at detaljer fra brukeren.
>> Også, hvordan kan du laste opp et bilde til Facebook?
Vel, de eneste to mekanismer kan du virkelig bruke,
selv om det er et par andre mer uforståelige seg, er å få og legge.
Hvordan kan du muligens laste opp et bilde via en URL?
Du kan faktisk gjøre det.
Du kan ta en JPEG eller bitmap eller GIF og du kan være representert i heksadesimalt
eller noe som kalles basen 64.
I stedet for basen 16 du bruker basen 64, som i hovedsak ser ut som
ASCII-tegn, og du kan faktisk laste opp et bilde via en URL
etter et spørsmålstegn, men det er generelt grensen.
De fleste nettlesere tvinge nettadresser å være ikke mer enn 1000 tegn,
kanskje 2000 tegn eller lignende, slik at du ikke kan laste opp
en 10 MB Facebook-bildet.
For at du bruker innlegget også, så for nå får setter parametrene i nettadressen,
som er fint og nyttig noen ganger, men for noe sensitivt eller store
innlegget er veien å gå.
Hva er register0 faktisk gjør her?
Vel, hvis jeg åpner opp register0 merke til at dette er en super enkel side,
men det demonstrerer det faktum at jeg kan co-mingle, for bedre eller verre,
HTML med PHP.
Hele denne filen, bortsett kommentarene på toppen, er HTML
med unntak av denne fyren her.
>> Merke til i midten av min PHP-kode,
i midten av HTML min har jeg liksom midlertidig
angitt PHP-modus.
Jeg ringer en spesiell funksjon som heter print r.
Det betyr ut rekursiv, og hva den gjør er det rekursivt skriver
hvilken variabel du leverer den, semikolon, exit PHP-modus.
Og pre-koden gir deg pre-formatert tekst,
mono plass tekst slik at hver plass du faktisk se den.
Det forsvinner ikke. Hva er innlegget?
Vel, hva som er interessant og overbevisende om PHP
er at når du sender et skjema ved hjelp GET-eller POST
noe som blir sendt til deg av en nettleser
PHP selv finner ut hva de viktige verdi-par er,
Tallene ut om det er like tegn, tall ut om det er et spørsmålstegn.
Det gjør alt det harde arbeidet for deg, og da er det hender du en assosiativ array
inneholder alt som brukeren har skrevet inn i skjemaet.
Vel, hva felt dette skjemaet ha?
>> Det hadde fire felt.
Den ene var et tekstfelt som heter navn.
Den ene var en avmerkingsboks som heter kaptein.
Den ene var en radio knapp som heter kjønn,
og en var en drop-down menyen som heter dorm,
så legger merke til når jeg skriver rekursivt
innholdet av denne spesielle variabel.
Dette er en spesiell global variabel kalt bokstavelig $ _POST, i alle caps.
Dette er en spesiell global variabel som PHP bare skaper for deg
og hender til deg slik at du kan få tilgang til alt
som ble sendt via et skjema av en bruker.
Og ved å ringe print r på det-du ikke vil gjøre dette på en vanlig søknad.
Vi gjør dette for å se innsiden av denne variabelen,
og hva som er inni det, vel, 4 taster,
4 http parametre, så å si,
navn, kaptein, kjønn, dorm, og deretter verdiene som brukeren
skrevet i med ett unntak.
Jeg type D-A-V-I-D.
Jeg sjekket boksen, men for mannlige, som tilsynelatende lagt en verdi
av bare m å være konsis.
>> Da jeg valgte Matthews som er den verdien som ble valgt,
og dette er litt dumt, men det er konvensjonen.
Når jeg sjekket boksen, en verdi på på, "på", fikk presentert for avmerkingsboksen.
Hvis jeg ikke hadde sjekket det, ville ingen verdi har blitt sendt overhodet.
Dette er bare å gi oss innsikt i hva som er på innsiden av denne spesielle global variabel,
og det er så spesielt at det kalles en super global variabel.
Det finnes overalt for deg i koden slik at du faktisk kan få tilgang til den.
Dette er ikke så overbevisende, så la oss faktisk bruke super global
og faktisk prøve å registrere noen.
I froshims1 jeg kommer til å gjøre en endring.
Jeg endrer handlingen til å være register1.php,
og jeg gjør en annen ting.
Jeg var litt flau av kvaliteten på websiden min der.
Det er ganske heslig, ærlig, så viser det seg
som du kan bruke og enkelt på nettet
andres JavaScript-kode, andres CSS
at de har skrevet og åpen kildekode og gjort tilgjengelig som et bibliotek,
så å si, og for eksempel, her jeg bruker en fritt tilgjengelig bibliotek,
en haug med kode som noen andre skrev.
>> Twitter skjedd å skrive denne koden, og det kalles bootstrap biblioteket,
og det er bare en haug med CSS stilark, en haug med. css filer
at noen andre skrev og funnet ut hvordan du kan få alt fint og ganske
slik at folk som oss kan bekymre litt mindre om estetikk og fokusere mye mer
på logikken og selve programmering.
Ved å knytte det inn med den koden, som er den samme koden jeg brukte huske for styles3.css tidligere,
Jeg har nå tilgang til en fil som heter bootstrap.min.css.
Min betyr bare at de har minified det og de har blitt kvitt alle de hvite plass og så videre
bare for å sørge for at de ikke sender meg flere bytes enn jeg faktisk trenger.
Men der er en hel haug med CSS, så hvis jeg nå åpner opp versjon 1 av Frosh direktemeldinger
legge merke til at filen min er definitivt penere.
Nå er det fortsatt bare svart og hvitt, men merker at ved bare å bruke sin stil ark
og bruke visse funksjoner i den på formen min er det ikke fantastisk,
men det er definitivt renere enn det var før, og projektoren ikke gjør det rettferdighet.
Det er små grå linjer rundt knappene og rundt tekstfeltet akkurat her,
men det er definitivt renere enn det var før.
>> Nå, i rettferdighet, jeg må endre min markup litt.
Dette er versjon 1, og merker at jeg har brukt noen nye koder,
og ærlig, hadde jeg ingen anelse om hvordan du gjør dette før jeg leste dokumentasjonen
for Twitters bootstrap bibliotek, og de fortalte meg at hvis du ønsker å bruke vårt bibliotek
bruke en fieldset element inne skjemaet,
sette inn ordet du vil vise ved siden av et felt inne i en etikett tag,
deretter gi dine innspill et navn, akkurat som før,
og deretter for boksen, ikke bare du pakker det inn i en etikett element,
du bruker noe som kalles en klasse, så vi har ikke sett dette før,
men du vil se dette i en av pset 7s shorts.
En klasse i CSS lar deg gjøre noe lignende til ID,
men før når vi hadde en ID med symbolet #
som var for en og bare ett element.
Hva er fint om en klasse er at flere elementer kan ha samme klasse
eller samme CSS ting brukes til det.
>> Men igjen, er mer på de i den korte, og resten av denne bare kopiere og lime inn
fra deres dokumentasjon hvor jeg har lagt en etikett her og der.
Og på slutten, fordi jeg har tatt med link tag på toppen,
alt ser penere automatisk
ved å ha merket opp min side på en måte som
Twitter forventet, og det er så mange forskjellige måter
å gjøre dette, og dette er faktisk veldig passende.
På dette punktet i semesteret, som du ser i pset 7s spec,
Googling rundt, lese opp på biblioteker, bruker andre folks CSS
og JavaScript for å løse hjelpeutstyr problemer
til problemet satt seg er sikkert oppmuntret og er en metode
Web er bygget i disse dager, ved å stå på andres skuldre
slik at du virkelig kan fokusere på de nye og interessante problemstillinger.
Men la oss nå fokusere på, igjen, logikken.
>> Det var en rask omvei på estetikk bare for å vise deg hvilken retning du kan gå.
Jeg kommer til å gå tilbake til den styggere en for nå bare fordi
det er ingen distraksjoner med Twitter ting, og la meg gå videre og åpne opp
froshims2, som igjen skiller bare i handlingen, register2.php,
og la oss ta en titt på hva effekten er her.
La meg gå videre og skrive David.
Jeg vil ikke være kaptein denne gangen.
Jeg vil si mann, Matthews, register.
Pokker. Ok, det er en skrue opp for min del.
Stand by.
Register2, 22 linjer, hvis tom eller-beklager.
La oss lesse.
Ok, når du sender dette skjemaet hva som nettopp skjedde?
Jeg skrev i David, sjekket mann, klikket Matthews, register.
Du er registrert. (Vel, egentlig ikke.)
Dette er helt klart et steg utover bare å skrive ut innholdet i noen variable,
men hva er denne filen faktisk gjør?
I register2.php
merker at jeg har noen nye koden.
Innsiden av kroppen min tag jeg har egentlig en if else konstruere,
men fordi jeg samtidig mingling dette med noen HTML
Jeg må inn og ut PHP-modus og tilbake, så la oss se hva jeg gjør.
>> I den første linjen her jeg si hvis det er tilfelle
at stillingen super global er tom for nøkkelen av navn,
så med andre ord, hvis brukeren ikke gi meg en verdi for navn i form,
deretter tømmes kommer til å returnere sann fordi verdien er tom.
Eller-merke de vertikale stolpene-hvis kjønn er tom
innsiden av denne spesielle super global, som, igjen, representerer innholdet av skjemaet,
eller dorm er tom, så jeg kommer til å gå videre og kjefte på brukeren.
Hvordan? Vel, merker jeg kommer til å si at du må oppgi ditt navn, kjønn og dorm.
La oss faktisk indusere den feilen.
La meg gå tilbake til formen min. La meg laste å fjerne den.
Og jeg bare kommer til å gi dem David, og de trenger ikke å vite hvor jeg bor.
Registrer deg. Angivelig jeg trenger å fortelle dem hvor jeg bor.
Du må oppgi ditt navn, kjønn og dorm. Gå tilbake.
>> Og jeg kunne for å gå tilbake til dette skjemaet, men hvorfor er det?
Vel, i så fall navn var ikke tom, men kjønn var, og dorm var,
så dette hele uttrykket evalueres til sann, og selv om syntaksen er litt nytt,
igjen, skriver vi PHP-modus, kjent hvis setningen,
men den nye delen her er nettopp denne kolon, og jeg hadde skrudd opp ved å utelate en parentes
ved et uhell, men legg merke tykktarmen, og det betyr at
selv om vi avslutter PHP-modus alt
som følger bør spytte ut ordrett til leseren
til du ser en annen blokk, som vi gjør her,
i så fall bør du i stedet spytte dette ut
til du ser endif, så noen litt ny syntaks
som tillater meg å veksle mellom HTML og PHP.
Vi kan rydde opp til slutt, men for nå,
det er en slags en overbevisende måte feilkontroll skjemaet.
>> Nå sier jeg du egentlig ikke registrert fordi vi åpenbart har gjort noe annet enn data,
så la oss faktisk prøver å gjøre noe kult.
I froshims3 den eneste forskjellen er at jeg kommer til å sende til register3,
så HTML er det samme.
I register3 merke dette.
Dette er slags sexy.
På toppen jeg bruker en require utsagn, så dette er som # include.
Denne gangen er det ikke stdio.h eller noe sånt.
Det er en PHP bibliotek, og dette kalles PHPMailer.
Hvordan visste jeg å inkludere nettopp denne sitert streng?
Jeg leste det i dokumentasjonen, så når de fortalte meg sette dette på toppen av filen
Hvis du ønsker å bruke en spesiell bibliotek kalt PHPMailer som gjør hva den sier.
Den lar deg sende e-post via PHP.
Nå la oss rulle ned ytterligere.
>> Legg merke til å begynne jeg er i PHP-modus hele denne tiden,
så nå merker her nede etter import biblioteket,
så å si, jeg gjør litt sunn fornuft sjekker.
Hvis det er slik at navnet ikke er tom
og kjønn er ikke tom-merke utropstegn-
og dorm ikke er tom, så brukeren har logisk fylt ut skjemaet, i hvert fall nok.
Jeg bryr meg ikke om de er kaptein eller ikke. Jeg trenger deres navn, kjønn og dorm.
Hvis de har fylt dem ut slik at ingen av disse feltene er tomme
dette er litt nytt syntaks.
PHP, som en side, er et objektorientert programmeringsspråk
som noen av dere kanskje husker fra APCS eller lignende.
For nå, hvis ukjente, bare vet at å bruke dette biblioteket
du må skrive en linje med kode som dette med et nytt søkeord,
bokstavelig talt et nytt søkeord kalt ny.
Men utover det, har vi noen kjenner syntaks.
Det er en pil operatør, som er likt det vi brukte for structs i sammenheng med pekere.
For i dag PHP ikke har pekere,
men vet for nå som innsiden av post variabel
er egentlig slags en peker til et fagbibliotek
at noen andre skrev, og hvis jeg vil ha tilgang til bestemte funksjoner
innsiden av det biblioteket jeg, som i C, bruker pilen operatør,
selv om dette er faktisk ikke pekere.
Det er liksom PHP egen versjon av denne.
Dette betyr gå inn i biblioteket og ringe IsSMTP funksjonen.
SMTP, tilbakekalling, fra våre Warriors of the Net refererer til e-post,
og det betyr bare bruke en e-postserver for dette Frosh direktemeldinger registrering.
>> Hva vert ønsker jeg å bruke?
Vel, Harvard, hvis du Google rundt, har en e-postserver som heter smtp.fas.harvard.edu.
Hvis du spiller sammen hjemme eller du bor på en Comcast nettverk
det kan være noe sånt som smtp.comcast.net.
Det avhenger helt av hvor du bor og hvem din ISP er.
Etter at jeg kommer til å sette min fra adresse vilkårlig å være jharvard@cs50.net.
Jeg så kommer til å sette til adresse for å være jharvard@cs50.net.
Den eneste måten jeg visste at disse funksjonene ble kalt SetFrom og AddAddress
er, igjen, jeg leste dokumentasjonen.
Dette er ikke typen magisk kjent for alle programmerere.
Så jeg satt et emne til "registrering".
Og nå denne linjen er litt stygg fordi det betyr prikken operatør i PHP?
Noen som vet?
Sette sammen.
I C er det en smerte i nakken for å sette sammen to strenger sammen.
Du har å forholde seg malloc eller RealLOC eller alle at ting
bare for å forlenge lengden på en streng.
I PHP, i JavaScript og andre språk
kan du vanligvis gjøre dette med et enkelt tegn.
I dette tilfellet betyr dot tar denne strengen her
og legge til det denne strengen.
>> Oh, og forresten, føyer til det denne strengen,
som skjer for å være en variabel innsiden av at super global.
Deretter legge til det en ny linje, så alle disse prikkene bare bety
fortsette å lage en større og større og større streng,
og du trenger ikke å bry seg i det hele tatt om malloc eller lignende på et språk som dette,
og det er andre måter å gjøre dette, men dette er en av de raskeste
måter å legge den ut.
Hva er dette å gjøre?
Det er å skape en epost kroppen som kommer til å si Navn: Kaptein: Kjønn: Dorm:
alle på separate linjer, og deretter til slutt,
en linje med kode, og jeg kommer til å ignorere dette for nå.
Hvis == false betyr bare hvis noe gikk galt,
men magien skjer her.
Post Send betyr sende denne e-post.
La oss se hva netto resultat er.
På bunnen av filen, merker det kommer til å si at du er registrert virkelig
hvis jeg kommer så langt.
Hvis, men brukeren skruer opp, legge merke til at vi startet dette
hvis tilstanden opp her, hvis det ikke er tomt og ikke tomt
og ikke tømme vi sende e-post.
Ellers skal vi sende denne linjen med kode,
som kommer til å ha effekt, som du ser i pset 7, for å omdirigere brukeren
tilbake til der de kom, froshims3.php.
>> Fingrene krysset, ellers kommer til å være det mest skuffende demo i dag.
Here we go.
La meg åpne opp min innboksen for jharvard i Gmail.
Ingen e-post akkurat nå. OK.
Nå la meg åpne opp froshims3, som er den tredje og siste eksempelet vi skal se på her.
Ok, here we go.
Nate, vil han være kaptein, mann, fra, sier Apley.
Registrer deg. Ok, er du registrert virkelig.
Nå hvis jeg ruller over til min e-post, oh, min Gud.
Jeg har nettopp dynamisk sendt en e-post på Internett.
>> La oss la på dette notatet.
En video er forestående for forelesningen vi savnet. Se deg neste uke.
[CS50.TV]