[Powered by Google Translate] [Week 8]
[David J Malan] [Harvard University]
[Dit is CS50.] [CS50.TV]
>> Welkom terug.
Dit is CS50, en dit is het begin van week 8.
Een paar mogelijkheden die deze week,
onder hen dit gesprek hier, waar wat te eten wordt geserveerd.
Voor meer informatie kijken op de dia's die online zijn.
En ook een ander evenement deze week door onze eigen Thomas Carriero.
Hij is een van de voormalige hoofd van het onderwijs CS50 de medemens die nu aan Dropbox,
en hij is de man die ons gekoppeld met de je weet wat,
dus als je meer van dat hoofd om hun gesprek wilt vanmiddag voor Dropbox en nog veel meer.
CS50 lunch is deze vrijdag.
Doe mee met ons op als je in staat bent, 1:15, zoals gewoonlijk, bij Fire and Ice.
>> En nu hebben we een duik in iets genaamd Seminars.
Onze CS50 Seminars, recall, zijn deze optionele klassen onder leiding van het onderwijs fellows
en natuurlijk assistenten en vrienden van de cursus,
mensen uit een groep campus genoemd ABCD, een groep
technofielen op de campus, maar ook een groep genaamd HCS,
de Harvard Computer Society, studenten die op soortgelijke wijze zijn geïnteresseerd in computers.
Dit jaar is de rooster van seminars omvat seminars op Android en iOS en JavaScript
en PHP, Unix, Vim, en nog veel meer, zodat zich realiseren dat deze seminars komen eraan.
Als u wilt RSVP voor een van hen het hoofd naar die URL daar.
Wij zullen dan plaatsen op de website van de cursus de tijden en plaatsen zodra ze zijn afgerond.
Maar weet dat er's 5 jaar ter waarde van eerdere seminars online beschikbaar,
waarvan er vele nog steeds zeer veel stroom in termen van technologie je misschien
wilt spelen met voor uw afstudeerprojecten, dus er hoofd voor een aantal beschikbare video's daarvan.
>> CSS, diegenen van jullie die bekend zijn met CSS al,
wat is het in een notendop?
Wat is CSS?
Het is cascading style sheets, en wat betekent dat?
Wat betekent dat voor ons doen, CSS?
Oke, laten we opwarmen met een eenvoudiger een, HTML, HyperText Markup Language.
Wat betekent dat voor ons doen?
Wie dan?
Het wordt echt lastig deze vragen.
HTML, Hypertext Markup Language.
Ja? Nee?
[Onverstaanbaar student reactie]
Oke, goed, het laat ons toe om het markeren van tekst om weer te geven in een webbrowser.
Het is geen programmeertaal.
Het is inderdaad een opmaaktaal, wat betekent dat het zorgt ervoor dat de browser hoe u het scherm
informatie, zodat de eenvoudigste incarnatie van dit zoals we hebben gezien
is iets super simpels als boldfacing, open beugel b gesloten beugel zegt
maken deze tekst vet, en dat is eigenlijk alleen maar een van de vele manieren
waarin we kunnen dat doen, en inderdaad, deze dagen een betere aanpak
te stileren uw webpagina, het maken van dingen vet en cursief
en gecentreerd en gerechtvaardigd en dergelijke, wordt niet gedaan via HTML-tags alleen
maar met een techniek genaamd CSS, cascading style sheets.
Dit is een taal zichzelf.
Het is ook geen programmeertaal but-
iedereen, dit is Dan, die steeds bij ons vandaag.
Enkele technische problemen. Geen probleem.
>> CSS kunnen we stileren een pagina
door het instellen van zogenaamde eigenschappen, dus laten we een kijkje nemen op deze
door middel van een aantal fundamentele voorbeelden.
Laat me gaan in het apparaat vandaag.
Ik heb de bron 8 Maandag directory hier,
en ik ga om te gaan in een directory met de naam CSS waar we een hele hoop
van bestanden op ons te wachten hier,
en in deze map hebben we, bijvoorbeeld, search0.html van de vorige keer.
Nu, herinner met search0 we vertrokken op deze nota
door soort van de uitvoering van Google of eigenlijk gewoon de front-end voor het een week of zo geleden,
en merk op dat we een aantal nieuwe tags er moest.
We hadden h1 voor een groot, vet rubriek,
vorm, waardoor we eigenlijk een HTML-formulier voor invoer van de gebruiker.
Actie, wat was de betekenis van een action attribuut
op het HTML-formulier tag?
Wat was de betekenis van deze, actie?
Ik zal gewoon doen vandaag.
Actie is de bestemming waar het formulier zal worden ingediend.
Het feit dat die zegt action = "google.com / search"
betekent dat wanneer de gebruiker op de submit knop of het equivalent
welke vorm dan ook velden die ingevuld zullen worden gestuurd niet naar onze server
of onze apparatuur, maar om dat specifieke URL bij Google.
En de methode het gaat gebruiken heet te krijgen,
en te krijgen, voor nu, maar is een techniek voor het doorgeven van informatie langs op een webserver
door middel van de URL, dus laten we eens een snelle blik terug op hoe dit werkt.
>> Merk op dat er een ingang waarvan de naam is q
waarvan het type is tekst en vervolgens een tweede ingang in te dienen van het type
waarvan de waarde CS50 Zoek, en inderdaad, als we open dit bestand hier,
search0.html, het is een super eenvoudige vorm,
en als ik zoek naar iets als de informatica
en dan druk op enter of klik op CS50 Zoeken
merken dat wat er gebeurt is voorbij om naar Google
Ik heb specifiek belandde op deze URL aan de top,
google.com / search? q = computer + wetenschap,
en informatica is uiteraard wat ik getypt inch
De + betekent alleen dat is waar een spatie was,
en het is gedaan door de browser alleen maar om ervoor te zorgen dat er geen
verwarring en witte ruimte in de werkelijke URL.
En q natuurlijk de parameter naam.
We hebben niet gezien hoe wij, de programmeur, daadwerkelijk kan q nog toegang.
We kunnen aannemen dat Google weet wat ik moet doen met deze,
maar we komen er wel te zijner tijd vandaag.
>> Maar laat me in plaats daarvan een kijkje nemen op search1.html,
die ziet er een beetje anders, omdat ik besloten dat dit formulier hier was gewoon een beetje lame.
Ik bedoel, het is in de linkerbovenhoek.
Er is echt geen esthetiek aan, en daarom wil ik deze stileren
een beetje meer zoals Google, wiens homepage, recall,
Ook al heb je misschien niet te bezoeken die vaak, lijkt dit vandaag op Halloween.
Als we in plaats daarvan opent versie 1 van dit bestand, zoeken 1.html, heb ik in het midden het.
Nog vrij lelijk, maar in ieder geval nu ben ik begonnen met de esthetiek van deze pagina te controleren,
niet alleen de markering omhoog daarvan.
Laten we eens een kijkje nemen op zoeken 1, en er is echt maar een verschil hier,
die kunnen springen op je, of misschien niet,
maar wat is het een regel of een fragment van verschil?
>> Er is een stijlkenmerk, dus het blijkt dat in HTML
de meeste elementen, de meeste tags kunnen een stijl attribuut hebben op hen,
en de binnenkant van die stijl attribuut is een tekenreeks tussen aanhalingstekens,
en dat tekenreeks tussen aanhalingstekens is CSS.
U kunt cascading style sheet daar
door het specificeren van het als een eigenschap naam
gevolgd door een dubbele punt gevolgd door een waarde.
Dit is een soort van een ongelukkige ontwerpbeslissing enkele jaren geleden
dat CSS is een taal op zich,
maar syntactisch het is heel anders dan HTML.
In dit geval zien we dat de binnenkant van mijn webpagina, die is geschreven in HTML,
Ik heb CSS binnenkant van deze citaten, en de conventie voor CSS
is dat je wat een eigenschap, gevolgd door, opnieuw, een dubbele punt genoemd,
gevolgd door de waarde van die eigenschap, dus er is geen gelijk-teken.
Er is geen extra citaten.
Het is gewoon deze scheiden met dubbele sleutel waarde paar,
en tekstregel doet precies wat het zegt.
Het brengt de tekst in de body van de pagina, dat is echt het lef van de pagina,
in het midden.
>> Oke, het eindresultaat, dan om duidelijk te zijn, is het volgende.
Niet alles wat sexier, maar in ieder geval is gecentreerd en een beetje meer als de echte Google.
Maar wat als ik in plaats daarvan open versie 2 van deze
en wijzen hier beneden een nieuwe tag bij elkaar?
Nu in de kop van mijn pagina, die alleen eerder die tag
in alle voorgaande voorbeelden?
Het had net dit, de titel.
Een moment geleden de kop tag er als volgt uit.
Nu in plaats daarvan heeft een stijl tag binnenkant van het,
en ook dit, mijn excuses, syntactisch ziet er heel anders uit HTML,
maar je went er wel aan, waarbij de binnenkant van de stijl tag
Ik kan nu factor wat was een moment geleden
een attribuut, de stijl attribuut, en ik kan zet het op de top van mijn pagina.
>> Waarom?
Nou, dit is een stap in de richting schoon dingen, net als in het schrijven van C-code
We zouden wel eens schrijven functies factor van gemeenschappelijke functionaliteit.
Het is gewoon een beetje schoner te factoring beginnen dingen als de esthetiek
op een centrale locatie in plaats van het allemaal tussenwerpen in uw HTML.
Dat doet ook wat hij zegt, ook al is er een beetje van nieuwe syntax.
Dit is hier een selector, en het lichaam gewoon betekent selecteert u het body element
en pas de volgende eigenschappen aan.
Nou, het pand is precies hetzelfde.
Voor de goede orde ik heb een puntkomma aan het einde,
die de neiging heeft om conventie, en ik heb ingepakt dit hele pand
tussen accolades, want ik kon hier eigenlijk hebben verschillende dingen.
Ik kon eigenlijk iets zeggen als kleur: blauw;
>> Nu ook dit is niet van plan om een ​​stap in de richting van iets dat alles mooier zijn,
maar als ik nu terug ga naar versie 2 heb ik in ieder geval nu gemaakt het lichaam van mijn
pagina's tekst alle blauw.
De knop blijft hetzelfde, want dat is een ingang. Het is niet puur tekst.
Maar al het andere dat is tekst, zoals CS50 Zoek tot boven, is in feite blauw.
Nogmaals, alles wat we nu hebben gedaan verwijderen uit het lichaam tag, mededeling,
de stijl attribuut, en we hebben meegenomen het hier.
Dit is niet een enorme verbetering, maar als we nog een stap verder
let op wat we hier kunnen doen in deze derde versie.
>> In search3.html de webpagina is bijna identiek
behalve voor wat nu nieuwe tag?
Link, dus deze is niet erg toepasselijke naam
omdat je niet koppelen in de zin van een klikbare hyperlink.
Integendeel, je bent soort van het doen van het equivalent van # include in C
waarbij de link tag met een href attribuut
en een rel attribuut zegt ga je gang
kopieer en plak de inhoud van een bestand met de naam search3.css hier wezen.
Het is niet helemaal doen, maar dat is de geest van het.
Het zegt verder open dat bestand, search3.css,
en behandelen alsof de gebruiker had getypt het hier in de kop van de pagina
net zoals ik deed in het vorige voorbeeld.
Search3.css, ondertussen, is vrij eenvoudig.
Het is echt gewoon bevat precies wat was een moment geleden
in de stijl tag, maar ik heb meegenomen het hier om zijn eigen dossier.
>> Ook al hebben we niet veel tijd doorgebracht op alle in HTML of web programmeren
gewoon intuïtief wat is de motivatie, misschien, voor factoring uit
dit kleine fragment zelfs van CSS in een leeg bestand
en dan ook met deze link tag hier?
[Onverstaanbaar student reactie]
Oke, het is makkelijker te lezen in de zin dat je je CSS hebben in een CSS-bestand.
Je hebt je HTML in uw HTML-bestand, dus het is beter leesbaar in die zin.
Wat zou kunnen zijn dwingende? Ja.
[Onverstaanbaar student reactie]
Ja, dus u kunt ook het vele malen, dus nu zijn we aan het doen bent deze
elementaire voorbeelden met individuele dossiers, maar stel dat je in feite het maken van
een echte website zoals jij wil voor PSET 7 of je afstudeerproject misschien,
en u wilt meerdere webpagina's hebben, zoals is zeker gebruikelijk op
de werkelijke World Wide Web, en het zou een beetje zwak zijn
te moeten kopiëren en plakken van dezelfde blauwe kleur
en dezelfde tekst uitgelijnd centrum in elk van die pagina's.
Eerder heeft het meer zin om factor uit, net als we hebben gedaan in C
met de. h-bestand, zet het op een centrale plaats,
in dit geval search3.css, en laat ieder bestand
in uw website naar dat bestand daadwerkelijk onder meer door middel van deze tag hier in lijn 16.
Zoals meestal het geval is, zijn we begonnen met versie 0, wat voor soort werk
maar is niet per se de beste, en met elke stap,
zoeken 1, zoeken 2, en nu zoeken 3 die we hebben genomen van deze kleine stapjes
in de richting van ontwerpen die zijn een beetje schoner en zijn voorbereidende
voor meer complexe pagina's die we zouden kunnen doen op de weg.
>> Laat me open te stellen hier een laatste voorbeeld om te laten zien
een nog meer gestileerd pagina, maar laten we eerst eens kijken naar de HTML.
Dit is search4.html, en merken dat structureel het is bijna hetzelfde
behalve voor de invoering van een nieuwe tag, div.
Div is een tag die een verdeling van de pagina introduceert.
U kunt denken aan dit als een onzichtbare rechthoek.
Het soort creëert een strook van het gebied in de webpagina
die u kunt stileren in een keer.
Wat ik heb hier gedaan is als volgt.
Binnenkant van mijn body-tag, die er al die tijd al,
Ik zeg hier een afdeling van de pagina via lijnen 45 tot en met 47,
en dat betekent in wezen geef me een onzichtbare rechthoek langs de bovenkant van de pagina.
Geef me dan een tweede rechthoek, zij het onzichtbare, daaronder,
en geïdentificeerd door de naam inhoud en tenslotte
geef me een derde divisie van de pagina aan de onderkant
genaamd ID.
We zullen zien waarom ik heb dit gedaan in slechts een moment,
maar conceptueel Ik heb een header divisie.
Ik heb een inhoud divisie, en ik heb een voettekst verdeling van de pagina
ook al is dit zijn slechts in markup.
Het is de gebruiker niet van plan om 3 rechthoeken te zien,
maar soort van structureel er achter de schermen
ze daadwerkelijk aanwezig is.
>> Nu, who cares? Waarom eigenlijk?
Al het andere op de pagina is hetzelfde als we al eerder gezien.
Hier is mijn vorm. Hier is mijn input, mijn input, een regeleinde, enzovoort.
Hier is een beeld, al, dus we zullen zien waar dit vandaan kwam in slechts een moment.
Hier is een voettekst, die nieuw is, alleen maar omdat ik wilde introduceren
wat meer inhoud hier.
Als we naar boven op dat ID van deze div is header.
De ID van deze div is content, en de ID van deze is voettekst.
En zoals de naam al doet vermoeden, als je een ID attribuut
in HTML, per definitie moet uniek te identificeren
een van de elementen, een van de tags in uw pagina.
De last is volledig op u te onthouden dat je een kop-ID al hebt.
Je hebt een voettekst. Je hebt een inhouds-id al.
De computer is niet van plan om uit te vinden wat een beschikbare-ID is voor u,
dus je zou per ongeluk geven 2 tags een ID van header,
en dat zou gewoon verkeerd.
>> Je moet in gedachten houden wat je hebt gecreëerd,
maar zodra je dat gedaan hebt merk op wat we hier kunnen doen.
Ik kan nu opgeven in mijn stijl tag aan de top
of gelijkwaardig in mijn CSS-bestand, als ik nog steeds met behulp van die versie,
Ik kan zeggen # header, en wat dat betekent is dat wat er ook tag
in deze webpagina heeft een ID van header
en #, gewoon door menselijke conventie, vertegenwoordigt ID.
De scherpe teken of hekje staat voor ID.
Header is de naam die ik het gaf.
Dit betekent toepassen van deze CSS-eigenschap
naar wat tag op deze pagina draagt ​​een ID van header.
Zelfde deal hier.
Breng deze eigenschap, die toevallig ook dezelfde, om het even welk element
waarvan het ID is content, en dan hier beneden
merk dat ik kreeg een beetje liefhebber met voettekst.
Elk element waarvan id footer, waarvan er slechts een kan per definitie
ga je gang en maak het lettertype kleiner,
het lettertype gewicht vet, de marge 20 pixels.
>> Wat betekent dat?
Het is gewoon een marge boven, onder en links en rechts.
Dit betekent geef me een 20-pixel gifs marge rond het
alleen maar om al het andere weg te duwen van het een beetje, zoals je zou doen in Word,
Microsoft Word of Pages of iets dergelijks.
En dan tekst uit te lijnen centrum.
Laten we eens kijken het eindresultaat, en dan zullen we terug te gaan naar de enige overgebleven fragment van CSS daar.
Dit is versie 4, de laatste voor het zoeken voorbeelden, en het is veel, veel sexier.
Nu, in alle eerlijkheid, ik heb net gegoogeld 'google lettertype logo generator. "
En dat kon ik een GIF-, een beeld formaat, dat lijkt op dat er te creëren.
In feite, kunt u dit ook doen.
We hebben 'google fonts logo generator. "
>> Laten we eens kijken of we dit kunnen doen.
Oke, ik denk dat dit is de website ik heb gebruikt.
We zeggen Ec 10, bijvoorbeeld, en ze hun eigen.
U kunt lang spelen met de hele dag en dan rechts klik erop
en download vervolgens de werkelijke GIF, dat is alles wat ik deed.
En inderdaad, dat is de reden waarom in mijn HTML,, herinneren hier
Ik had een image tag, die kort zagen we vorige week
waarvan de bron logo.gif.
En wat was weer de motivatie voor het feit dat deze alt-attribuut,
deze alternatieve attribuut?
Ja.
[Onverstaanbaar student reactie]
Goed, dus 2 redenen echt, als de browser niet kan trekken het beeld
omdat u een langzame netwerkverbinding of het beeld is beschadigd
of iets dergelijks in ieder geval de mens kan zien "CS50 zoeken,"
en ook voor de toegankelijkheid.
Als je een gebruiker die is blind en maakt gebruik van een schermlezer
en dus uiteraard geen afbeeldingen zien ze kunnen op zijn minst
horen tekst als hun computer spreekt het aan hen.
>> In het algemeen wordt deze best practice als het gaat om de toegankelijkheid van pagina's
zodat zelfs gebruikers in die situatie kan horen of zien, om zo te zeggen,
wat het is dat er op je pagina.
Er is een ander ding dat ik deed hier
dat is een beetje interessant, en we zullen meer over dit te zien in probleem set 7
via een van de korte broek onder leiding van een van de leer kerels.
Maar # inhoud verwijst naar de tag
waarvan het ID is de inhoud, maar dan is er een spatie, en dan is er het woord input.
Nou, wat is interessant over CSS is dat je kunt
verwijzen om tags op een pagina soort hiërarchisch,
en wat dit stukje CSS middel vinden de tag
waarvan het ID is de inhoud, en vervolgens de volgende eigenschappen
om alle invoer tags die afstammelingen van inhoud,
dat is dat zijn ingesprongen binnenkant van het.
Inspringing weer is alleen belangrijk voor de computer, om de menselijke,
maar door conventie we streepje dingen als we dieper ingaan op een pagina,
dus dit betekent toepassing een marge van 5 pixels op een ingangselement
dat ergens in of genest van
het element waarvan de ID is tevreden.
>> Wie wil die van toepassing zijn?
Nou, er is eigenlijk alleen maar deze 2 jongens hier.
Merk op dat de binnenkant van de vorm is er 2 ingangen,
Omdat er al al deze voorbeelden.
Maar merk op dat die 2 ingangen toevallig naar binnen worden genest,
zij het een beetje diep, een paar lagen van inspringen,
binnenkant van de tag waarvan het ID is tevreden.
Wat betekent dit?
Als we naar de browser hier kun je ooit zo iets-te zien
laat me in te zoomen, dat er een beetje van opvulling tussen de knop
en tussen het tekstveld.
>> Laat ik tijdelijk die uit te schakelen.
Laat me naar mijn CSS, en laat mij ga je gang en net
Wijzig deze marge van 5 pixels naar 0 pixels.
Laat mij dan ga je gang en sla het bestand op, ga terug naar de zoekmachine
en herladen, en kijk naar het midden van de pagina.
Alles bij elkaar geperst, en toen ik voor het eerst slagroom dit bijvoorbeeld tot
Ik dacht dat leek dom met de tekst veld en vervolgens op de knop direct eronder.
Ik wilde pad het een beetje, dus ik geïntroduceerd marges.
Wat we niet doen in collegezaal is ga je door de tientallen
CSS-eigenschappen die bestaan ​​omdat, nogmaals, er zijn dingen zoals lettergrootte,
font gewicht, marge, tekst uitlijnen en enkele tientallen anderen,
en wij zullen u verwijzen probleem 7 tot verschillende tutorials online
en referenties die u in staat om deze dingen op te pakken.
Maar wat echt belangrijk is aan het eind van de dag
>> is te begrijpen hoe deze dingen worden toegepast.
Nogmaals, als we de stijl tag binnenkant van die
kan gaan van de selectors, het soort identifiers die aangeven
aan wie wilt u deze eigenschappen toe te passen,
en dan moet je de eigenschappen zet als belangrijke waarde-paar
gescheiden door een dubbele punt en dan werd afgesloten met een puntkomma,
of u kunt rippen dat allemaal uit en zet het in een apart CSS-bestand
op zichzelf.
Oke, eventuele vragen over de concepten
of het grote plaatje van CSS?
Je zult weer zien meer van het in PSET 7,
maar we houden het over het algemeen vrij eenvoudig.
Nee? Oke.
Het is tijd voor een echte programmeertaal,
en komen we terug om een ​​beetje van CSS in de vorm van een voorbeeld.
PHP is eigenlijk een heerlijk toegankelijke taal
in dat het syntactisch bijna gelijk aan C.
Met andere woorden, als je weet C, weet je voor het grootste deel PHP,
op zijn minst syntactisch, ook al zijn er een aantal nieuwe functies
en een aantal nieuwe concepten zullen we moeten kijken naar.
>> Maar voor het grootste deel, nu we overgang van C naar PHP
de meeste nieuwe spul is echt in het grote geheel,
hoe u een taal te programmeren op het web, in tegenstelling tot
op de opdrachtregel of in een knipperende prompt als we al tot nu toe doen.
Ter referentie, vooral met PSET 7 en het uiteindelijke project verder,
niet profiteren van deze URL hier als je wilt om te lezen over de formaliteiten van PHP.
Het is eigenlijk effectief als een gratis online leerboek,
en je zult ook merken dat wat echt leuk over PHP
is dat er honderden functies die daarbij horen,
terwijl in C dat je niet per se toegang tot
meer functies dan waren in de wiskunde bibliotheek, de CS50 bibliotheek.
In PHP en veel moderne talen, Python en Ruby onder hen,
krijgt u toegang tot zo veel meer functies, wat betekent dat je te schrijven
een stuk minder code, want je kunt staan ​​op de schouders van andere mensen
die al geschreven bepaalde dingen voor je.
>> Laten we eens een snelle rondleiding door de syntaxis van PHP en dan schrijf ik een paar voorbeelden.
Wat is er leuk over PHP in de eerste plaats
is er geen hoofdfunctie.
Als u een programma wilt in PHP schrijf je gewoon beginnen met het schrijven van code,
en je hoeft geen zorgen te maken over de belangrijkste.
Er is geen int. Er is geen terugkeer.
Er is geen argv, argc dat is vereist wanneer u het programma.
In plaats kun je gewoon beginnen met het schrijven van code, en dit is voor een deel
want PHP is wat heet een geïnterpreteerde taal.
C werd samengesteld, en het werd samengesteld in de zin dat je begint
met broncode, voer het uit door Clang, dat is een compiler,
en uiteindelijk na een aantal aantal stappen krijg je object code, 0s en 1s.
PHP en Python en Ruby en Pearl en anderen
zijn verschillende soorten talen in die u niet compileren.
Je gaat niet van broncode tot 0s en 1s.
U alleen nog maar de broncode, en u de broncode
door het schrijven in een gewone tekstbestand, eindigend in. php in dit geval
in plaats van. c, en wat het programma doet op uw computer
is het interpreteert letterlijk je code regel voor regel voor regel.
>> Met andere woorden, in plaats van een programma te schrijven en voer het programma
direct u in plaats daarvan schrijf ik een programma met een bestand dat eindigt op. php.
Dan loop je een echte programma genaamd php.exe, als je op Windows,
of gewoon PHP als je op Mac OS of Linux,
en u te voorzien als input voor de PHP-programma uw eigen broncode,
en haar doel in het leven is om te lezen de code boven naar beneden, van links naar rechts,
en doen wat je hebt verteld dat het te doen.
>> Laten we eens kijken wat dit gaat syntactisch betekenen.
In PHP hebben we voorwaarden.
Deze dia is identiek aan wat je zag weer in week 1
want syntactisch voorwaarden, mitsen en anders mitsen en anders in PHP
er precies zo uit.
Als het gaat om booleaanse expressies ze gaan precies zo uitzien.
Als het aankomt op Anding dingen samen als booleans het gaat om precies zo uitzien.
Schakelt zien er hetzelfde uit, en je krijgt het extra voordeel in PHP
dat de schakelaars in C kon alleen schakelen op een char of een int.
Je kon niet overschakelen op een tekenreekswaarde.
In PHP kun je eigenlijk een uitdrukking
dat een variabele waarvan de inhoud een tekenreeks,
en je kunt string vergelijking eigenlijk doen in de echte intuïtieve manier,
niet wijzer vergelijking, om te beslissen of tot geval te doen i of j of iets anders.
We zullen dat potentieel zien voor lang.
>> Loops ook heerlijk zijn hetzelfde.
Voor loops hebben een initialisatie, een voorwaarde, en een aantal aantal updates.
Terwijl lussen bestaan ​​ook in PHP.
Doe while loops bestaan ​​ook in PHP,
en arrays bestaan ​​in PHP, maar hier is waar de syntaxis begint te worden een beetje anders,
maar de concepten zijn hetzelfde, en de begrippen echt dezelfde
als ze waren in week 0 met Scratch.
Eerst en vooral is het $-teken.
Dit was een ontwerpbeslissing in PHP, waarbij elke variabele
in PHP door het ontwerp begint met $ teken.
Er is geen meer X, Y, Z. Het is nu $ x, $ y, $ Z gewoon omdat.
Het is iets om in gedachten te houden, en nu op de rechterkant
Dit lijkt op een array,
maar we zijn door vierkante haken hier.
In PHP en in JavaScript, zoals we zullen uiteindelijk zien,
aan een array doe je open plein beugel en gesloten vierkante haken te verklaren,
en dan heb je een door komma's gescheiden lijst van waarden, of ints
of strings of karakters, wat je wilt, de binnenkant van die uitdrukking daar.
>> Nu, hoe we iets doen als dit in C?
Wat was de syntaxis voor statisch verklaren een scala van bekende nummers?
Het was accolades, dus klein verschil hier, maar in beide PHP
en uiteindelijk JavaScript hij gebruikt gewoon vierkante haakjes, dus echt
de enige interessant detail is hier de $ teken voor de naam van de variabele
en ook de vierkante haakjes, en er is een merkwaardig
die is ook weggelaten op de linkerkant van het = teken.
Wat ontbreekt, dat we al die nu voor weken? Ja.
[Onverstaanbaar student reactie]
De omvang, zodat er geen vermelding van de grootte van de matrix.
Eerlijk gezegd, er is geen melding gemaakt van vierkante haakjes aan de linkerkant
van het =-teken, en wat er nog meer ontbreekt in de lijn?
Ja. >> [Onverstaanbaar student reactie]
Het type, dus wat is interessant in het bijzonder over PHP
is dat het niet een sterk getypeerde taal C,
en dat is strongly typed in de zin dat je moet char zeggen,
je moet int zeggen, moet je zeggen vlotter.
>> Wanneer je maar wilt een variabele moet je Clang vertellen wat het type is.
PHP is een beetje luier.
Het is losjes getypt in de zin dat
kunt u praalwagens en chars en strijkers
en ints enzovoort, maar de taal zelf
niet kan schelen wat je de binnenkant van een variabele.
Je hoeft niet te informeren op voorhand wat gegevenstype
gaat in een variabele.
Het is helemaal aan jou, dus dit is leuk
in dat je niet zo veel zorgen te maken over gegevens te typen
en zorgen te maken wat uw argumenten zijn, enzovoort.
Dit betekent uiteindelijk ook functies in PHP gaan om te kunnen terugkeren
ofwel een int meestal, en misschien af ​​en toe
zullen ze terugkeren van een bool, een boolean false, bijvoorbeeld om aan te geven dat er iets fout is gegaan.
Dit geeft ons een aantal positieve kanten, maar het zal ook ons ​​soort te maken door het ontwerp
wat luier als het gaat om gegevensinvoer.
>> Wat is er hier te houden in gedachten?
Variabelen ziet er heel leuk dit, dus $ s = "hello, world".
Dat is misschien wel consequenties van het vorige voorbeeld,
en we hebben een ander type lus.
Deze zullen we echt een keer zien in een tijdje geleden dat het is heel handig,
een foreach construct.
In dit geval is de foreach lus neemt binnen de haakjes van 3 woorden typisch
$ Eerst iets, dat is wat serie wil je itereren over de leden van,
dan letterlijk het zoekwoord als, en dan ten slotte,
een andere variabele naam die u krijgt om te kiezen.
Het kan foo, bar of element,
en wat dit construct doet
is als de $ array bevat 10 elementen
op elke iteratie van deze array-me, op elke iteratie van deze lus
het variabele genoemd element zal worden bijgewerkt
het eerste element in de array, de tweede element in de array,
vervolgens het derde element van de array, waardoor overbodig
om de een beetje vervelend vierkante haakjesnotering doen en
$ I teneinde index in een array.
PHP doet al dat werk voor u en op elke iteratie
net geeft je het volgende element uit de array
zonder dat u hoeft te weten over of over de numerieke index locatie schelen.
>> En dan tot slot, voor nu, er is een andere eigenschap van PHP
dat gaat worden enorm nuttig, vooral wanneer we beginnen met programmeren op het web,
en dat bekend staat als een associatieve array.
De arrays die wij kennen tot nu toe vanaf 20 seconden geleden
en voor de afgelopen 8 weken zijn numeriek geindexeerde arrays,
soort van traditionele arrays waar de indices ints,
0, 1, 2, helemaal naar boven.
Associatieve arrays zijn een stuk krachtiger.
Hiermee kunt u willekeurige sleutels te hebben,
willekeurige indices en willekeurige waarden.
Dat in een traditioneel stelsel is 0, 1, 2,
in een associatieve array kunt u een index
of een sleutel van foo waarvan de waarde bar.
U kunt dan een andere toets waarvan de naam is baz en waarvan de waarde is QHx.
>> Nogmaals, stomme informatica generieke variabele namen hier,
maar het punt is dat deze array niet hoeft beugel 0 of beugel 1.
Het is in plaats daarvan gaat beugel foo en beugel baz hebben.
Dit is een stuk veelzijdiger in dat we gaan om te kunnen associëren
woorden met andere woorden toetsen met waarden volledig willekeurig,
en we gaan in staat om terug te krijgen die waarden in constante tijd
omdat onder de kap wat een associatieve array
echt een hash-tabel.
Bedenk dat een hash tabel kun je zetten in een aantal invoer
zoals gesteld in het woord David als je wilt David in te voegen in een soort woordenboek,
en dan krijg je weer een bepaalde waarde typisch.
In het geval van speller, waar of onwaar.
David of wat woord of niet in het woordenboek.
Een associatieve array is eigenlijk gewoon een hash-tabel,
maar het is een veel gebruikersvriendelijker incarnatie van het.
Zoals we zullen zien, het gaat om ons in staat om een ​​aantal dingen te doen
heel, heel gemakkelijk.
>> Laten we eens een kijkje nemen op een aantal fundamentele PHP
voorbeelden en zien wat we kunnen doen met deze taal.
Laat me gaan en open te stellen in onze source directory vandaag
een bestand met de naam hello1.php.
Dit bestand is meer commentaar dan het is eigenlijke code,
dus laat me eigenlijk alle opmerkingen te verwijderen uit het bestand
en aanwezig om u misschien wel de eenvoudigste PHP-programma hier.
5 lijnen en een aantal daarvan zijn witruimte
dus even opmerken enkele belangrijke verschillen.
Het bestand heet hello1.php.
De eerste regel is echter <? Php.
In dezelfde geest naar HTML,
die reeks tekens vertelt de computer
"He, computer, hier komt een programma dat we in in PHP."
Het zorgt ervoor dat het niet verward dat het een andere taal.
Lijn 2 is een interessante witte ruimte.
Lijn 3 is onze oude vriend printf,
dit keer in het kader van PHP.
PHP heeft zijn eigen versie van printf die precies hetzelfde gedraagt,
dus dit is gewoon om af te drukken "hello, world".
En dan is dit tegenover tag hier?>, Betekent dat het voor mijn PHP-code.
>> Laten we eens kijken hoe dit uit te voeren.
Ik ga om terug te gaan naar mijn terminal venster.
Ik ga om te gaan in mijn PHP directory.
Merk op dat we een hele hoop bestanden, de eerste daarvan is hello.php hebben.
Laat me ga je gang en het uitvoeren van deze, hello1.php, in te voeren.
Toestemming geweigerd. Oke.
Hoe hebben we vastgelegd dit soort dingen in het verleden?
Wat is dat? >> [Onverstaanbaar student reactie]
We moeten lezen en schrijven, maar laat mij ls-l.
Onthoud deze enigszins cryptische uitgang waarbij hello1
lijkt lees-en schrijfbaar zijn door mij
maar leesbaar voor iedereen.
Het blijkt dat dit eigenlijk geen stap in de goede richting.
Het verschil weer met een geïnterpreteerde taal
wordt u niet direct het programma uitvoert.
Je in plaats daarvan een tolk en geef het de code
die u hebt geschreven zodat het kan interpreteren regel voor regel.
In dit geval is de tolk of programma dat ik eigenlijk wilt uitvoeren
wordt letterlijk genoemd PHP.
>> Ergens op deze harde schijf van het apparaat is er een programma
iemand anders schreef, heet PHP, of op Windows php.exe.
Wat ik ga hier moet doen is ga ik eigenlijk PHP
maar geef het als een command line argument van de code die ik heb geschreven,
en dan zal ik uit te zoomen en druk op enter.
Het loopt mijn programma voor mij, van boven naar beneden, van links naar rechts.
Laat me ga je gang en opent een klein verschil van.
In hello2.php merken dat dit ook
is meestal opmerkingen, dus laat me te ontdoen van die als afleiding,
en wat is er duidelijk anders nu over dit bestand?
Er is een nieuwe lijn, enigszins cryptisch aan de top.
In regel 1 is het #! / Bin / php.
Bin is een conventie over Linux en Mac OS voor binaries,
dus / bin betekent dat het een map met een bos van binaire bestanden
die geprogrammeerd, waarvan een PHP.
De #! is de bijnaam keet,
dat is de snelle manier om te zeggen, en wat dit betekent
is dat wanneer je dit programma nu uitvoeren is er een hint aan de top van het bestand
dat vertelt de computer wat tolk te gebruiken.
>> Het wordt een beetje vervelend als je aan uw gebruikers en uw klanten te vertellen
"He, we schreven dit programma genaamd hello1.php."
Het enige wat je hoeft te doen is altijd PHP en vervolgens de naam van dit programma.
Eerlijk gezegd, zou het gewoon leuker om hello1.php lopen,
en inderdaad, we kunnen als we het volgende doen.
Laat me ga je gang en doe ls-l, en mededeling in hello2 het is nog net lezen en schrijven
en lees dan lezen, dus ik kan nog niet doen, hello2.php.
Maar we introduceerde dit ooit zo kort vorige keer, het chmod commando.
Als ik chmod a + x, waarbij alle plus uitvoerbaarheid betekent,
en dan hello2.php en kies dan ls-l weer zien wat er veranderd is.
One, is Linux laat me de bestandsnaam in het groen aan het idee over te brengen
dat het een uitvoerbaar bestand, maar nog belangrijker, aan de linkerkant
merken dat de bit die x voor uitvoerbare nu is ingesteld.
Wat dit nu betekent is dat ik kan ./hello2.php lopen zoals gebruikelijk,
druk op enter, en als gevolg van de keet aan het begin van het bestand
dat is een hint, nogmaals, aan Linux dat zegt
Gebruik deze tolk om dit bestand uit te voeren.
Maak je geen zorgen over dat de gebruiker daadwerkelijk te typen.
>> En wat is leuk nu is het is een soort van irrelevant voor mijn klanten of mijn vrienden
welke taal ik dit programma schreef in, dus ik kan gaan met mv
en hernoem dit ding te hello2, bijvoorbeeld.
En nu als ik dat doe ./hello2
en uit te zoomen mijn programma blijft draaien.
Deze bestandsextensies een menselijke conventie die nodig is
voor iets als Clang en Zorg die op zoek zijn voor hen.
Maar voor PHP, kon ik noem dit bestandsextensie wat ik wil.
Ik kon misleiden de wereld te laten denken dat ik ben erg goed in Ruby,
en ik kon schrijven hello2.rb en voer dit,
en voila, nu heb ik de Ruby versie, die is een complete leugen.
Maar de bestandsextensies zijn betekenisloos
als het bestand uitvoerbaar en heeft deze bijzondere wijzen op het begin van het bestand.
>> Nu, als een terzijde, laat ik je snel versie 3,
dat is een soort van een handige truc om te weten.
In hello3 Ik heb iets iets mis
dat ik het actualiseren van de broncode online.
In versie 3 blijkt dat op de meeste Linux-computers
Er is een programma genaamd env voor milieu,
en wat je hier kunt doen is als je geen idee waar PHP
is geïnstalleerd op de lokale harde schijf, omdat inderdaad kan variëren naargelang de computer
dat iemand gebruikt, env zegt alleen nog maar env,
dat is op de meeste systemen, en uitzoeken waar PHP is.
Gewoon een gemeenschappelijke truc, zodat je niet zorgen te maken over het vinden van waar een programma is.
Maar als je zorg om uit te vinden waar een programma is en je hebt tot nu toe niet verzorgd
kunt u gebruik maken van de die commando.
>> Laat me uit te zoomen en type dat php,
en merken dat zegt me dat het eigenlijk in usr / bin / php.
Het is een soort van een leugen. Het is ook in bin.
Het is gewoon je me de eerste hit.
Als je ooit afgevraagd waar Clang is, dat Clang, dat is in usr / bin / kletteren,
waardoor, usr / bin / maken, en wat dat betekent is al die tijd
je had kunnen typen usr / bin / clang in te voeren Clang lopen,
maar het is een soort van vervelend om dat te doen, dus sommige mappen
zoals usr / bin en bin worden verondersteld standaardwaarden
zodat de computer weet in te kijken voor je.
Hebt u vragen over het schrijven van een super, super eenvoudige Hello World programma
in PHP en dan draait het?
Want nu beginnen we om meer dwingende syntax in te voeren.
Oke, daar gaan we.
Deze programma's hebben we eigenlijk allemaal gezien.
>> Als ik open te stellen, bijvoorbeeld, laten we beer1.php te doen,
wij zullen niet gaan door verschillende versies van deze, maar wat ik heb gedaan
was Ik ging zitten en goot het of omgezet
mijn C-code om PHP code hier.
Meeste van de top van het bestand reacties hier.
Het blijkt dat er een nieuwe functie die we nodig hebben genoemd readline.
GetString, terugroepen, uit Week 0 verder was een CS50 ding.
PHP komt met zijn eigen gebruiksvriendelijke functie genaamd readline
dat duurt 1 argument dat de prompt specificeert
die u wilt laten zien aan de gebruiker, en wat readline doet
wordt het terug wat de gebruiker typt inch
In dit geval, ik ben verklaren van een variabele met de naam $ n.
Ik opslag in het de return waarde van readline
na dat de gebruiker met deze string.
Gewoon om een ​​back-up, om daadwerkelijk uitvoeren van dit ding, laat me gaan
en uit te voeren php beer1.php.
Hoeveel flessen zullen er zijn? Laten we gewoon doen 2 deze tijd.
Enter. Dat is alles.
>> Het programma is functioneel identiek aan de versie van C weken geleden.
Maar syntactisch laten we eens kijken wat er anders is.
Nadat ik krijg een int van de gebruiker merken dat ik wat foutcontrole te doen,
en als n kleiner is dan 1 ben ik gestopt en ik print
een droevig bericht naar de gebruiker en uitgang met 1.
Ook dit is een beetje anders.
In C wat hebben we gedaan? In C keerden we terug 1.
In PHP het verlaten van met 1, die eerlijk gezegd is denk ik een beetje meer intuïtief
omdat je letterlijk het verlaten van het programma.
Oke, en dan hier beneden de vervelende lied is identiek syntactisch
met uitzondering van de variabele, dus hier in lijn 24 verder
merkt mijn for-lus is bijna hetzelfde,
maar ik heb $ voor i en n,
en wat ook ontbreekt in lijn 26 die we hebben gehad in het verleden
Bij de aangifte van een variabele i?
Er is geen type.
Het is onjuist in PHP te zeggen int.
Je gewoon niet nodig om dat te doen.
De computer, de tolk PHP is slim genoeg om te beseffen
dat als je een nummer in $ Ik zal behandelen
als een nummer voor je.
En dan hier beneden hebben we plug-in $ i, $ i, $ i - 1.
Dat alles is hetzelfde, en dan naar beneden hier doen we een "Wow, dat is vervelend" printf
en sluit (0).
>> Nogmaals, de afhaalmaaltijden hier is dat, hoewel we gaan relatief te besteden
weinig tijd over PHP, zeker ten opzichte van wat we gedaan hebben op C,
het is bijna hetzelfde, en dus wat we doen vandaag en volgende week
en verder is aandacht echt op een aantal van de nieuwe ideeën.
Gewoon om te zien dat een ander ding doet meer dan vertalen van C,
dit was een super eenvoudig programma die we deden in week 1
of 2 die een waarde in blokjes.
Maar wat was interessant op het moment dat over dit programma is dat het
introduceerde het idee van een op maat geschreven functie die we zelf schreven.
De syntax in PHP is bijna hetzelfde.
Hier is mijn programma boven.
Let nog eens afwezig is elke notie van de belangrijkste.
Ik begin het schrijven van code, en dit is wat er aan de hand om aan de slag uitgevoerd door de tolk.
Print ik x is nu 2 vermoedelijk.
Dan eis ik cubing ...
Dan roep ik de kubus functie en pas in $ x
en wijs de return waarde van $ x.
Daarna heb ik beweren dat het is in blokjes, en dan zeg ik dit, die hopelijk
zal zeggen x is nu 8.
De syntaxis voor de functie in PHP is ooit zo iets anders.
Ook hier ontbreekt, is de return type.
Opnieuw ontbreekt is de return type en ook ontbreekt is wat andere type?
[Onverstaanbaar student reactie]
Nou, oke, dat is goed. Laten terugkomen in een tweede.
>> We hebben geen, bijvoorbeeld, hier int.
Geef bijvoorbeeld hier zijn int omdat weer in PHP
je gewoon niet nodig en zou het niet doen,
maar er is een nieuwe zoekwoord functietoetsen genoemd.
In PHP is het bijna een beetje duidelijker, want als je wilt dat een functie
je letterlijk functie zeggen, je geeft het een naam en dan een door komma's gescheiden lijst
indien een van hun argumenten.
Geen behoefte om nietige of iets dergelijks zeggen, en dan terug is hetzelfde,
$ A * $ a * $ a.
Wat ook ontbreekt? Sammy gewezen hier.
Bovenaan het bestand volledig afwezig in PHP ook een prototype.
Ook dit is door het ontwerp.
Talen en tolken zoals PHP zijn slimmer dan C ooit was
in compilers zoals Clang.
>> Bedenk dat Clang, als je niet vertellen dat kubus bestaat,
als je niet vertellen dat printf bestaat als met een prototype
of met een # include, goed, het zou te schreeuwen naar je en niet eens compileren uw code.
PHP en meer moderne talen zijn een stuk slimmer als het gaat om dit.
Zij zullen het op zich om te lezen door al uw code
en dan schreeuwen tegen je alleen, indien hij vaststelt kubus nergens.
Het maakt niet uit of kubus is aan de onderkant of de bovenkant of zelfs in sommige apart bestand.
PHP en soortgelijke talen zijn nu slim genoeg om vooruit te kijken
naar alles alvorens haar u te hebben een fout gemaakt.
Wat betekent dat voor ons?
>> Laten we een laatste voorbeeld hier in omstandigheden,
en als ik open conditions2.php bericht te
syntaxis is bijna hetzelfde.
Ik gebruik readline in plaats van GetString, maar die lijn is hetzelfde als voorheen,
"Ik zou graag een geheel getal te behagen."
Vervolgens heb ik heb een if-conditie, een else if, en dan een ander,
maar functioneel is dit programma ook identiek aan wat we deden weken geleden,
dus als ik zonder dit ding, php van conditions2,
en ik geef het een nummer als 23 -
Ik pakte een positief getal. Als ik er -1 Ik pakte een negatief getal.
Als ik geef het 0 ik inderdaad geplukt 0.
Dus who cares over dit alles?
Nou, een van de leuke soort oefeningen hier
voor mij althans was om terug te gaan en hoe snel ik kon PSET 5 ten zien,
de spelfouten PSET.
Bedenk dat er was een bestand met de naam speller.c,
en er was een bestand met de naam dictionary.c.
Wat ik deed was ik soort van bracht een paar minuten en ik zette de C-code
PHP-code, en we zullen niet veel tijd te besteden aan speller
want net als in PSET 5 je niet echt nodig hebt om
besteden veel tijd aan speller zelf, omdat je aandacht was op woordenboek.
>> Het volstaat om te zeggen dat als je doorleest speller,
dit bestand hier, het is vrij veel gelijk aan de C-code
gaven we u voor PSET 5.
Ik heb net nog wat $ plaatsen.
Ik ben veranderd bepaalde functie namen als ze niet bestaan ​​in PHP.
Er is een extra ding hier, preg_match,
dat is een beetje liefhebber manier om iets te doen, maar we zullen terugkomen om die uiteindelijk.
Maar in het kort, speller is bijna identiek, en als je kijkt naar de bodem
wat het uiteindelijk spuugt is dit hier,
woorden verkeerd gespeld, woorden in het woordenboek, woorden in een tekst.
Oke, dus wat is interessant nu is het volgende.
Op de top van mijn dossier ben ik die dictionary.php.
Net zoals C heeft # include PHP heeft een speciale functie genaamd nodig
dat vrij veel het zelfde ding doet, vereisen een bestand met de naam dictionary.php.
Hoe kan ik gaan over de uitvoering PSET 5?
Laat me verder gaan en het openen van een bestand.
Laat mij hier een weinig referentie.
En laat me maak een nieuw bestand en start het aanroepen van deze dictionary.php.
Laat ik het in een andere map, zodat we dit kunnen doen leven.
En nu zal ik zoomen
Ik ga mijn PHP-bestand te beginnen met open beugel php gesloten beugel.
En dan hier waren er een paar functies die ik nodig had om te implementeren voor PSET 5,
dus laat ik beginnen met de uitvoering een aantal van deze,
dus functiecontrole, die moest een woord in als argument te nemen.
We doen dat en komen terug om het in een moment.
>> Er was functie lading, die in wat er als een argument?
Woordenboek, zodat het bestand dat ik eigenlijk wilde laden.
Er was functie grootte, die geen rekening argumenten
en er was functie-wat was de andere?
Unload, die geen enkele argumenten ofwel nemen.
Dit zijn de 4 functies die ik nodig zou hebben om nu te implementeren in PHP,
en wat ik ga doen is door te gaan en dit doen.
Veel van jullie gebruikt een hash tabel in PSET 5,
dus laat me ga je gang en maak een hash-tabel in PHP.
Gereed.
Dat geeft mij een hash-tabel. Nou ja, waarom?
One, wordt de variabele genaamd $ table, gewoon op te roepen het idee van een hash-tabel.
De vierkante haakjes, echter herinneren, vertegenwoordigen wat?
Een array, maar in PHP arrays niet numeriek worden geïndexeerd.
Ze kunnen ook associatieve arrays,
wat betekent dat je kan hebben willekeurige sleutels en waarden.
>> Heel erg zoals in PSET 5, diegenen van jullie die wel hash table implementaties
je waarschijnlijk geplaatst het woord en vervolgens ingebracht het in een keten van gekoppelde lijsten,
of als u de opgeslagen waarde true ergens of iets van die strekking.
U een of andere manier herinnerde het feit dat het woord was.
Voor nu, dat gaat mijn hash-tabel is,
en dus nu om te gaan over de uitvoering van de controle-functie
Ik moet naar binnen te kijken van die hash-tabel
en zien of een woord is er.
Wat ik ga doen is dat ik ga zeggen als-
laten we zeggen isset, dat is een PHP-functie die letterlijk betekent is de sleutel set,
dus isset ($ table [$ woord],
en zo ja, return true.
Dat is het. Dat is PSET 5 in PHP.
Nou ja, in alle eerlijkheid, oke.
Else valse terug, dus het is er niet.
Wat is er werkelijk aan de hand hier?
Nou, als tafel-of hash-tabel hier meer in het algemeen-
is een associatieve array dat betekent dat je kan indexeren erin
met een woord als 'woord', en je hebt terug te krijgen een bepaalde waarde.
>> We zijn soort op het krijgen van een stap voor onszelf.
Het zou wel leuk zijn als we daadwerkelijk geladen het bestand eerst,
dus belasting is niet zo eenvoudig, maar laat me ga je gang en zweep
echt een snelle implementatie van de belasting.
Laat me ga je gang en zeg woorden krijgt bestand woordenboek.
Het bestand functie in PHP een bestand wordt geopend
en keert terug naar je een array van alle woorden in dat bestand,
gewoon overhandigt ze aan u.
Dat was een grote pijn ook, was het niet?
Nu foreach, dit is onze nieuwe construct, foreach ($ woorden als $ woord).
Deze lus gaat beginnen itereren over de array woorden
en toe te wijzen aan de $ woord variabele elk woord in het bestand
van de eerste naar de tweede naar de derde naar de vierde helemaal
dus ik hoef niet de vervelende [i] notatie te doen en dergelijke.
En wat ik gewoon gaan doen voor elk van deze woorden
is het op te slaan in mijn tabel door indexering in tabel
en vervolgens doen waar, omdat te onthouden
dat een woord in mijn woordenboek alles wat ik echt moet doen
is een soort van flip een beetje en zeggen dat dit woord in mijn hash-tabel is er, waar.
En als het er niet is, hoef ik niet te expliciet zetten valse,
anders zou ik moeten valse opgemaakt voor alle mogelijke woorden in het universum.
>> Het volstaat voor mij alleen maar om te stellen een indexwaarde
op true wanneer een woord eigenlijk in mijn hash tabel.
Nu, ik ben het snijden van een paar bochten hier dat ik mijn handen zwaaien voor nu,
maar nu de belading wordt uitgevoerd.
Ik laad alle woorden uit het bestand in een array.
I itereren over die array en voor elk woord in de reeks
Ik sluit hem aan op mijn hash tabel met 1 regel code.
Dit is leuk. Je weet hoe we kunnen grootte nu te implementeren?
Nou, de grootte is altijd vrij eenvoudig, in alle eerlijkheid.
Hier kunnen we gewoon terugkeren telling van tafel.
Ook dat is vrij makkelijk, tel het aantal van de dingen in de tabel.
Dat is eigenlijk wel niet de meest efficiënte.
Ik zou waarschijnlijk een variabele genaamd formaat, zodat we kunnen doen
in constante tijd, maar dat is vrij eenvoudig.
Oh, en dan lossen, als we echt willen om hier te zijn anale
kunnen we zeggen dat is hoe je iets lossen.
U hoeft alleen de variabele gelijk is aan een lege array,
en het wordt ontdoen van alles wat er was.
Geen behoefte om te bellen gratis.
>> Nogmaals, ik heb geknipt sommige bochten, en ik verontschuldig me voor het toekennen probleem set 5
misschien in C, maar als we nu verder gaan en het uitvoeren van deze,
Ik ga eigenlijk draaien de versie die ik schreef op voorhand
gewoon zo dat ik geen syntactische fouten dan ook te maken.
Laat me ga je gang en lopen speller. Het gebruik is hetzelfde.
Hier is een woordenboek bestand die net bevat het woord foo.
Hier is een tekstbestand dat net bevat foo bar.
Laten we spellingcontrole dit, dus speller, met behulp van dit woordenboek bestand op dit tekstbestand.
Er is een verkeerd gespeld woord, een bar, en voila.
Gedaan met PSET 5.
Laten we hier eens 5-minuten pauze, en we komen terug en nog veel meer komen op PHP.
Goed, we zijn weer terug.
Laten we mij doe-haat voor een tijdje.
Laten we nu eigenlijk zien of was dit niet een positief
het daadwerkelijk implementeren van dit ding in PHP.
Toegegeven, het duurde 45 seconden om te implementeren.
>> Maar laten we nu verder gaan en lopen dingen.
Laat me ga je gang en uitvoeren van een C-versie
van speller, en wij zullen het draaien op een van de grootste bestanden,
dat is de King James Bijbel.
En dat is hier in-laten we gaan in onze C map,
speller op King James de 5e.
Een groot deel van verkeerd gespelde woorden.
Oke, dus dat is de uitgang die u waarschijnlijk hebt, zelfs als de tijden zijn een beetje anders,
Als je alles goed werkt, en dus tijd in totaal spellingcontrole
de King James Bijbel was 0,38 seconde, dus vrij goed met behulp van dat de uitvoering.
Laat me nu gaan in de PHP-versie, die net schreven we.
Laat me lopen speller op King James.
Oeps, negeer die fout. Ik ben in de verkeerde map.
Speller op King James de 5e.
Bijna klaar.
>> Oke, de scherpzinnige waarnemer zich realiseren dat was meer dan 3 seconden daar.
Dat is de ware looptijd.
Het blijkt dat het tijd kost om veel tekst uitspuugt
als gevolg van buffering problemen, maar lang verhaal kort,
dat was 3,15 seconde van de machine de tijd, CPU-tijd,
ten opzichte van wat was het een moment geleden?
Net als 0.3.
Ik bedoel, het is een orde van grootte trager, dus waar is dat
belachelijk vertraging vandaan?
Nou, zoals al het geval is met de meeste elk ontwerp beslissing die we hebben gemaakt
in de klas over de afgelopen 9 weken is er bijna altijd deze afweging.
Soms tussen gewoon ruimte, soms tussen ruimte en tijd,
ruimte, tijd en ontwikkelingsinspanningen, en ook hier, hoewel
we bespaarden enorm veel tijd, misschien potentieel 10-20-30 uur
ontwikkelingstijd uitvoering van de spellingcontrole
door zweepslagen het op in slechts 45 seconden met deze taal
de prijs die we betalen is dat het een orde van grootte lager als gevolg daarvan,
en dit is meestal het geval met vrijwel elke geïnterpreteerde taal,
PHP, Python, Ruby, Pearl of anderen, waarbij
als je gaat om het uit te voeren door middel van een tolk en laat het lezen van uw code
regel voor regel van boven naar beneden, van links naar rechts,
dat tussenpersoon gaat enige tijd van zijn eigen te nemen,
en wat je hier het gevoel in de 3 seconden, in tegenstelling tot 0,3 seconden
is het feit dat er deze tussenpersoon die moet letterlijk interpreteren onze code
regel voor regel, en God verhoede als je de binnenkant van een lus
met een groot bestand met honderden duizenden woorden.
>> Dat overhead gaat optellen en optellen en optellen en optellen.
Voor een hulpmiddel als dit het is waarschijnlijk niet de beste taal om te gebruiken voor de uitvoering van
een spellingcontrole als directheid is van belang voor uw gebruikers en voor jou.
Maar de luxe die we hebben in een moment is als je
gebruik maken van een taal zoals PHP of veel geïnterpreteerde talen
in het kader van het web, wat dat betreft, heb je het voordeel
dat het internet is een stuk langzamer dan de meeste computers.
Je hebt een GHz CPU in uw computer, 2 GHz, misschien zelfs meer van deze dagen.
Maar de realiteit is op het internet is er een grote hoeveelheid latency
waarbij voor een browser om te praten met een server, ook al zagen we vorige week
dat dat is vrij snel, een halve milliseconde of zo,
dat voegt ook omhoog, en als je aan het downloaden bent dingen als een afbeelding
of een Facebook-foto of het krijgen van instant messages via Facebook chatter,
Gchat of iets dergelijks, al deze round trip-tijd
tussen de browser en de server beginnen te kloppen,
waardoor uw specifieke keuze van de taal in veel gevallen
niet zo relevant is, dus je bent in orde met behulp van een iets trager taal
zoals PHP of Python of Ruby
maar waarvoor er enorme positieve kanten aan u en uw collega's
en je vrienden, want je kunt implementeren dingen zo, zo veel sneller.
En bovendien, je hebt veel minder kans op bepaalde beveiligingslekken.
Er is geen pointers in PHP.
Er is geen seg fouten die je gemakkelijk kunt bewegen
op dezelfde manier kon je in C.
Met C ben je super dicht bij de hardware.
Met PHP en soortgelijke talen je bent soort van hoger niveau, om zo te zeggen,
met veel verdedigingswerken tussen u en wat er eigenlijk aan de hand
in de machine, en het is gewoon een afweging.
>> We hebben gekregen tot het punt van het hebben van deze moderne, hoog niveau talen
zoals PHP als gevolg van de lessen die zijn geleerd in talen als PHP in C.
Maar als je niet begrijpt wat er aan de hand onder de kap al die tijd
Je kan zeker niet de juiste ontwerpbeslissingen,
en zeker als het gaat om het werken op een plek als Facebook of Google
of een van deze plaatsen die in toenemende mate spelen met grote datasets
zelfs als u terug te gaan en hebben PREMED en werken samen met een aantal MD
op sommige grote data set met patiënten en artsen
en dergelijke met behulp van de juiste tools is enorm meeslepend
omdat anders uw analyse van een aantal dataset zou kunnen nemen seconden,
of het kan letterlijk uren duren.
Dit is slechts een voorbeeld, niet om u te frustreren met hoeveel meer inspanning
het was in C, maar om u te helpen begrijpen dat als je iets in C te implementeren
je echt begrijpt, of in theorie, echt begrijpen
hoe alles is of zou moeten werken, en je hebt bijna volledige controle
over wat er aan de hand onder de kap, en met deze hogere talen
moet je meer controle te geven aan de mensen die het bedacht ze
en zijn onderhevig meer om hun ontwerpbeslissingen dan de jouwe.
Maar als we voor lief nemen dat de prestaties
is niet zo belangrijk op het web als gevolg van deze andere kwesties,
net-netwerk snelheden zijn een beetje trager dan CPU snelheden toch,
dus we kunnen sorteren van veroorloven om een ​​iets trager taal te gebruiken
indien de upsides zijn wij dingen kunnen ontwikkelen 10 keer sneller of zelfs meer.
>> Laten we eens kijken hoe we kunnen beginnen met deze.
Laat me gaan in een map
onder de voorbeelden van vandaag genoemd frosh.ims,
en dit was eigenlijk persoonlijk ingegeven door het feit dat het allereerste wat
Ik schreef voor het web jaar geleden na het nemen van CS50 en CS51
was een website voor het Frosh IMS-programma, eerstejaars intramurale sport,
die op dat moment was dat voldoende jaar geleden dat ten tijde
was er geen website voor het programma, ook al was er een Web,
en in plaats daarvan was er een surveillant in Wigglesworth, waarbij als je wilde
in te schrijven voor volleybal of voetbal of wat je zou invullen van een stuk papier.
Je zou dan lopen over het erf.
Je zou dan kloppen op hun deur en schuif in de deur of hand aan de surveillant
een stuk papier met je naam erop, of u wilt een team captain te zijn,
welke sport je wilde doen, en wat dorm je was binnen
Het was een soort van een oude school manier van doen, en dit was een uitstekende
mogelijkheid om veel van dit proces te automatiseren.
Je moet gewoon naar de website. U typt iets in
Je krijgt een e-mail bevestiging en giek, je bent klaar.
>> Dit was het allereerste wat ik deed, zij het in een taal genaamd Pearl,
maar het is relatief eenvoudig om te doen in PHP, en dit is een soort van representatieve
van de problemen die u kunt beginnen met het oplossen als je kunt jezelf uitdrukken
programmatisch en hoeven niet te vertrouwen op zaken als Google-sites
of Excel of gereedschappen die worden overhandigd aan u.
Jullie hebben nu de mogelijkheid om dingen te doen als dit.
Dit is een super lelijke versie van een formulier,
maar laten we gewoon gebruik maken van het voor het begin van het gesprek waarbij deze is
ongeveer wat de vorm leek jaren geleden voor ons
om mensen in staat op het web aan te melden voor Frosh IM.
We vroegen voor een naam, een selectievakje voor al dan niet wilde zijn kapitein,
man of vrouw, en wat slaapzaal waren ze in,
en dan zouden ze dit formulier.
Laten we eerst eens kijken onder de motorkap op de HTML die deze webpagina vertegenwoordigt.
Laat me gaan in froshims0,
en als een terzijde, want PSET 7 Ik neem voor lief
de mappen en de mappen die ik dingen zetten binnen
We zullen u door precies waar spul moet gaan in het apparaat,
die mod commando's je moet rennen, dus maak je geen zorgen te maken over alle
dom gegevens synchroniseren in van de get-go hier.
>> Oke, hier is froshims0.php.
Laat me naar beneden scrollen, en wat is nieuwsgierig hier,
dit is een PHP-bestand, maar wat er in het, duidelijk?
Het is een heleboel van HTML, en inderdaad, PHP, waarvan de oorsprong
waren echt voor het zijn een web-centric taal.
Een moment geleden hebben we gebruikt om het bier voorbeeld te implementeren,
de voorwaarden bijvoorbeeld de hallo voorbeeld, en dat is prima.
U kunt gebruik maken van PHP als scripting taal
waar een script is eigenlijk gewoon de nomenclatuur gegeven aan een snelle en vuile programma
of iets dat je schrijft in een script of meer in het algemeen een geïnterpreteerde taal.
PHP is super handig voor dat, omdat je hebt gezien hoe snel
relatief kunnen we zweep programma's in PHP.
Maar het was echt ontworpen om te worden gebruikt voor het web,
en ontworpen voor het web in de zin dat merkt hier aan de top van het bestand
Ik begin met <? Php.
Dan heb ik een hoop nutteloze opmerkingen, verleend, maar dan sluit ik PHP-modus.
Maar dan moet ik laten vallen in de HTML-modus.
>> Wat is er interessant aan PHP is ook al is het bestand eindigt op. Php
het is over het algemeen bedoeld om te worden samengevoegd met HTML,
sommige PHP-code, een aantal HTML.
En we zullen uiteindelijk zien dat we kunnen beginnen met die uit elkaar te plagen
en onze HTML gescheiden helemaal te houden van onze PHP,
maar de oorsprong van PHP waren echt om u deze flexibiliteit,
dat als je wilt een aantal HTML gewoon schrijven, en dat zal
identiek spuwde naar de browser.
Maar als je wat programmeertechniek,
wat programmeerwerk code, kunt u ook zet het in dezelfde exacte bestandsnaam, zoals we zullen snel te zien.
Hier is mijn HTML.
Ik heb een titel van dit voor Frosh IM.
Ik heb een body-tag die een aantal CSS op het kreeg om naar het midden alles in het midden,
en dan naar beneden hier Ik heb een formulier die blijkbaar zal worden ingediend
om een ​​nieuw bestand met de naam register0.php, dus we zullen zien dat in een moment.
Het is met behulp van een methode genaamd post, die we zullen terug aan zo goed.
Dan heb ik een of andere vorm ingangen, een zogenaamde naam, waarvan het type is tekst,
Degene wiens naam is kapitein, waarvan het type is checkbox,
en dit hebben we niet eerder gezien, maar het doet precies wat het zegt.
U krijgt een checkbox in plaats van een tekstvak.
Hier onder heb je een keuzerondje, dat is een van die ronde knoppen
dat u kunt kiezen dit of dat is.
>> Let op het bewuste is dat ik gaf beide keuzerondjes de naam van geslacht.
Dit is hoe je wederzijdse uitsluiting, waarbij je moet klikken krijgt
ofwel deze of dat een, en door te klikken op de andere
Het unchecks de andere, dus je moet hen dezelfde naam
Als je wilt dat ze elkaar uitsluiten als dat.
En dan voor dorm, ik denk niet dat we dit nog niet gezien, maar het is een select menu, een drop-down menu.
De tag voor deze is geselecteerd.
Vervolgens geeft het drop-down menu een naam,
en dan heb je een hele hoop van deze opties.
De eerste, alleen voor esthetiek, is een lege tekenreeks.
Ik wilde gewoon de drop down te leeg zijn standaard,
en dan is er Apley, Canaday, Grays, enzovoort.
En hier ziet de dichotomie.
De optie in het drop heeft beneden een waarde,
maar het heeft een mensvriendelijke naam, die in dit voorbeeld
is identiek, maar als we echt wilden zijn anale we konden
de waarde van deze drop down gewoon de korte versie,
Grays, maar we konden echt zeggen Grays Hall dat de menselijke werkelijkheid ziet,
maar dat is niet zo interessant, dus ik hield het simpel en maakte ze identiek.
Dan naar beneden op de bodem hebben we een submit knop
die we eerder hebben gezien, maar merk dat ik gaf het gewoon een ander woord.
In plaats van CS50 zoeken gaf ik het label "Registreer".
>> Het eindresultaat is deze webpagina hier, en opnieuw,
waar komt dit krijgt voorgelegd aan?
Het wordt onderworpen aan een bestand, de waarde van de actie kenmerk,
was register0.php.
Laten we eens kijken wat er werkelijk hier gebeurt.
Laat me ga je gang en vul dit formulier in, laten we zeggen David,
mannelijke, Matthews, en dan zal ik zeggen registreren.
Laat me uit te zoomen en klik op registreren.
Oke, dus soort van nutteloos, maar laten we eens kijken wat er eigenlijk aan de hand.
Merk op dat de URL is veranderd te zijn register0.php.
Wat is merkwaardig afwezig in de URL, hoewel, ook al hebben we gewoon een vorm ingediend?
[Onverstaanbaar student reactie]
Oke, dat is gewoon Chrome zijn gebruiksvriendelijk deze dagen.
Dat is eigenlijk daar. Ze verbergen om ruimte te besparen.
Maar goede gedachte, goede gedachte.
Tegen het andere einde van de URL, hoewel, wat is wat? Ja.
[Student] De query string.
De query string, dus herinneren van onze eenvoudige Google-zoekopdracht voorbeelden.
Zodra ik op de submit knop de URL
nam me mee naar Google, maar toen was er? q = informatica of wat dan ook ik had getypt inch
Dat komt omdat we de get methode met de zoektocht voorbeeld.
>> Deze keer gebruiken we welke methode in plaats daarvan?
Bericht, en een van de onmiddellijke onderscheidingen
tussen GET en POST is die post zet geen invoer van de gebruiker in de URL.
Het verbergt het. Het stuurt het nog steeds.
In feite, wat we nu zien in de browser hier, zoals we zullen zien in een ogenblik
door te kijken naar register0, is Ik ben gewoon het zien van de inhoud
van de array die werden ingediend via de browser naar de server.
Maar de URL niet een? Hebben, heeft geen zoekwoorden
of waarden in, en waarom is dat?
Nou, post kunt u alsnog de gegevens van het formulier naar een server,
maar het niet het in de URL, dus wat voor soort informatie is na
bijzonder geschikt voor misschien als je vraagt ​​de gebruiker om
typen input naar een formulier?
Zoiets als een wachtwoord, zoiets als wat anders?
Credit card nummers.
Alles wat is licht gevoelig je waarschijnlijk niet wilt eindigen in de URL
al was het maar omdat het betekent dat je kamergenoot of familielid kan gewoon trol door
uw internet geschiedenis en dan letterlijk zien uw wachtwoorden,
letterlijk zien uw credit card nummers, omdat de meeste browsers
herinneren in de geschiedenis welke URL's die u geweest bent op,
dus als het alleen maar omdat dat zou een slecht idee zijn.
Met behulp van bericht verbergt dat detail van de gebruiker.
>> Ook, hoe doe je een foto uploaden naar Facebook?
Nou ja, de enige 2 mechanismen kan je echt gebruik maken,
ook al is er een aantal andere, meer mysterieuze degenen, is te krijgen en te plaatsen.
Hoe is het mogelijk een foto uploaden via een URL?
Je kunt eigenlijk doen.
U kunt een JPEG-of bitmap of GIF en je kunt het vertegenwoordigen in hexadecimale
of iets genaamd base 64.
In plaats van basis 16 die u gebruikt basis 64, die in wezen lijkt
ASCII-tekens, en je kunt eigenlijk een foto uploaden via een URL
na een vraagteken, maar er zijn over het algemeen maximale afmetingen.
De meeste browsers dwingen URL's niet meer dan 1.000 tekens,
misschien 2.000 tekens of iets dergelijks, dus je kunt niet uploaden
een 10 MB Facebook foto.
Voor dat je bericht te gebruiken als goed, dus voor nu te zet de parameters in de URL,
dat is leuk en nuttig soms, maar voor alles wat gevoelig of grote
post is de weg te gaan.
Wat is register0 eigenlijk aan het doen hier?
Nou, als ik open register0 aankondiging dat dit een super eenvoudige pagina,
maar het is het aantonen van de feit dat ik naast elkaar kunnen mengen, ten goede of ten kwade,
HTML met PHP.
Dit hele bestand, met uitzondering van de opmerkingen aan de top, zijn HTML
behalve voor deze jongen hier.
>> Merk op dat in het midden van mijn PHP-code,
in het midden van mijn HTML, ik heb soort van tijdelijk
ingevoerde PHP-modus.
Ik bel een speciale functie genaamd afdrukken r.
Het betekent recursieve af te drukken, en wat het doet is het recursief wordt afgedrukt
wat variabele die u het met de hand, puntkomma, afrit PHP-modus.
En de pre tag geeft u voor-geformateerde tekst,
mono ruimte tekst, zodat elke ruimte je eigenlijk zien.
Het verdwijnt niet. Wat is post?
Wel, wat is interessant en boeiend over PHP
is dat wanneer u een formulier met behulp van GET of POST
iets dat is aan u die door een browser
PHP zelf cijfers wat die sleutel waarde paren,
cijfers als er gelijk tekenen, cijfers of er een vraagteken.
Het doet al het harde werk voor u, en dan geeft je een associatieve array
met alles wat de gebruiker heeft ingevoerd in het formulier.
Nou, deze vorm heeft wat velden?
>> Het had 4 velden.
Een daarvan was een tekstveld met de naam naam.
Een van hen was een checkbox genaamd kapitein.
Een daarvan was een keuzerondje genaamd geslacht,
en een was een drop-down menu met de naam dorm,
dus opvalt als ik afdrukken recursief
de inhoud van deze speciale variabele.
Dit is een speciale globale variabele genaamd letterlijk $ _POST, in hoofdletters.
Dit is een speciale globale variabele dat PHP alleen creëert voor jou
en handen aan u, zodat u kunt alles
De verzonden via een formulier door een gebruiker.
En door te bellen druk r op het-zou je niet doen in een normale toepassing.
We doen dit aan de binnenkant van deze variabele te zien,
en wat er in het, goed, 4 toetsen,
4 http parameters, om zo te zeggen,
naam, kapitein, geslacht, slaapzaal, en dan de waarden die de gebruiker
typen met een uitzondering.
Ik heb type D-A-V-I-D.
Ik controleerde de doos, echter, voor mannelijke, die blijkbaar een waarde ingediend
van slechts m te beknopt.
>> Toen ik Matthews gekozen, dat is de waarde die werd geselecteerd,
en dit is een beetje dom, maar het is de conventie.
Toen ik de doos, een waarde van over, gecontroleerd "op," werd ingediend voor het selectievakje.
Als ik niet had gecontroleerd, zou geen enkele waarde zijn verzonden.
Dit is alleen het geven van ons inzicht in wat er in deze speciale globale variabele,
en het is zo bijzonder dat het is wel een super globale variabele.
Het bestaat overal voor u in uw code, zodat je daadwerkelijk kunt openen.
Dit is niet zo dwingend, dus laten we eigenlijk de super wereldwijde gebruik
en eigenlijk proberen om iemand te registreren.
In froshims1 Ik ga een verandering te maken.
Ik verander de actie te zijn register1.php,
en ik doe een ander ding.
Ik was een beetje in verlegenheid gebracht door de kwaliteit van mijn webpagina daar.
Het is vrij afschuwelijk, eerlijk gezegd, zo blijkt
die u kunt heel gemakkelijk te gebruiken op het web
andere mensen JavaScript-code, andere mensen CSS
dat ze geschreven en open-source en beschikbaar gemaakt als een bibliotheek,
zo te zeggen, en bijvoorbeeld, hier ben ik met behulp van een vrij beschikbaar bibliotheek,
een bos van code die iemand anders heeft geschreven.
>> Twitter is er gebeurd met deze code te schrijven, en het heet de bootstrap bibliotheek,
en het is gewoon een stelletje van CSS stylesheets, een bos van. css-bestanden
dat iemand anders heeft geschreven en bedacht hoe om alles mooi en vrij
zodat mensen zoals wij kunnen een beetje minder zorgen te maken over esthetiek en de focus veel meer
de logica en de werkelijke programmering.
Door deze te koppelen met dat label, dat is hetzelfde label Ik herinner me gebruikt voor styles3.css eerder,
Ik heb nu toegang tot een bestand met de naam bootstrap.min.css.
Min betekent gewoon dat ze het minified en ze hebben gekregen ontdoen van alle witruimte enzovoort
gewoon om ervoor te zorgen dat ze niet sturen me meer bytes dan ik eigenlijk nodig hebben.
Maar daar is een gehele bos van CSS, dus als ik nu open versie 1 van Frosh IM
merken dat mijn dossier is zeker mooier.
Nu is het nog alleen zwart en wit, maar merken dat door gewoon met behulp van hun style sheet
en het gebruik van bepaalde functies van het op mijn formulier dat is niet geweldig,
maar het is zeker schoner dan het vroeger was, en de projector doet het niet rechtvaardigheid.
Er is weinig grijze lijnen rond de knoppen en rond het tekstveld hier,
maar het is zeker schoner dan voorheen.
>> Nu, in alle eerlijkheid, ik moet mijn opmaak een beetje veranderen.
Dit is versie 1, en merk dat ik een paar nieuwe tags gebruikt,
en eerlijk gezegd, ik had geen idee hoe dit te doen totdat ik lees de documentatie
voor bootstrap Twitter-bibliotheek, en ze vertelde me dat als je wilt onze bibliotheek te gebruiken
gebruik maken van een fieldset element in uw formulier,
zet het woord dat u wilt naast een veld binnenkant van een label label weer te geven,
Vervolgens geef je een naam invoeren, net als voorheen,
en vervolgens voor de checkbox, niet alleen wikkel het in een label element,
u gebruik maken van zoiets als een klasse, dus we hebben niet eerder gezien,
maar je zult zien in een van PSET 7's shorts.
Een klasse in CSS kunt u iets zeer vergelijkbaar met de ID,
maar toen we hadden een ID met de #-symbool
dat was voor een en slechts een element.
Wat is er leuk over een klasse is dat meerdere elementen kunnen hebben dezelfde klasse
of dezelfde CSS-dingen toegepast.
>> Maar nogmaals, is meer op die op de korte en de rest van deze gewoon kopiëren en plakken
van hun documentatie waar ik een label toegevoegd hier en daar.
En aan het eind, want ik heb onder meer de link tag aan de top,
alles ziet er mooier automatisch
door gewoon te hebben opgemaakt mijn pagina op een manier die
Twitter verwacht, en er zijn zoveel verschillende manieren
dit te doen, en dit is inderdaad zeer geschikt.
Op dit punt in het semester, zoals u zult zien in spec PSET 7's,
Googlen rond, het lezen op bibliotheken, met behulp van andere mensen CSS
en JavaScript om bijkomende problemen op te lossen
het probleem set zelf zeker gestimuleerd en is de manier
het web is gebouwd deze dagen, door op te staan ​​op andermans schouders
zodat je echt kunt richten op de nieuwe en interessante problemen.
Maar laten we ons nu richten op, opnieuw, de logica.
>> Dat was een snelle omweg op esthetiek alleen om te laten zien in welke richting je kunt gaan.
Ik ga terug naar de lelijker een voor nu, alleen maar omdat
er is geen afleiding met Twitter spul, en laat me gaan en open te stellen
froshims2, die weer,, verschilt alleen in de actie, register2.php,
en laten we een kijkje nemen op wat het effect is hier.
Laat me ga je gang en typ in David.
Ik zal niet kapitein deze keer.
Ik zeg man, Matthews, register.
Verdomme. Oke, dat is een schroef-up van mijn kant.
Stand-by.
Register2, lijn 22, als leeg of-me.
Laten we opnieuw te laden.
Oke, op dit formulier wat er net gebeurd?
Ik typte in David, gecontroleerd mannelijke, klikte Matthews, register.
U bent geregistreerd. (Nou ja, niet echt.)
Dit is duidelijk een stap verder dan alleen het afdrukken van de inhoud van sommige variabele,
maar wat is dit bestand eigenlijk aan het doen?
In register2.php
merk dat ik sommige nieuwe code te hebben.
Binnenkant van mijn lichaam tag heb ik in wezen een if anders te bouwen,
maar omdat ik co-mingling dit met enkele HTML
Ik moet in-en uitstappen PHP-modus heen en weer, dus laten we eens kijken wat ik doe.
>> In de eerste regel hier wat ik zeg als dit het geval is
dat de post super wereldwijde leeg is voor de sleutel van de naam,
dus met andere woorden, als de gebruiker niet geef me een waarde voor naam in de vorm,
dan leeg gaat om terug te keren waar, omdat de waarde leeg is.
Or-let op de verticale balken-of geslacht is leeg
binnenkant van deze speciale super global, die wederom geeft de inhoud van de vorm,
of de slaapzaal leeg is, dan ga ik om verder te gaan en op de gebruiker schreeuwen.
Hoe? Nou, let op ik ga zeggen moet u uw naam, geslacht, en slaapzaal bieden.
Laten we eigenlijk die fout veroorzaken.
Laat me terug naar mijn vorm. Laat me opnieuw om het te wissen.
En ik ga gewoon om hen David, en ze hoeven niet te weten waar ik woon.
Registreren. Blijkbaar heb ik hoef te vertellen waar ik woon.
U moet uw naam, geslacht en slaapzaal. Ga terug.
>> En ik kon klikken om terug te gaan naar die vorm, maar waarom is dat?
Nou, in dat geval naam was niet leeg, maar geslacht was, en slaapzaal was,
dus dit hele expressie geëvalueerd om waar te zijn, en ook al is de syntax is een beetje nieuw,
weer, gaan we PHP-modus, bekend als verklaring,
maar het nieuwe gedeelte is vaak precies deze dubbele punt, en ik had verknald door het weglaten van een haakje
per ongeluk, maar let op de dikke darm, en dat betekent
ook al zijn we het verlaten van PHP-modus alles
die volgt moet letterlijk worden spugen naar de browser
totdat u een ander blok te zien, zoals wij hier doen,
In dat geval moet u in plaats daarvan spugen dit uit
totdat u de endif zien, dus een iets nieuwe syntaxis
die me in staat stelt om te schakelen tussen HTML en PHP.
We kunnen dit opruimen uiteindelijk, maar voor nu,
het is een soort van een dwingende manier van foutcontrole het formulier.
>> Nu, ik zeg dat je echt niet geregistreerd want natuurlijk hebben we niets anders gedaan dan de gegevens,
dus laten we eigenlijk proberen om iets leuks te doen.
In froshims3 het enige verschil is dat ik ga te onderwerpen aan register3,
zodat de HTML is hetzelfde.
In register3 merken.
Deze is een soort van sexy.
Op de top ben ik een require statement gebruikt, dus dit is net als # include.
Deze keer is het niet stdio.h of iets dergelijks.
Het is een PHP bibliotheek, en deze heet PHPMailer.
Hoe wist ik precies deze tekenreeks tussen aanhalingstekens zijn?
Ik las het in de documentatie, dus toen vertelden ze me dit zet aan de bovenkant van het bestand
als je wilt een speciale bibliotheek genaamd PHPMailer dat doet wat het zegt te gebruiken.
Hiermee kunt u e-mail verzenden via PHP.
Laten we nu naar beneden scrollen verder.
>> Merk om te beginnen ben ik in PHP mode de hele tijd,
dus nu hier op te merken naar beneden na het importeren van die bibliotheek,
om zo te zeggen, ik ben een aantal sanity checks doen.
Als het het geval is die naam niet leeg is
en geslacht is niet leeg-merkt dat de uitroeptekens-
en dorm niet leeg is, dan is de gebruiker heeft logischerwijs het formulier ingevuld, in ieder geval genoeg.
Kan me niet schelen als ze kapitein of niet. Ik moet alleen hun naam, geslacht en slaapzaal.
Als ze hebben ingevuld die uit, zodat geen van deze velden zijn leeg
Dit is iets nieuwe syntax.
PHP, als een terzijde, is een object georiënteerde programmeertaal
die sommige van jullie misschien herinnert van APCS of iets dergelijks.
Voor nu, als onbekende, weet alleen dat deze bibliotheek gebruiken
moet je een regel code als volgt uit met een nieuw trefwoord te schrijven,
letterlijk een nieuw zoekwoord genaamd nieuw.
Maar buiten dat, hebben we een aantal bekende syntax.
Het is een pijl operator, die vergelijkbaar is met wat we gebruikt structs in de context van pointers.
Voor vandaag PHP heeft geen pointers,
maar weet voor nu dat de binnenkant van de e-mail variabele
is in wezen een soort pointer naar een speciale bibliotheek
dat iemand anders heeft geschreven, en als ik wil specifieke functionaliteit voor toegang
binnenkant van die bibliotheek ik, net als in C, gebruikt u de pijl-operator,
ook al is deze niet echt pointers.
Het is een soort van eigen versie van PHP daarvan.
Dit betekent dat je in de bibliotheek en bel de IsSMTP functie.
SMTP, terugroepen, uit onze Warriors of the Net verwijst e-mail naar,
en dat betekent gewoon gebruik maken van een e-mailserver voor deze Frosh IM registratie.
>> Wat gastheer wil ik gebruiken?
Nou, Harvard, als je op Google rond, heeft een e-mail server met de naam smtp.fas.harvard.edu.
Als je meespeelt thuis of je woont op een Comcast-netwerk
het zou iets als smtp.comcast.net zijn.
Het hangt helemaal af van waar je woont en wie je ISP is.
Daarna ga ik mijn set van adres willekeurig te zijn jharvard@cs50.net.
Ik vervolgens naar de op te pakken te zijn jharvard@cs50.net.
De enige manier waarop ik wist dat deze functies werden genoemd setFrom en AddAddress
is, nogmaals, ik lees de documentatie.
Dit is niet soort van magische wijze bekend aan alle programmeurs.
Dan stel ik een voorbehoud van "registratie".
En nu deze lijn is een beetje lelijk, want wat doet de puntoperator betekenen in PHP?
Iedereen weet?
Aaneenschakelen.
In C is het een pijn in de nek om samen samenvoegen 2 strings.
Je hebt te maken met malloc of realloc of al dat spul
alleen de lengte van een string te verlengen.
In PHP, in JavaScript en andere talen
U kunt dit meestal met een enkel karakter.
In dit geval, punt betekent hier nemen deze string
en toevoegen aan het op deze string.
>> Oh, en door de manier, toe te voegen aan het deze string,
die toevallig ook een variabele binnenkant van die super globaal.
Dan toevoegen aan het een nieuwe lijn, zodat al deze punten alleen maar betekenen
blijven maken van een groter en groter en groter string,
en je hoeft niet te allen zorg over malloc of iets dergelijks in een taal als deze,
en er zijn andere manieren om dit te doen, maar dit is een van de snelste
manieren om het lay-out.
Wat is dit nou?
Het is het creëren van een e-mail lichaam dat gaat Naam zeggen: Captain: Geslacht: Dorm:
allemaal op aparte lijnen, en dan ten slotte,
een regel code, en ik ga om dit te negeren voor nu.
Als == false betekent gewoon als er iets mis ging,
maar de magie gebeurt hier.
Stuur dan een mail betekent stuur deze e-mail.
Laten we eens kijken wat het resultaat is.
Aan de onderkant van het bestand, merkt het gaat te zeggen dat je echt geregistreerd
als ik zo ver.
Indien echter de gebruiker schroeven up, merken dat we dit begonnen
als voorwaarde hier, als het niet leeg is en niet leeg
en niet leeg sturen wij de e-mail.
Anders gaan we deze regel code te sturen,
die gaat naar het effect hebben, zoals u zult zien in PSET 7, de omschakeling gebruiker
terug naar waar ze vandaan kwamen, froshims3.php.
>> Vingers gekruist, anders gaat dit de meest teleurstellende demo vandaag.
Daar gaan we.
Laat me open mijn e-mail inbox voor jharvard in Gmail.
Geen e-mail op dit moment. Oke.
Laat me open te stellen froshims3, dat is de derde en laatste voorbeeld kijken we naar hier.
Oke, hier gaan we.
Nate, zal hij kapitein, man, van, zeg, Apley.
Registreren. Oke, ben je echt ingeschreven.
Nu, als ik ga naar mijn e-mail, oh, mijn God.
Ik heb zojuist dynamisch een e-mail op het web.
>> Laten we vertrekken op dat briefje.
Een video is binnenkort voor de lezing dat we gemist. Zie je volgende week.
[CS50.TV]