>> Om te beginnen om te overbruggen wat zou je enige ervaring
met web programmeren, wat ik dacht dat ik zou doen is het stelen van een paar
voorbeelden die u misschien hebt gezien in 50
als je het nam de afgelopen jaar of twee al dan niet
als je het een paar jaar geleden nam
dat kleine stapjes in de richting van zijn een pyridine kennen als MBC,
Model View Controller, en wat betekent dat?
Dit is zullen we misschien weer zien is gewoon een manier van start
om schoon te maken van het ontwerp van een aantal web-based stukje software,
of het kan client zijde ook gebaseerd, maar we zullen het gebruiken
in het kader van PHP, zodat we kunnen beginnen
om nog ingewikkelder te maken projecten en sorteren
afzonderlijke verschillende code binnen de applicatie;
vooral zodat wanneer we hebben meerdere mensen die werken
aan een project dat het veel gemakkelijker om lijnen te trekken.
Dus eerst laten we een kijken naar een suboptimale manier
van de uitvoering iets.
Stel dat ik wilde een super maken eenvoudige cursus website voor 50
of een andere klasse, en die klasse heeft dingen
zoals lezingen en een syllabus.
Ik kon iets doen als een h1-tag op de top van mijn pagina
en een ongeordende lijst met li lijst items in volgorde
om gewoon een lijst met opsommingstekens van menu-opties, dus super eenvoudig.
Dus hoe kunnen we dit doen?
Nou, laat me gaan in mijn terminalvenster hier,
en merken dat ik een gelezen heb me en we zullen verwijzen naar deze code
op de website van de cursus in een beetje,
en merk op dat ik heb index dot htm - index dot php.
Dus laat me gaan en openen dat, en ja hoor het is een soort
van dom dat deze zelfs de naam php
want alles wat ik heb is een php commentaar
en dan is alles anders is gewoon rauwe html code.
Maar nogmaals dit is versie nul,
dus een stap in de richting iets interessanter,
maar let op, ik heb hard gecodeerd CS50 zoals de titel, CS50 in de h1,
en nu heb ik de lezingen te koppelen,
nu heb ik de syllabus link.
Oke, dus dat doet niet lijken al die onredelijk
totdat je een link als volgt lezingen, en je beseft
dat alles goed is het anders inhoud, maar het is een soort
van hetzelfde; het is een titel van de pagina en ongeordende lijst.
Ik klik week nul uit vorig jaar, en het is een soort
van hetzelfde, een h1 tag en een ongeordende lijst
en dan eindelijk ik klik dit, en ik krijg om wat blad,
die de dia's van die bepaalde lezing.
Dus iets zegt me dat Ik ben over te ineenkrimpen.
Als ik open lezingen dot php mededeling
dat is het vrij veel kopiëren en plak van het vorige bestand;
Ik veranderde alleen de titel h1, en wat deze links zijn.
Erger nog, als ik ga in week nul dot php,
het is hetzelfde exemplaar plakwerk
met slechts een beetje van inhoud getweaked.
Dus zeker is er een kans hier om te verbeteren,
en zeker dit moet een goede vuistregel;
wanneer je voelt jezelf kopiëren
en iets plakken meer dan misschien een keer,
rode vlaggen moeten hopelijk beginnen om af te gaan.
Maar hoe gaan we over het verbeteren van deze?
Nou, er zijn een paar manieren, en de technieken die u kunt gebruiken
in php zijn geëvolueerd tijd, maar laten we proberen deze.
Laat me gaan in een versie, dus de volgende variant van dit,
en laat me proberen te schoon het een beetje.
Recht, een van php eenvoudigste mechanismen
voor het oplossen van dit probleem is het oude school vereisen functie,
die vrij veel doet een kopie en plakken van de inhoud
van een bestand hier, als c is scherp omvatten,
en andere talen vergelijkbaar constructen.
Het ziet er dus een beetje vreemd nu,
het is zeker niet een compleet zoek webpagina,
maar vermoedelijk wat binnenkant van header dot php.
Alle andere dingen, rechts, de html-tag, het hoofd tag,
de title-tag, alle spullen dat was boven de belangrijkste essentie
van de pagina, die aantoonbaar alleen de ongeordende lijst,
en in de voettekst is waarschijnlijk net als de gesloten body tag,
tag de gesloten html's; vrij oninteressant
maar duplicatief spul.
Oke, en zeker genoeg als ik ga
in header dot php is het gewoon soort van de wees fragment
van boven, en als ik gaan in voettekst dot php,
het is de verweesde fragment van onderaf
en ik ben met behulp van diezelfde fragmenten in mijn andere bestanden,
zoals lezingen dot php.
Oke, dus wat is beter over dit zou je zeggen?
Yeah?
>> Eenvoud.
>> Eenvoud?
Ik weet niet dit soort looks veel enger voor mij nu, toch?
>> Als ik wilde veranderen uw header, zou je niet hebben
het in alle wijzigen vorige zoals bestanden.
Je verandert het gewoon in de header.
>> Precies, dus misschien in die zin is het eenvoudiger,
Misschien zou ik het ontwerpen zoals het is gewoon het is makkelijker om te werken.
Het is misschien een beetje schoner
omdat u een update in slechts een plaats.
Dus dat is vrij dwingend; wat is een nadeel
Deze aanpak of welk probleem blijft
dat we niet echt hebben opgelost?
Yeah?
[Off Mic Reactie]
Ja, precies, ik bedoel, ik ben nog steeds kopiëren en plakken;
het is een beetje minder, maar ik trok twee van deze bestanden,
en ze vrij veel zag er nog steeds identiek.
Er was vereist op de top, een vereist onderaan,
en een ongeordende lijst in het midden
die zelf nog Structureel hetzelfde.
Bovendien merken dit, als ik eigenlijk zien dit voorbeeld,
laat me gaan naar Version One nu,
en let op, ik heb CS50 Lezing Syllabus.
Uh oh, CS50 Week Zero Week Een en CS50 woensdag vrijdag,
Ik heb soort van snijden een hoek.
Wat was - wat waren deze titels eerder?
[Off Mic Reactie]
Zij waren als lezingen in Week Zero, alsof het was een soort
van sexier, en het eigenlijk had wat dynamiek aan het,
en dit is een soort van - ik ben gewoon een soort van punteren nu
en juist in de veronderstelling dat de hele website is CS50
en oke het werkt, maar het is zeker niet zo elegant
of als een soort van recht doorsturen als het ooit was,
maar dat is logisch, want als je kijkt naar index dot php
en lezingen dot php en week nul dot php,
ze zijn allemaal inclusief hetzelfde bestand,
dus hoe kunnen we dit verbeteren?
Wat is de volgende iteratie van deze code waarschijnlijk gaan doen?
[Off Mic Reactie]
Ja, precies, dus als - en laat me samenvatten
met we in essentie willen om die header parametriseren
zodat ja, er is nog steeds een hard gecodeerd h1-tag, maar het spul
tussen, de open en de nauwe tag,
vermoedelijk dynamisch en uit iets anders.
Misschien is de "get string" of de ding na het vraagteken
in de URL ergens waren anders, dus laten we eens een kijkje nemen.
Dus als ik in Version Two,
nu merk dat ik heb kreeg een extra bestand,
het lijkt erop dat helpers dot php.
Ik weet niet echt waar te beginnen dus ik ga om te beginnen gewoon
bij index zoals als altijd, en nu merken dat het een beetje anders,
dus ik heb een verlangen lijn kreeg
aan de top nodig helpers dot php,
maar ik kan het noemen wat ik wil,
maar let nu op lijn drie is er een functie aan te roepen
om header te maken, dat is alleen interessant voor zover
als wat er wordt overgegaan in blijkbaar, de aangepaste titel
voor deze specifieke pagina.
Ondertussen is er maken voettekst onder,
en ik heb geen behoefte parametrering daar is het gewoon
een voettekst, maar nu lijkt er
een stap naar een beter oplossing, maken header neemt,
en wat doet het plein haakjes geven voor die
die niet php hebben gezien ooit of in de zoveel tijd?
[Off Mic Reactie]
Ja, het is een array.
Het is een associatieve array of een hash die sleutels associeert
met waarden; het is net als Java Scripts, bezwaar notatie,
of andere talen, soortgelijke syntaxs.
Oke, dus wat is in helpers php dot?
In helpers dot php is het slechts een paar functies,
renderen kop-en voettekst maken.
Dus een paar details indien minder bekende,
dus allereerst het feit
dat maken header neemt een gegevens argument dat is blijkbaar
toegewezen de lege array-er betekent wat?
Wat betekent het om gelijken te doen geopend beugel gesloten beugel
als een parameter in php?
Het is de standaard waarde.
Dus als ik niet voorbij is toegerust of een van de argumenten dan ook
aan het maken kop-of het renderen functie voettekst
Ik kan vertrouwen op zijn minst als het auteur van deze functies
die gegevens zullen minimaal zijn een lege array;
zal het niet worden undefined of vals, of iets dergelijks,
het zal precies wat zijn Ik gaf het als een standaard.
Nu is dit een beetje een soort van een hackish manier van laden symbolen
in uw naam de ruimte zo te zeggen,
maar het werkt vrij goed in de richting van dit doel
van de implementatie van onze eigen soort arme man template engine.
Oke, er is een hoop tools die er voor Python Ruby
en php die je geeft template mogelijkheden
en dat is precies wat we willen.
Wij willen een sjabloon dat een heeft h1 open markering, een h1-tag gesloten,
en een soort van plek houder in het midden,
en we willen die plaats in te nemen houders door middel van deze functie,
dus deze functie extract gewoon zo gebeurt
om u de volgende geven mogelijkheden.
Als je een associatieve hebt van de array met belangrijke waarde-paren
zoals foo is gelijk aan bar, extract een lokale variabele creëren
riep effectief dollarteken foo en geef het een waarde van bar
zodat het ontploft uw associatieve array key value pairs
in nieuwe variabelen de bijbehorende waarden.
En dan nodig dot header dot php is hetzelfde als voorheen,
dus waar we waarschijnlijk gaan te zien binnen van header dot php?
Het heeft vast dat h1-tag en de nauwe tag; wat is er
om erin waarschijnlijk tussen het?
[Off Mic Reactie]
Precies, er is waarschijnlijk een vermelding van dollarteken titel
en ja hoor als ik in te zoomen Op deze daar is mijn titel tag,
daar is mijn h1-tag, en de binnenkant of is een dynamisch insertie
van dollarteken titel, maar gewoon voor een goede maatregel,
Ik doe deze html speciale rekenen gruwelijk genoemd
functie, maar het is bruikbaar; wat doet het
of wat doet het tegen?
Dit is eigenlijk een oplossing als een bedreiging van je doorschemeren;
u zou ons hebben geleid tot.
[Off Mic Reactie]
Precies, dus als een kwaadwillende gebruiker of een nietsvermoedende slachtoffer
van een phishing-aanval op een link geklikt
dat in zelf had een vraagteken en iets als foo gelijk,
en dan de waarde van foo was eigenlijk
zoals haakje openen script, gesloten beugel,
en vervolgens een aantal JavaScript-code;
als je dit niet noemen lange belangrijkste functie,
je zou eigenlijk infecteren ruwe html in uw webpagina,
waarvan het resultaat is dat u verleid zou kunnen worden.
Je zou de gebruiker worden tricking in het uitvoeren van JavaScript-code
dat hij of zij deed eigenlijk niet van plan.
En hoewel meestal je bent alleen jezelf pijn,
als je maar weet een idioot gaat typen
in een open beugel script, gesloten beugel, en zeggen alert
of iets dergelijks en doe hem of haarzelf
in met een aantal rare uitkomst, als je niet krijgen misleid
in het klikken op een link die heeft rauwe JavaScript ingebed in het
de waarde van dat kenmerk,
kunt u onder andere stelen van cookies iemands
omdat er een woning genoemd document dot koekje
in JavaScript waarmee u om sessie-cookie van een gebruiker te grijpen,
en als je herinneren wat een kapen van sessies aanval is,
lang verhaal kort, dat is een manier eigenlijk tricking iemand
in het geven van je dat virtuele handstempel en vervolgens het nemen van
over hun Facebook-account of een ander type rekening.
Oke, dus dit is een beetje lang,
maar het is alleen met behulp van rauwe html code.
Dit is het equivalent roepen echo
of afdrukken effectief, en we zijn in wezen het invoegen
die dynamisch.
Dus wat blijft hier?
Nou, laat me gaan in Versie Drie hier,
en we zullen zien wat een andere -
exact dezelfde layout bestand maar mededeling
dat deze keer gaan we generaliseren de kop-en voettekst
als sjablonen, dus wat moet ik daarmee?
Wat is het een ding dat is anders hier?
Wat is er veranderd sinds de laatste versie?
Subtiel, maar het is misschien wel gewoon een beter schoner ontwerp.
Yeah?
[Off Mic Reactie]
Ja, er is slechts een standaard maken functie;
Ik heb niet speciaal geval maken kop-of voettekst te maken,
beide als je recall van helpers dot php,
we zijn vrijwel identiek behalve hun namen
en de sjablonen ze opgenomen.
Waarom niet gewoon parametriseren het renderen functie
en neem een ​​argument, dat is de naam van de sjabloon,
en een tweede, optionele argument dat de sleutelwaarde paren
dat u wilt sluiten inch
Dus als ik nu kijk naar helpers dot php mededeling
dat ik als een kleine liefhebber nu.
Ik ben eigenlijk de controle doet de bestand bestaat en zo ja, ga je gang
en vereisen; voor het geval de gebruiker per ongeluk types
in sommige nep template naam willen niet om een ​​fout te gooien
in het programma, zodat we kunnen ze minimaal dit te doen
gunst hier.
Oke, maar we kunnen neem nog een stap verder?
In deze versie hier let op de volgende.
Ik heb net getypt ls, en wat onmiddellijk springt
out is enigszins anders.
Dus er is twee mappen, rechts,
en dus is dit nu een stap in de richting wat uiteindelijk een meer zijn
juiste kader.
Dit is een soort van slordig van mij te gooien alle
van mijn inhoud binnenkant van een publiekelijk toegankelijke directory
dat letterlijk heet public.
En hoewel helaas, veel kaders,
ouderen in het bijzonder, en zelfs sommige web-berichten,
Dream Host onder hen, krachten u al uw bestanden zetten
in het equivalent van een openbare gids zelfs
Als je bestanden zou kunnen omvatten databasewachtwoorden
en gebruikersnamen of andere dergelijke geloofsbrieven,
dat is niet helemaal goed ontwerp.
Veel beter is alleen zet
in de publieke directory wat absoluut heeft
de gebruiker toegankelijk zijn, en al het andere
dat je met inbegrip als helpers dot php,
er is geen reden dat dat moet web toegankelijk via een zijn
browser met een url.
Het zou volkomen onschadelijk zijn als de gebruiker wil misschien zien
die paren, maar het is gewoon het beginsel daarvan,
en god verhoede het eigenlijk doet beschikken over een gebruikersnaam of wachtwoord;
u niet wilt dat de gebruiker per ongeluk
of opzettelijk wordt in staat om toegang te krijgen.
Dus we zijn niet helemaal op een perfecte aanpak hier,
maar ziet nu het volgende.
In index dot php, merken dat Ik ben nog steeds die helpers,
maar ik doe het op zo'n manier dat ik soort van het organiseren van alle
van de bestanden die wordt opgenomen
in een subdirectory met de naam gewoonlijk omvat,
en dan bel ik terug voor Koptekst en voettekst als voorheen.
Dus het enige wat Ik heb gedaan is een soort
van reorganiseren mijn directories om een ​​beetje meer anaal zijn
over de bestandsstructuur.
Maar als we nu naar dit vijfde voorbeeld,
merken hier dat we nu hebben een trio van mappen,
en dit is een beetje misleidend op het moment
want voor eenvoud omwille van klasse
Ik heb net gegooid alles
naar John Harvard Public Directory gewoon
zodat we het kunnen navigeren via een browser, maar mededeling -
negeer dit deel voor slechts een moment,
het feit dat ik daar.
Merk op dat ik heb drie submappen: openbaar,
sjablonen en omvat.
Het idee is nu dat een goed geconfigureerde webserver I
zou Apache vertellen dat dit website heeft het publiek toegankelijke
bestanden hier, en nergens anders.
Dus wat bestand denk je Ik ga naar binnen te zien
publieke als ik typ ls?
Wat is er ten minste een bestand dat is waarschijnlijk daar?
[Off Mic Reactie]
Oke index dot php, en wat bestand is natuurlijk niet
daar onder anderen?
Net als helpers dot php, header dot php, footer dot php;
alle fragmenten, alle functionaliteit
dat niet echt nodig publiekelijk toegankelijk zijn,
het moet bruikbaar zijn de bestanden
die publiek toegankelijk zijn, maar zij zelf,
geen gebruiker nodig heeft om te zien of katern een URL voor helpers dot php.
Merk op dat in plaats daarvan als ik ga
in bestaat er helpers dot php,
en als ik in de sjablonen,
er footer en header dot php.
Eerlijk gezegd, had ik kunnen zetten ze in dezelfde directory,
maar ik probeer te zijn, zelfs meer anaal over het houden van bestanden
dat zijn gewoon een soort van statische templates verschillende
van functionele bestanden als helpers dot php,
en ik ben gewoon vast te houden aan een aantal vrij algemeen conventies
het aanroepen van de directories omvat en sjablonen.
Dus het enige dat veranderd dan is weer het pad.
Als we hier gaan merken dat ik nu gewoon
een relatieve map omvatten,
dot dot slash bevat helpers dot php,
of ik kan een beetje meer iets wat een goede en daadwerkelijk doen
als dit, php en veel
van talen deze speciale symbolen
die vertegenwoordigen de directory huidige bestand,
dus onderstrepen underscore dir onderstrepen underscore vertegenwoordigt
welke directory is van dit dossier,
en dus als je gewoon samenvoegen met de operator punt, dat,
dat zou bereiken hetzelfde resultaat,
en heeft de neiging om een ​​beetje meer zijn robuuste want je kunt krijgen
in situaties met relatief mappen werden gewoon zeggen dot
of dot dot kan eigenlijk brengen u naar de verkeerde plaats,
dus dit neigt wat robuuster.
Oke, dus wat al blijft?
Wat doe je nog steeds niet graag over dit?
Wat kan worden verbeterd en u Ik denk eerder gereageerd op het
dat er nog een aantal zaken?
[Off Mic Reactie]
Rechts, toch hebben we niet te beginnen met het schrijven als locaties
die er zo uitzien, toch?
Dit voelt niet al dat veel beter,
er is nog copy paste.
Ik heb nog steeds de vereisen lijn aan de bovenkant.
Ik heb nog steeds te maken header maken voettekst.
Er is een hoop dubbel werk.
Yeah?
[Off Mic Reactie]
Ja, precies, dus we hebben een genomen stap op weg naar een soort van splitsing
de "c" van de "v", dus MVC is Model View Controller;
controller is een soort van de hersenen van de applicatie.
Model heeft de neiging om de gegevens te of een gedeelde functionaliteit,
en oog neiging om het te esthetiek, de sjabloon,
dus we hebben een stap in de richting genomen scheiden van de "c" van de "v"
omdat we nu tenminste directory's deze sjabloon,
maar zelfs daar zijn we wezen hebben een controller per bestand.
Het maakt niet uit als er veel logica hier aan de hand,
maar index dot php is effectief een controller.
Wanneer u een URL te bezoeken en eindigend in index dot php,
alle logica implementeert die pagina gelijk heeft
in index dot php, en Hetzelfde voor lezingen dot php.
Hetzelfde geldt voor week nul dot php.
Dus we hebben soort van Strone onze logica all over the place,
en het voelt als dit is niet van plan
tot zeer goed schaal zodra we hebben niet vier maar veertig pagina's
als elke pagina begint met me het kopiëren van een oudere versie
van het bestand en gewoon tweaken sommige
de inhoud erin.
Dus we hebben alleen genomen een stap in de richting van deze,
en een van de instrumenten we zullen introduceren
op woensdag is een lijstenmaker genaamd "Laravel"
en dit is zeer populaire php kader,
anderen zijn "Fuelphp."
Er is een oudere genaamd "Codeigniter."
Er is een zogenaamde "Cake."
Er is een zogenaamde "Symfonie."
Ik bedoel als je Google PHP frameworks,
er is een gruwelijke aantal zoals kaders
dat mensen die geïmplementeerd.
Laravel is een van de meer en nieuwkomers;
het is een van de stofzuiger degenen, en je zult zien
die uiteindelijk het helpt bespaart u heel wat
van tijd, zelfs al is er een beetje een leercurve,
maar dat we zullen begeleiden u dan op woensdag.
Bovendien zullen we introduceren wat heet een "ORM."
In dit geval gebruiken we iets dat komt
met dit kader genoemd Laravel.
Het heet "Eloquent" en dit is slechts een laag van code
waarmee u onder andere dingen praat met databases.
En ook hier, laat me stelen een Zo dat is ofwel recent
of een erfenis voor sommigen van u van 50.
Als u hebben genomen 50, en je deed "CS50 Finance,"
je zou bestanden herinneren dat je schrijft of herschreef die eruit
als dit, dit login was dot php, en op het moment,
vooral omdat we had niet veel tijd te besteden
op php fundamentals vroeg op,
dit zou zelf hebben redelijk uitdagend geweest,
en dus we hebben, in feite, proberen om het ontwerp te vereenvoudigen.
We hebben niet echt te scheiden "M" van "V" van "C" dat alles veel
voor problemen "Zeven CS50 Finance,"
maar let op de een ding dat moet hopelijk beginnen
binnenkort wrijf je de verkeerde manier, is iets als dit.
Ik bedoel, dit was niet alleen inloggen dot php een controller.
Het werd ook rechtstreeks praten
een specifiek gegevensbestand met vervolg, die niet zal
tot zeer goed schaal bij je begint te werken met een
of twee of drie partners.
Bijvoorbeeld, als een van de partners verantwoordelijk
voor het maken van uw database tabellen en komende
met je indexen en het uitzoeken
wat de sleutel zou moeten zijn, de primaire sleutels, de foreign keys,
en dat alles, beslissen over de namen tafel en dat alles.
Nu je de ander in de groep moet weten
van het ontwerp beslissingen die hij of ze heeft gemaakt, en je nu nodig
hard code die beslissingen in uw bestand, dus nu hij
of zij is vrij veel beperkt
om nooit meer te veranderen die tabelnamen.
Nooit meer te veranderen die ingediend namen
zonder u te informeren.
Bovendien kan je niet echt gemakkelijk werken aan hetzelfde bestand
zonder botsen met elkaar als hij
of zij voortdurend veranderen van namen,
en je hebt de oude versies, enzovoort,
dus dit is gewoon uitnodigend veel en veel hoofdpijn.
Bovendien, zoals we zullen zie het duurde niet lang,
ook al heb je niet nodig
bijzonder doen geavanceerde queries hier,
als je eenmaal begint met meerdere tafels, twee tafels, drie, vijf,
tien tafels in een MySql of algemeen een relationele database,
moet je die tabellen te sluiten vaak als vertrouwd, en je hebt
om gegevens uit een met de ander,
en eerlijk gezegd uw vervolg queries gaan langer en langer worden,
en langer, en meer complex, en het begint gewoon
een stuk makkelijker te krijgen om fouten te maken
en een stuk moeilijker om dingen recht.
En zo tools zoals Welsprekend en ORM gaat
om ons te helpen onze data modelleren en het is ook effectief gaan
het genereren we moeten beginnen databases te kunnen ondervragen
in meer verfijnde manieren.
Dus als u een primaire sleutel hebt hier en een foreign key
hier, alles wat je nodig hebt te doen is leren dat ORM,
Object relatie Mapper, wat die relatie is
en het zal uitzoeken wat queries uit te voeren voor u.
En slechts in zeldzame gevallen heb je nodig
se schrijven jezelf vervolg code.
Als je echt wilt fijnafstemming iets,
maar voor het grootste deel, kunt u gewoon beginnen met de behandeling van entiteiten
in uw databases als ware objecten en niet deze vlakke rijen
dat je een of andere manier moet reconstrueren en de normaliseren.