>> [REPRODUCCIÓ DE MÚSICA]
>> DAVID J. Malan: D'acord.
Això és CS50.
Aquest és el començament de la setmana 8.
I cal recordar que el deixem l'última vegada que mira un nou idioma
completament.
De fet, un que és bastant lleuger i ni tan sols és
un llenguatge de programació.
És un llenguatge de marcat que ens permet realment estructurar i fer que les pàgines web.
I quan alguna cosa més en conjunció amb esto--
o aviat ho sabrà, si no ho ha fet.
Utilitzarem en cascada Fulls d'estil o CSS, que
és un altre tipus de llenguatge amb propietats i valors
això va a deixar-nos fer coses com canviar el color
i canviar la posició i aquest tipus d'ajustos.
Però avui en dia i en endavant, vam començar a centrar-se en les llengües més poderoses,
llenguatges de programació com PHP reals.
>> Així que PHP ha estat al voltant per algun temps.
I com es veurà, es va ser dissenyat principalment
des del principi per a real utilitzar en el desenvolupament web
i en realitat la generació de pàgines web.
Llavors, quin tipus de característiques fa un idioma
necessari per tal de fer web pàgines de forma dinàmica amb ell?
>> En altres paraules, si vol generar contingut dynamically-- com Facebook de
Subministrament de notícies, que canvia constantment, o missatges instantanis que apareixen de tant
a temps-- com el que és el peça clau de la funcionalitat
el que necessites en un llenguatge de programació que li permeten de forma dinàmica
imprimir nova informació a la pantalla?
>> ESTUDIANT: Codi.
DAVID J. Malan: Codi.
Okay.
Prendrem això.
Una mica més precís.
Vull dir, podríem fer això amb C, francament.
Seria un dolor al coll.
Però- és aquest compromís?
>> ESTUDIANT: Sí.
Les variables, potser?
DAVID J. Malan: Variables.
Bé, segur.
Les variables sens dubte ens poden ajudar.
I fins i tot una mica més simple.
El fem servir en la primera programa del primer dia
quan en realitat ens va dir "hola món".
>> ESTUDIANT: Imprimir.
>> DAVID J. Malan: Imprimir, oi?
Imprimir o printf al món de C. Així que tot aquest temps,
que hem tingut en la nostra disposició un language-- C,
en particular: i fins i tot Esgarrinxada per al cas que
pot generar cadenes de text.
>> Bé, si l'HTML, com vam veure la setmana passada, és només un munt de cadenes de text
encara que amb suports oberts i tancats suports i algun tipus de rima
i la raó darrere d'ella, així llavors podríem realment
començar a generar pàgines web manualment escrivint a terme en gedit
o en Microsoft Word, perquè matter-- només necessitem un editor de text.
>> O podríem escriure codi, al seu suggeriment
abans, això ens deixa generar dinàmicament HTML,
i això és el que anem per començar a fer amb PHP
i, finalment, fins i tot amb una llenguatge anomenat JavaScript
és utilitzar una llengua a generar un altre.
I, de fet, això és el que Facebook i molts, molts altres llocs
fer per realment dinàmicament mostrar nova informació a vostè.
>> Així que anem a començar amb un esto-- línia de mira críptic, però un
això és realment molt poderós.
Fins ara, hem estat utilitzant C, que és un llenguatge compilat.
I només un recap-- ràpida un compilat llenguatge té quines característiques?
Òbviament, es necessita per compilar , Però què vol dir això?
Sí?
>> ESTUDIANT: Ha de ser acoblat en codi màquina.
>> DAVID J. Malan: OK.
Necessita ser ensamblat en codi màquina.
Així que vostè pren el seu codi font, que és una espècie d'Anglès-com.
Converteix això a nivell més baix alguna cosa,
que es diu en última instància objecte code-- de 0 i 1 de.
I són aquests de 0 i 1 d'aquest una CPU, com els realitzats per Intel,
realment entendre.
>> Ara, PHP i Python i Ruby i JavaScript i raïms d'un altre
llengües no es compilen idiomes, però interpretat llengües,
el que significa que acaba d'escriure i després no convertir-los en 0 i 1 de la.
En el seu lloc, només proporciona a continuació com entrada al programa d'una altra persona,
anomenat un intèrpret.
I d'aquesta persona programa ha estat dissenyat
per entendre el que cada un i cada símbol en Python o PHP
o Ruby o qualsevol nombre de altres idiomes significa.
>> I pel que tot el que necessitem és alguna cosa com això.
Així que, de fet, vaig a anar cap a l'aparell
aquí, només a qualsevol finestra d'edat, i estem
seguirà endavant i obert un arxiu anomenat, per exemple, hola.
Ara anteriorment, podria haver salvat això fins i tot amb una extensió d'arxiu,
però jo faré una cosa encara més simple aquí.
Vaig a seguir endavant i començar aquesta imatge amb aquesta sintaxi críptica.
Així que "l'usuari, bin, env, per al medi ambient, php. "
>> Això és simplement una línia de codi que és vaig a dir el meu sistema operatiu,
anar a buscar al seu local, medi ambient sigui el que sigui,
on PHP és-- la interpreter-- i seguir endavant i utilitzar aquest intèrpret
per interpretar el codi següent.
Ara, això és una espècie de una característica lletja de PHP.
Però en aquest idioma, qualsevol Quan s'escriu codi PHP,
cal tenir un d'aquests lletjos Etiquetes PHP que delimiten l'inici
de la seva code-- <? php.
>> Però per sota d'aquí, ara puc fer alguna cosa molt simple, igual que printf hola comes
món barra invertida n prop cita, parèntesi de tancament.
I a continuació, només per si de cas mesura, vaig
seguir endavant i prop la meva etiqueta php aquí
pel que es veu tot molt bé bastant impresa.
>> I tan aviat com faci clic a Desa, gedit és suficient realment intel·ligent
mirar a aquesta primera línia i t'adones, oh, estàs escrivint codi PHP.
Déjame ressaltat de sintaxi amb els colors
aquí perquè es destaca una mica més.
Però ara em vaig a anar fins a la meva finestra de terminal.
Vaig a apropar.
>> Aquest programa es diu "hola" així que vaig a fer barra de punts hola,
però va negar el permís.
I bash.
En realitat ens assabentem que Fa cosa d'un parell de setmanes
en el context de Shellshock, un d'aquests bestioles.
>> Però Permís denegat hem vist abans, potser en un context diferent.
Algú recorda com vostè pot arreglar alguna cosa
on el permís és negat d'aquesta manera?
Quin és l'ordre, si més no?
>> ESTUDIANT: Chmod.
DAVID J. Malan: Sí, chmod, per canviar la manera d'un arxiu.
I obtindrà encara més acostumat a aquesta setmana que ve amb un problema posterior
establir.
Però per ara, em canviaré la manera de no ser llegible,
sinó per donar a cadascú executeability privilegis, la capacitat
per executar aquest fitxer.
I jo vaig a assignar que en el fitxer de hola.
>> Si ara faig slash dot hola entrar, vostè veure, de fet, el meu programa, hola món.
I què va passar em van fer saltar clarament en total?
Compilació.
Així que em vaig trobar amb aquest programa, senzillament.
>> I resulta que vostè pot fer això amb una gran quantitat de sintaxi que recorda a C.
Deixeu-me anar en el codi d'avui, que he posat en el meu directori vhost
aquí, per raons reals tornarem a.
I jo vaig a entrar, diguem, les condicions 1.
>> I veuràs aquí, en primer lloc i abans que res, un munt de comentaris.
Però això és en realitat una recreació en PHP
d'un programa que vam fer a la setmana un anomenat condicions 1.c
on el propòsit en la vida d'aquest programa
és pel que sembla per demanar l'usuari d'un sencer
i després fer una mica esponjós anàlisi en ell mitjançant el qual
vostè diu si és positiu o negatiu o igual a zero.
I Porto això a col·lació només perquè, excepte potser un petit detall,
és indistingible tan lluny de C.
>> Quina és la una de les característiques aquí que potser salta
a vostè com una mica diferent?
Potser dues coses.
Sí?
>> ESTUDIANT: Mostra de dòlar n?
>> DAVID J. Malan: Sí.
Així signe de dòlar n és present.
I, com a signes de dòlar anem a veure, es van
ser una solució al principi de qualsevol variable en PHP.
És alhora bona i bona bad-- en que és una espècie del que és obvi
una variable, el mal que es tracta de una altra cosa per escriure.
I hi ha una altra cosa que no tenim prou
vist, almenys per aquesta ortografia. sí?
>> ESTUDIANT: Readline.
>> DAVID J. Malan: Readline.
Readline no vam veure, de per si, en C, tot i que hi ha alguna cosa
similar, però hem utilitzat getString, i això és la seva contrapart.
Així que si em vaig en aquest directori, que passa a ser,
com vaig a explicar una mica en el meu amfitrió virtual directori i la meva font d'un directori,
i jo seguir endavant i fer slash dot conditions-- slash dot whoops--
les condicions 1, veuràs, un cop més, el mateix permís Issue-- va negar.
>> Així que permetin-me el zoom i faig chmod un plus x en les condicions, les condicions de la ratlla vertical de punts.
M'agradaria un nombre enter, si us plau, 50.
I podríem jugar aquest joc durant tot el dia.
Es va a comportar-se exactament com ho va fer en la setmana un.
>> Acceptar el que no tan diferent, excepte no només que poc lleugera de sintaxi,
però en la part superior, que de nou tingut aquesta línia que
em va permetre crear alguna cosa que sembla un programa C anomenat hola,
anomenades condicions 1.
Però no és dels 0 i Estic executant directament.
Està en lloc d'executar aquest intèrpret el nom
passa a ser idèntica a la llengua.
El programa es diu PHP, i el meu codi per sota de la línia un es passa.
>> Podem fer una altra bastant simple exemple una reminiscència d'alguna cosa
ho vam fer fa setmanes.
De nou, això és una espècie de porció arbitrària de codi
que aparentment fa la qual cosa quan l'executa?
Què és això voleu imprimir, és de suposar?
>> Així inicialment en la línia 16, que és dirà x és ara 2, probablement.
% D és el mateix que $ i per printf.
Així que a continuació es cubicar, punt, dot, dot, en la línia 17.
I llavors apareix la línia 18 per cridar a una funció Cubed.
I on es defineix Cubed?
>> Bé, sembla que en la línia 25, així que no és tan diferent.
Tinc alguns comentaris anteriors , Però en la seva major part,
que és un bastant senzill portar o conversió
des del programa de C per a la versió PHP.
Però ara hi ha un parell de diferències que potser hauria de saltar fora.
Quina altra cosa és diferent sobre com es podria escriure aquest mateix programa en C?
>> ESTUDIANT: [inaudible].
>> DAVID J. Malan: No cap prototip fins a la part superior.
Així PHP-- i, francament, 1 munt de les Llengües moderna
són molt més intel·ligent i més útil que els compiladors de C en què
pot posar la funció fins aquí, vostè pot posar una funció aquí baix,
i l'intèrpret es va fer el favor de la lectura
tot l'arxiu abans que decideixi que no hi ha alguna funció.
Tan agradable millores anys posteriors.
Però també hi ha alguna cosa una altra cosa diferent o absent aquí.
Sí?
>> ESTUDIANT: [inaudible].
DAVID J. Malan: Nosaltres no hem de declarar els tipus de variables,
així que ja veurem en poc temps que hi ha diferents tipus en PHP,
però no cal especificar-los, que també és alhora bo i dolent.
I hi ha una altra cosa que falta.
>> ESTUDIANT: No hi ha biblioteques.
>> DAVID J. Malan: No hi ha biblioteques.
OK, així que això és bo.
Tenim un munt treure'l de la caixa.
Així que no hi ha en realitat molt més les coses que vaig pensar eren diferents.
Què tal manera a l'esquena?
Què és això?
Diuen que una vegada més?
>> ESTUDIANT: Punter.
>> DAVID J. Malan: No hi ha punters.
Acceptar, si més no en aquest exemple, no.
Això és just.
Així que no són punters en PHP realment en general.
Hi ha alguna cosa que es diu referències, però no anem a passar molt temps allà.
¿I què més?
>> ESTUDIANT: Principal.
DAVID J. Malan: Principal.
Així que aquesta era la gran cosa Jo estava pensant.
Cal notar que no hi ha punt d'entrada principal.
Només ha de començar a escriure el seu codi.
I això és en realitat serà avantatjós
quan fem la transició momentàniament per utilitzar realment
aquest mateix llenguatge per a la web basado- programació, per a això
no volen tenir un sol punt d'entrada.
Podríem voler tenir un munt de URL, un munt de diferents arxius
tot tenint a l'entrada d'usuari i la producció de sortida.
>> Però aquí hi ha el molt descoratjador exemple que li vaig prometre l'última vegada,
és a dir, en aquesta carpeta aquí, les faltes d'ortografia.
Així que en aquest arxiu corrector ortogràfic, que ens no passar massa temps des d'ara, no és
essencialment un porting-- P-O-R-T. És només la paraula donada quan, per exemple,
a convertir d'un idioma a un altre manualment en general.
>> Aquesta és una de portabilitat de PC versió del corrector ortogràfic de PSET maig.
I essencialment vaig tractar de convertir línia per línia el més a prop que pugui.
Així que si t'agrada aquest tipus de coses, el que realment val la pena en algun moment
tirant dels dos un al costat de costat i veure el que és el mateix
i el que és diferent.
Però són bastant maleït similar.
Si et recordes del que corrector ortogràfic fins i tot semblava,
tot i que no ho va fer haurà de canviar aquest arxiu,
que és bastant semblant estructuralment amb només un parell
dels canvis aquí i allà.
>> Així que això és només per dir que és bastant senzill per convertir Speller
de C a PHP.
Però en el diccionari, no hi ha alguna cosa encara més convincent.
Deixin-me seguir endavant i crear el meu propi arxiu dictionary.php.
Així lleugerament diferent en què l'anomenarem .php en comptes de .c.
Com que aquest és un fitxer PHP, jo fer-- lleugerament annoyingly-- té
per iniciar l'arxiu amb una etiqueta php així.
I jo seguiré endavant i definir algunes funcions.
Funció trucada de verificació, que és va a prendre en una paraula com abans.
Però aquest argument tindrà $ 1
signar perquè estem, de nou, usant PHP.
Una altra funció de dictionary.c era càrrega
i es va prendre en el nom d'un diccionari, així que vaig a aconseguir que la funció llista per anar.
>> Un altre en dictionary.c va ser què?
Grandària va ser un dels més bonics, en menys si es mantenia al voltant d'alguna variable.
tan sols la mida ha de retornar una variable.
I després hi havia descàrrega.
>> Així que hi va haver aquests quatre funcions en problemes 5
que vostè necessita per posar en pràctica amb una estructura de dades o estructures.
Així que em vaig prometre que en PHP, podem declarar
una taula hash, per exemple, tot el que més fàcilment.
De fet, si vull una taula hash, Jo només vaig a anar d'aquesta manera
i aquí està el meu taula hash.
I aquesta és la nota, descoratjador, que el deixem en l'últim temps.
I saps què, si volia una variable de grandària, així,
aquest no és tot tan diferent de C,
però jo vaig a seguir endavant i fer això.
I noti cap tipus de dades.
I vaig a tornar més tard i en realitat afegir alguns comentaris aquí.
Però què passa amb la càrrega?
>> Si diccionari signe de dòlar és el nom del meu arxiu
i jo en realitat vull carregar paraules en aquesta taula ara,
De fet, em puc fer una cosa bastant simple.
Un-- i això és minorly annoying-- en PHP,
s'ha d'especificar a l'interior d'una funció si
volen accedir a alguns mundial variable que està definida fora.
>> Però això no és tot interessant en aquest moment.
El que és més interessant és això per a cada construir que he esmentat l'última vegada.
I resulta que PHP té una funció anomenat arxiu el propòsit en la vida
és obrir un arxiu i llegir en totes les seves línies en una matriu
i la mà cap enrere per.
>> El que vol dir que puc fer tan diccionari que ara efectivament quan dic arxiu,
això em va a tornar una sèrie de paraules de l'arxiu.
No tot és tan bo.
Encara serà una línia de paraules, alguna cosa lineal.
Però puc seguir endavant i repetir sobre cadascuna d'aquestes paraules utilitzant
que la sintaxi vam veure breument l'última vegada.
I el veuràs més en la propera PSET.
>> Però ara tinc una iteració de bucle sobre cada paraula en el diccionari.
I en cada iteració, recordo que sóc trucant a la paraula actual "paraula."
I tot el que es va a dur a posar una paraula en el diccionari és
serà endevinar la paraula "veritat".
Aquesta és la meva funció d'inserció.
Aquesta és la meva funció de càrrega per a mi diccionari.
Ara és una mica d'un parany, ja que, saps què, no hi ha en realitat
n de barra invertida al final de les paraules que probablement hauria desfer-me de,
però això no és un problema, ja que PHP té una xuleta que funció anomenada literalment
costelles fos un personatge en el final.
Així que no hi ha problema.
Hem anat per davant i, de fet abreujada que només això.
I ara probablement hauria de portar un registre de mida, de manera que farem com a mínim esto--
mida ++.
Jo puc fer això com abans.
I llavors això va probablement a funcionar bé, pel que tornem cert.
Fet.
PSET maig.
>> [El]
>> DAVID J. Malan: OK.
Anem a fer-ho de nou amb el següent PSET, també.
Així que què passa amb la mida?
Bé, aquest és d'esperar es tracta com era d'esperar l'última vegada,
encara que he de fer aquesta cosa estúpida mundial.
És només un artefacte de el disseny de la llengua.
>> Però xec és una mica més interessant.
Així que si passava en dòlars signe denominatiu, en primer lloc
volen tenir accés a aquesta taula variable global.
I ara si vull comprovar si una paraula hi és,
Simplement puc dir si és cert que la següent es troba a la taula,
a continuació, seguir endavant i de retorn veritable; si no, torni fals.
Fet.
L'altra meitat de PSET maig.
>> Molt bé, així que de nou, estic tallar algunes cantonades.
Per ser justos, probablement hauria passar uns segons més
en aquesta aplicació.
I jo probablement no hauria burlar-se de tot el hores et posen al PSET tant.
Així strtolower és una funció.
Una cosa semblant existencialista en C, almenys per caràcters,
però PHP món té una versió cadena sencera.
>> Això obligarà a tot en minúscules, que alguns de vostès
podria haver fet al canonicalize que estava posant en el seu diccionari.
I ara vostè pot fer això en C, també.
Això no té res a veure amb PHP.
>> Però cada vegada que té una condició booleana,
com alguna cosa en línia 10 allà, que és només
va a avaluar veritable o fals, i si el teu la resta clarament
torna vertader o fals, el que vaig poder simplement realment fer això més sexy
i acaba de fer alguna cosa com això.
Així que no és la meva funció de comprovació.
Dret, si el booleà retorna un veritable o un fals,
anem a tornar immediatament.
>> I hi ha alguns altres ajustos Jo podria fer aquí i allà.
Descarrega Load--, per cert, que està fet.
No hi ha res a fer allà.
Atès que tota la memòria en PHP i molts altres idiomes
es gestiona en realitat per a vostè.
Així que mentre que en C, com que ha après dolorosament,
qualsevol cosa que malloc o calloc o realloc, has de alliberar-te.
Qualsevol cosa que vostè fopen, has de fclose, de manera que els recursos s'alliberen en última instància
i eines com Valgrind no ho fan adonar-se i no es queixen,
la qual cosa és una bona cosa per córrer-hi.
>> Però, sens dubte, ha d'haver haver alguna captura, oi?
En cas contrari, quin tipus de malbaratem un munt de setmanes.
Així que hi ha una sèrie de raons raó per la qual prenem aquest tipus de trajectòria,
però hi ha un trade-off.
És cert, això ha estat temàtica.
>> Llavors, ¿què podria un trade-off aquí en moviment, de C a PHP?
Se sent com tot a guanyar fins al moment que no sigui una mica de la lletjor aquí o allà.
Sí.
Què és això?
>> ESTUDIANT: [inaudible] de memòria.
DAVID J. Malan: velocitat.
Okay.
Bé, la meva velocitat era bastant ràpid.
Dreta?
Però la velocitat d'execució del programa?
OK, així que això és un punt just.
>> Així que ja que anava a passar, jo per endavant amb claus de fins a tant el meu solució intent, l'un
Jo tenia en el gran tauler era una solució a base d'intent,
i jo tinc que en aquest directori aquí.
Així que en un moment, puc seguir endavant i executar això a la Bíblia King James,
colpejar Intro.
I això és d'esperar correcta aplicació al final,
tinc temps en total de 0,38 segons perquè
un exemple una mica arbitrària.
>> I si ara entro en aquesta segona finestra de terminal
aquí on per primera vegada vaig obrir el gedit, i molt em vaig a code-- d'avui que, de nou,
és en aquest directori aquí-- i m'ho dius a mi anar endavant i corro ortografia.
Així que per ser clars, aquesta és la versió de PHP.
Només estic mostrant la part superior d'aquí.
>> Així que si ho faig corrector ortogràfic de titlla CS50 PSET maig textos, King James, entren.
És encara més ràpid que l'escriptura en C, però el temps total
és, avís, 0,93, mentre que el meu Aplicació basada en C va ser 0,38.
Així que és una diferència no trivial.
>> I això és només en un sol arxiu.
Si es va a executar els dos programes contra el gran tauler
i tenen un munt d'entrades provat, aquest seria sens dubte sumar.
I si tinguéssim conjunts de dades encara més grans, això, també, podria sumar encara més.
Així que sí, el pagament d'algun preu de velocitat és de fet el cas.
Quina altra cosa?
Sí?
>> ESTUDIANT: Quantitat d'ús de memòria RAM.
>> DAVID J. Malan: Quantitat d'ús de memòria RAM.
Així que no li vaig donar un segon pensat en escriure aquest PHP
versió pel que fa a quant la memòria que estava fent servir.
Estic completament ajornant que per PHP en si i el que va escriure aquest programa.
I això podria estar bé, però si jo realment realment
preocupar-se per estrènyer tant el rendiment fora del meu programa o fora del meu lloc web
o fora de qualsevol eina Estic construint, potser
PHP, de fet, no és el llenguatge correcte.
>> I, de fet, és per això que, per exemple, molts servers-- web
els programes reals que servir fins content-- web
no estan escrits en PHP o en Python o Ruby.
Estan escrits, de la mateixa manera que vostè ara ho fa amb joc de paràmetres 6,
en C perquè pugui esprémer cada bit de rendiment fora d'ell
i realment exercir el control de gra fi sobre el que és
passant per sota de la campana i no només ho prenen
per fet alguns més alta estructura de dades de nivell.
>> Penseu en la possibilitat de, després de tot, qui en PHP implementat
aquesta noció d'un hash table-- en realitat és més
apropiadament anomenat array-- associatiu ¿Ell o ella té alguna idea de quin tipus
de les entrades que seran posada en l'estructura?
Així que, òbviament, no és així, oi?
És una eina genèrica en el conjunt d'eines que està
proporcionada a qualsevol persona que vulgui per usar-lo, i pel que segurament es
no pot ser optimitzat en última instància per exactament el que vols fer.
>> Així que el temps de desenvolupament del comerç podria offs-- difereixen, el rendiment pot ser diferent,
complexitat o l'ús de memòria poden diferir.
I així el que trobarà cada vegada més és que hi ha
serà diferent eines per al comerç.
I, de fet, per a una súper majoria de projectes finals de les persones d'aquesta classe,
ho creguis o no, C no es va sent la llengua dret d'usar.
>> I de fet, un dels menjar per emportar en última instància, per a qualsevol classe com aquesta
és aconseguir que penses, bé, ¿què ha d'aconseguir
quan la plataforma que desitgi per resoldre algun problema.
I, de fet, anem a creuar aquest pont encara més si ens fixem en més idiomes
fins i tot més enllà d'avui.
>> Així que la transició de deixar ara a potser un context més familiar
per l'ús d'un llenguatge com PHP.
És una cosa comú a utilitzar pel la línia d'ordres, escriure guions
com jo ho vaig fer, però és molt, molt més comú.
I que estava destinat a ser utilitzat en la forma d'arxius que normalment acaba
en .php-- però això és no un prerequisite--
que ells mateixos generen contingut web.
>> Així que me n'aniré endavant i obrir uns pocs exemples I preparats per endavant.
I aquests són en realitat una espècie de veritat històries en que una de les primeres coses
El que he fet a mi mateix després d'acabar CS50 i potser, crec,
Fa anys CS51 és la meva company i jo estàvem ajudant
per executar el intramural de primer any programa d'esports, que, en el moment,
havia estudiant de primer any de registrar-se per diversos esports omplint un full de paper,
com se li cridava, caminant a través del pati a Wigglesworth,
i deixant-lo anar en alguns caiguda de la porta del procurador.
I llavors ell o ella aniria a través de i després en realitat envieu-nos un correu electrònic de forma manual
que ens registrem per una mica d'esport.
>> Així que, clarament, una oportunitat per a la millora.
En aquests dies, és possible recórrer a només Google Forms, però de tornada al dia,
vam haver arribar a aquesta realitat, per tal de: No va ser fins a arribar a aquest llarg ago--
per a una programació idioma que no va ser PHP.
En aquest moment, que era una cosa anomenada Perl,
que ha passat de moda des de llavors.
Però la idea és la mateixa.
>> I essencialment vaig asseure a tractar al port va versions de Perl a PHP,
però en ple descàrrec de responsabilitat, no va donar qualsevol pensament a l'estètica de moment.
Així que aquí hi ha una pàgina web.
Aquest fitxer.
Si Zoom cap a dins, el seu parer anomenat froshim0.php
només perquè és el nostre primer exemple d'aquesta sèrie.
I adonar-se que té el que sembla ser un formulari HTML molt lleig,
però és una forma interessant perquè permet
em va proporcionar l'entrada de l'usuari en el navegador.
>> Ara l'última vegada quan vam tenir un formulari, a qui ens sotmetem el nostre paràmetre de consulta,
el paràmetre de cua com es deia?
Així que per a Google, no?
Estem totalment aclarir en la idea fer res amb aquesta entrada.
>> Però avui, comencem la producció de sortida.
I el comportament vaig a veure aquí inicialment és bastant trivial.
David, vaig a comprovar fora de gènere aquí, dir Matthews aquí.
No vaig a ser capità.
Vaig a feu clic a Registrar.
I adonar-se que l'adreça URL té canviat per registrar-0.php,
i després hi ha aquest text lleig aquí.
Em va donar cap pensament a el format d'aquest.
>> Però el que és interessant és que tres valors aparentment es van passar a.
Aquesta és una espècie de de PHP equivalent a printf--
anem a veure el que realment crida en un bit-- que només imprimeix
el que ha passat en ella.
Així que això suggereix que aquesta forma tingut almenys tres camps a la mateixa,
i em vas veure els escriu en.
Un d'ells era el meu nom, una era gènere, un era el dormitori.
I el capità ni tan sols són enviades a el servidor a causa que no comprovar-ho.
>> Així que això és per dir pel que sembla, al moment d'enviar les coses a la web,
No només la URL vegades change-- de vegades no és així.
De fet, el nom del fitxer ha canviat, però el que està absent de la URL
que vam veure l'última vegada amb Google.
Sí?
>> ESTUDIANT: Sense cadena de consulta
>> DAVID J. Malan: No hi ha cadena de consulta.
No hi ha signe d'interrogació alguna cosa.
No hi ha signe d'interrogació q és igual als gats, com ho vam fer l'última vegada.
I certament no hi ha nom de signe d'interrogació és igual a
David o dormitori és igual a Matthews, Llavors, on és que tots anem?
>> Bé, deixa tornar a gedit aquí i obrir el primer d'aquests arxius
en el meu amfitrió virtual, host local, públic directori d'aquí i ves a froshim0.
Així que resulta que gairebé tots d'aquesta pàgina és només HTML.
I això podria ser desconeguda per a vostè, però aviat ho serà més encara amb PSET juny
i PSET 7 i 8 PSET.
Però això és només una pàgina HTML.
>> I les coses interessants sembla ser aquí.
Una etiqueta de formulari l'atribut acció té un valor de registre 0.
És per això que quan em sotmeto això, que va a aquest arxiu.
Però el mètode és diferent lloc de avui--.
Així que resulta que hi ha almenys dos mètodes utilitzats en la web
per enviar informació des del navegador al servidor.
Get posa a la URL.
Publicar la posa en un altre lloc.
I quan i per què podria vostè realment vol un lloc web
utilitzar ja llavors en comptes d'obtenir, només intuïtivament?
Qualsevol lloc web.
Quin tipus de dades ha de ser transmesa només per inferència ara per correu en lloc
per aconseguir, si hem vist les dues diferències?
ESTUDIANT: [inaudible] assegurar.
DAVID J. Malan: Si vols alguna cosa que sigui segur.
Així que pot ser que escrigui la contrasenya en un lloc web, una targeta de crèdit
en un lloc web ho faria tipus d'aquests subòptima
si el navegador ja que valor dins de la URL.
Per què?
Ho veus, el que no fa semblen ser una cosa molt important,
però les probabilitats són que bastant freqüència camina lluny del seu equip informàtic o ús
laboratoris, i pel que algú una altra cosa o fins i tot un company de pis
podria fàcilment pujar i veure que la informació privada.
Quan s'envia un correu electrònic a través del web, és probable que
no vull aquest final de dades a la URL també.
I pel que hi ha una sèrie de raons per què podríem voler posar-ho aquí.
I just photos--, no puc fins i tot bastant imaginar el que prendria un gràfic,
com un arxiu JPEG, i el va posar en una direcció URL.
Vostè podria fer-ho.
Hi ha maneres de que el codifica, però és no senzill com això.
>> Així que el registre 0 és en realitat molt decebedor.
Tot el que diu literalment és això.
S'imprimeix a l'interior d'alguns HTML etiquetes el següent.
Tinc una etiqueta PHP aquí imbricada dins d'una etiqueta pre.
"Pre" només significa que el text pre-formatat, mono-espaiades, com una màquina d'escriure.
>> Printr és una funció recursiva d'impressió.
I després hi ha això L'interessant aquí.
I anem a tornar a aquest perquè hi ha altres,
però el signe de dòlar de subratllat ja que sembla ser
una variable en PHP en el que qualsevol cosa que enviï des del navegador al servidor
s'emmagatzema per a vostè.
I anem a veure com aconseguir a que la informació en poc temps.
>> Però primer, anem a tornar a Un exemple lleugerament diferent.
A l'entrar a register-- o més aviat, froshims1.php,
que es veu una mica diferent.
Vaig prendre una mica més esforç amb el format,
tot i que tot i així és bastant lleig.
Però jo vaig a seguir endavant i el tipus de "David" ara.
Home.
Comprovarem "capità" aquesta vegada.
Farem Matthews.
I registrar.
>> I aquesta vegada, diu, hm, no realment.
Molt bé, així que això del registre 1?
Deixeu-me anar al registre obert 1 hm i-.
Molt bé, així que això és interessant, i aquest
és un pas cap a l'ara els programes més interessants.
>> Observi la part superior d'aquest arxiu té un Etiqueta PHP, així com alguns comentaris.
I aquests són, per ara, un distracció així que anem a desfer-se d'aquests comentaris
just com si estiguessin en C. I afirmen amb aquest tros de codi amb un comentari
que aquest codi és la validació de la presentació.
>> Bé, resulta que variables com el signe de dòlar
posat de relleu són anomenat súper globals.
Són com aquests variables globals especials
que són només omni-actualment disponible dins del seu programa.
I vostè pot utilitzar la notació de claudàtors l'índex en ells no usant nombres
com a 0, 1, 2, 3, però les paraules reals.
>> Així que vostè pot pensar en el signe de dòlar subratllar posat com a tipus d'una taula hash
que vostè podria passar una clau en, una recerca paraula en el medi dels claudàtors,
i que va a donar-li l'esquena al valor que proporciona realment l'usuari.
PHP té una funció anomenat buit que només
diu sí o no, aquesta variable és buida o no.
Tenim aquestes dobles barres, que només significa o, com en C.
>> Així doncs, en efecte, aquesta línia 4 és només dient que si l'usuari no ha donat un nom
o no donar un gènere o no ho va fer donar un dormitori, seguir endavant i li redirigirà
o ella a través d'aquesta línia aquí.
Així que això és una mica críptic, però això només significa literalment
tornar a aquest lloc, de manera que l'usuari punts
de nou a on ell o ella venia.
Però és una mica poc elegant que jo no modificable ella.
>> Però el que si aquesta condició si no avalua a cert?
Què passa si l'usuari em va donar el seu o el seu nom i residència i el sexe?
Que si la condició no és va a avaluar com a true,
així que no em vaig colpejar la sortida en la línia 7.
Llavors, què passa?
I això és el que hi ha interessant sobre PHP.
>> Vostè pot caure dins i fora de manera PHP, per així dir-ho.
Si vols alguna cosa de codi a executar, pot obrir i tancar una etiqueta PHP
i posar el codi allà com he fet aquí.
Tan aviat com es tanca l'etiqueta PHP, el servidor
només va a escopir el que va posar al seu lloc.
I, de fet, això era part de el disseny original de PHP,
per bé o per mal, era això commingling de codi i marcat
idioma.
I veurem que està molt recau ràpidament en un embolic.
I així ho farem millor que aquesta última instància, però només
compte de la facilitat amb la qual estic en realitat capaç d'executar alguna lògica.
>> Però segueix sent una mica decebedor.
Anem a obrir la versió dos Frosh missatges instantanis, que
pel que sembla, se sotmet a register2.php.
Així que aquest arxiu en realitat va per mirar gairebé el mateix.
Vaig a anar a Frosh missatges instantanis 2.
Però en Frosh IMs 2, anem a veure què passa.
>> David, feu clic al botó de ràdio, com que es diu; Matthews, cap capità.
Registrar.
Vostè està registrat.
En realitat no.
Oh, espera, que acabem de fer aquest exemple, no ho vam fer nosaltres?
Molt bé, es destaquen per.
Anem a fer els tres.
És evident que alguna cosa està a punt a passar amb Gmail.
Anem a arribar-hi.
>> Així Frosh missatges instantanis 3 són aquestes.
No és diferent.
Però quan ho faig David, home, Matthews, i inscriure, aquesta tercera i última versió
reclamacions, simplement, que estan registrats realment.
En certa manera és irrellevant.
Però jo pretenc amb aquest tercera i última versió
Ara he recreat exactament el que el meu company i jo construït per als missatges instantanis Frosh
Fa anys del programa.
I va ser simple.
No hi havia cap base de dades, cap full de càlcul Excel.
Però el més important, no hi havia més paper
perquè el que vam fer amb aquest programa va anar a un correu electrònic en realitat el supervisor, qui
rebia prèviament aquestes coses a través de les formes.
>> I pel que sembla hem programat aquesta en de tal manera que quan una persona es registra,
Missatges de correu electrònic del compte de John Harvard el proctor-- o a si mateix en aquest cas,
John Harvard-- amb la text-- "Aquesta persona acaba de registrar."
Nom és David, el capità està en blanc; gènere, masculí; i dormitori, de Matthews.
>> Llavors, ¿què va passar allà?
Bé, l'arxiu en qüestió aquí és aparentment register3.php.
I si obro aquesta, veuràs tant el poder del codi com aquest
i també, francament, la inseguretat d'un sistema com el correu electrònic.
He pretès simplement eficaçment a sigui John Harvard de la següent manera.
>> Tinc l'etiqueta php obert sobre de la tapa, que només diu aquí ve una mica de codi PHP.
Aquí sota, resulta que hi ha són les biblioteques de PHP.
Un no necessita incloure arxius de capçalera com a molt.
Vostè obté més amb el pica de la cuina, per així dir-ho.
>> Però aquesta vegada a la línia 4, que faig voler biblioteca especial anomenat
Mailer PHP, que és una cosa que pot instal·lar de forma gratuïta en molts sistemes.
Aquí sota estic validant la presentació només
comprovant va donar l'usuari a mi un nom, un gènere i un dormitori.
I si és així, endavant, una instància d'un anunci publicitari.
>> Vostè pot pensar en això com un línia de codi que només assigna.
És com malloc, però que és una mica més sexy
en què no s'esmenta només malloc i alguns nombre genèric.
Vostè diu que em doni un d'aquests, dóna'm un nou un d'aquests.
>> I si vostè ha programat en Java o C ++ o altres llenguatges,
que podria haver vist això.
No obstant això, el curt d'ell, si desconegut, aquesta línia
posa en el correu signe de dòlar una estructura especial anomenada
un objecte que s'ha incorporat a funcionalitat de correu electrònic.
I, de fet, compte i sintaxi similar.
>> Això no és un punter, per se.
PHP només utilitza la mateixa sintaxi.
Aquesta línia està dient ús SMTP-- Simple Mail Transfer
Protocol, que és només el protocol utilitzat per enviar correu.
Aquesta és l'especificació d'ús El servidor SMTP de Harvard, que
és en algun lloc aquí al campus.
>> Això està dient el que TCP el número de port amb qui parlar,
i em vaig imaginar que fos per googlejar o demanant la taula d'ajuda.
I després perquè Harvard utilitza alguns la seguretat del sistema en el server-- electrònic
almenys per xifrar el trànsit entre vostè i ell,
tot i que qualsevol persona pot enviar a it-- Vaig a encendre el protocol TLS
per mantenir aquesta assegurança.
>> Però aquí és on les coses aconseguir una mica de por.
Puc només arbitràriament dir que sóc jharvard,
i puc només arbitràriament un correu electrònic a mi mateix aquí.
I llavors puc especificar un subjecte amb aquesta línia aquí.
>> I això només es veu lleig, però és només un munt de concatenació.
Resulta que PHP té un símbol molt útil, de la mateixa manera que alguns idiomes, l'operador punt,
que concatena només, literalment, cadena després cadena després cadena,
i vostè no ha de malloc o figura la longitud total de la cadena.
Vostè acaba de fer-ho.
I, de fet, perquè estic concatenant en totes aquestes coses amb aquests punts,
és per això que el correu electrònic que enviat miraven com ho va fer.
>> I després, finalment aquí, jo estic enviant correu.
Així que si això és fals, Jo només vaig a morir,
que és una funció que només impressions a la pantalla d'un missatge d'error.
Però és, de fet, cridant a la funció d'enviament.
En cas contrari, si tot això falla, em torna a dirigir aquí.
>> I per què veig que Jo realment estic registrat?
Bé, va succeir aquí.
Així que els porto això per un parell de raons.
>> Un, aquest és exactament com si construeixes un lloc web per a un projecte final
o per al món real, és a dir la forma d'enviar recordatoris per correu electrònic
als seus clients o els seus subscriptors.
Aquesta és la forma d'enviar els recordatoris de contrasenya.
Aquesta és la forma d'enviar missatges de persones que tenen un nou Facebook
missatge pendent o alguna cosa per l'estil.
>> Però també parla el fet que això podria
han estat molt bé des Davin o qualsevol altra persona.
I dic aquest tipus de amb un somriure perquè sóc
molt segur del que està passant a través de diversos de les seves ments en aquest moment.
Però aquest és un dels que ho fan com jo dic, no el que faig tipus de coses,
perquè és trivial forjar correus electrònics com aquest.
Però com vostè va poder haver vist o llegir en el carmesí,
en els últims temps és també bastant trivial per a la gent
per rastrejar de nou a algun origen.
I em pregunti algun temps, potser en el dinar CS50, com jo primer
es van familiaritzar molt de prop gairebé a la Junta ed molts anys
fa quan vaig descobrir com funcionava l'internet.
Així que en qualsevol cas-- lleugerament després que el consell va fer ed.
>> Així, en qualsevol cas, hi ha una tot grup de súper globals,
com se'ls anomena aquí, un dels quals ens saw-- posat dòlar signe de subratllat.
Hi ha una contrapart anomenada get, que és on les coses des d'una URL
acaba anant.
I hi ha un munt d'altres, també- sessió i el servidor i la galeta.
Tornarem a la galeta en un altre moment,
però la sessió és una mena de fresc perquè just ara-- fins ara--
tot el que he fet amb un navegador web és una espècie d'apàtrida, per així dir-ho.
Puc fer clic al voltant, l'accés arxius al servidor, cosa
que succeeix a la pantalla, però a continuació, la connexió es tanca.
L'Internet Explorer o el Firefox icona deixa de girar
i que acaba de veure el que que la pàgina web conté.
>> Així que HTTP no té estat en què una vegada que es fa una connexió,
obté algunes dades, això és tot.
No hi ha més connexions, a diferència de Skype, a diferència de Facetime, Gchat diferència, que
manté una constant connexió amb el servidor.
El web és fonamentalment desconnectat, tot i que va a
veure en poc temps com podem simular coses
com el xat de Facebook i Gchat, que mantenen la illusion--
o en realitat fer mantenir un constant connexió utilitzant
la tecnologia més moderna.
>> Però si vaig a, diguem-ne, counter.php, aquest és un altre exemple senzill,
com veurem, que pensa en l'actualitat Vaig visitar el lloc el temps zero.
Però si simplement recarregar la pàgina, d'alguna manera sap que vaig estar aquí abans.
Si torno a carregar de nou, sap que vaig estar aquí abans.
I una vegada i una altra i una altra i una altra.
>> Així que hi ha una mica més-plussing passant, però avís
la coseta gira sempre tan breument fins a la part superior i després es desconnecta,
pel que no és com si tingués una constant connexió al meu aparell.
Bé, si vaig a counter.php, compte el fàcil que és.
Jo dic a aquesta primera especial funció que anem aviat
començar a prendre per fet anomenat inici de la sessió.
Inicia una sessió.
>> I una sessió d'ara endavant és només serà un cub, com un carret
cistella en el qual vostè pot posar els valors i el tipus de confiança com a programador
que ells van a ser aquí quan aquest usuari ve una segona part posterior--
més tard, una hora més tard, fins i tot un any més tard, sempre que ell o ella no s'esborra
les seves galetes, com veurem amb el temps veiem.
I ara només tinc si una condició aquí.
Així que si la clau següent, anomenat comptador, està situada a l'interior
d'aquest super global-- aquest hash taula, si voluntat-- anomenat període de sessions,
a continuació, seguir endavant i prendre la valor de la reflexió session--
en això com un carret cart-- i emmagatzemar-
en una variable temporal anomenada comptador.
>> En cas contrari, si aquest valor era comptador no s'estableix en l'anomenada cistella de la compra,
només inicialitzar a 0.
Finalment, aquí baix, anar i tornar a posar en els carros de la compra o de la sessió
el valor del comptador gener.
Així que resulta que aquesta aquí-- especial contenidor
que, de nou, és un d'ells associat matrius, una matriu que vostè pot indexar
en paraules en lloc de numbers-- persisteix fins i tot després que l'usuari es va.
Una vegada més, vaig a anar de nou a la pàgina ara.
Ha estat un minut més o menys.
Però recorda que jo tinc estat aquí 19 vegades abans.
Aquest és el meu 20 visita.
>> I pel que aquest serà clau per la implementació de qualsevol lloc web que recorda
que està connectat, que es posa alguna cosa literal en la seva cistella de la compra
per comprar o que té alguna nombre de missatges en espera.
Cada vegada que vulgui recordar la informació,
veurem que PHP, com diversos altres idiomes,
ens proveeix d'aquesta il·lusió d'estat tot i que, com es veurà en PSET 6,
com vostè està fent peticions HTTP des del client al servidor, això és tot.
Quan arribi de nou que resposta, no hi ha res més
tornant des del servidor per defecte.
Però anem a veure com treballar al voltant d'això.
>> Bé, ara, anem a tractar de netejar això una mica.
Hem vist uns quants diferents exemples allà.
Ah, i com un a part, per els que estan familiaritzats o no familiar,
la raó que la Exemple Frosh missatges instantanis es va anar
de mirar realment lleig per slightly-- bé,
encara ugly-- a lleugerament menys lleig tot i que encara lleig
és perquè si mirem en el codi font aquí,
resulta que tinc aquest a la part superior de l'arxiu.
>> Resulta que d'arrencada és un dels molts biblioteques lliurement disponibles per aquí
que no existeix per als llenguatges de programació sempre, però per CSS o JavaScript
o HTML o qualsevol nombre d'idiomes.
>> I aquestes persones aquí-- originalment va sortir
de Twitter-- només tenen un munt d'estils.
És un arxiu massiu aquí que algú va escriure,
o d'algú va escriure, amb el temps que especifica els colors i el format
i altres coses perquè jo pugui tipus de demanar prestat la seva sintaxi
i no haver de esbrinar com dissenyar la meva forma.
Això també es minified de manera que un ordinador pot
entendre però no necessàriament un ésser humà.
Així que això és només per això que el estilització no va canviar.
>> Però ara farem millor en termes de disseny,
perquè si ens quedem a baix aquest camí massa llarg,
nostre codi va a aconseguir brut i desordenat.
Així que anem a centrar-nos en aquests exemples aquí.
L'última per avui.
>> Així que aquí és un super senzill la versió 1.0 de la pàgina web de l'CS50.
Només té enllaços a conferències i programa d'estudis,
i s'està utilitzant aquesta llista desordenada tag-- l'etiqueta de UL que es va utilitzar l'última vegada.
I si de fet, si obrir View Page Source,
veuràs que això és molt, molt senzill d'HTML.
I de fet, tot i que això és un arxiu PHP sota de la capella,
Encara és només escopir només HTML, per ara.
>> Així que si faig clic en conferències, veiem que això passi.
I si faig clic a la setmana zero, veiem això.
I si faig clic a Dimecres, veiem això.
I això que sembla va ser el PDF de les diapositives d'aquest dia.
L'únic que he fet és enllaç amb un etiqueta d'ancoratge a aquesta URL aquí.
>> Així que això és només per dir que aquest és un bonic versió simple de la pàgina web de l'CS50.
Anem a veure com s'implementa.
Si entro al directori mvc0, anem a veure un parell d'arxius.
Un d'ells és un README, així que si una mica d'això és massa ràpid,
que només pot furgar més relaxat després.
I fixeu-vos en aquí és un arxiu index.php.
Resulta que si tu mateix, l'ésser humà,
no especifiqui el nom definitiu a una adreça URL, el servidor web en general
s'infereix algun nom per defecte per a vostè.
Un punt índex alguna cosa generalment és el valor predeterminat.
>> Així que per això fa un moment quan vaig visitar aquest URL aquí,
cap nom de fitxer, no hi ha cap arxiu extensió, cap període en l'adreça URL.
Només sabia d'alguna manera màgica buscar index.php.
És només una convenció.
Podria ser cridat qualsevol cosa.
>> Així que si ara em vaig a index.php, veuràs
que, indeed-- anem desfer-se dels comentaris
aquí perquè no hi ha realment res interessant que it--
això és només modificable HTML.
Així que això és consistent, però, amb la meva reclamació
que es poden barrejar HTML i PHP.
No hi ha real programació lògica aquí.
>> I els altres arxius són bastant molt tan poc interessant.
És només una setmana-codificat aquí per una setmana m i una setmana w,
per al dilluns i dimecres.
I després, si obro la setmana zero, compte que és gairebé idèntica.
>> I això és una espècie de conclusió clau.
Observi com això és redundant.
Aquests arxius amb prou feines canvien, i no obstant això jo tirat un d'aquests llocs de treball de còpia / pasta
on vaig prendre una file-- presumiblement en la setmana que zero-- copiat
quan una setmana va arribar, i ajustat alguns valors.
Probablement hauríem de ser capaços de fer millor que això.
>> Així que anem a tornar fins mvc i entrar en una versió.
I noto que tinc una alguns arxius, ja que el que
era comú a tots aquests arxius només una moment ago-- si torno a la versió 0,
anem a anar de nou a l'índex, i només postulate--
una vegada que em desfaig de la comments-- quina part d'aquesta pàgina
és de suposar en cadascun dels meus arxius?
Només ha de trucar a terme.
Què es dupliquen línies probablement a través de totes aquestes pàgines?
Sí?
>> ESTUDIANT: [inaudible].
>> DAVID J. Malan: de l'1 al 9.
Sí, absolutament.
1 a 9, excepte potser 8 canvia una mica perquè CS50
es converteix en conferències o setmana zero o alguna cosa així.
Però gairebé idèntic.
Així que tot això és només tipus de copiat i enganxat.
I hi ha un parell altres línies se m'acut
que són probablement idèntica a través de tots els arxius.
>> ESTUDIANT: 12 i 13.
DAVID J. Malan: Sí.
És clar, 12, 13, i 14, probablement, només perquè les coses interessants
que està succeint en les línies 11 i 10, pel que sembla.
Així que donem una ullada a la versió 1, que tracta de millorar això.
En la versió 1 d'aquest exemple-- mvc anem a explicar el mvc mitjans en un moment--
si entro en índex, tipus de sembla una mica confús ara.
No és tan simple com abans.
>> Però una vegada que comenci a llegir amb cura, és
bastant senzill el que està fent.
Pel que sembla, la línia 1 i línia 8 han substituït
totes les coses que simplement identified-- encara que només per si de cas,
Vaig deixar les ULS allà per si de cas alguna dies no tenien una llista de les coses.
I així ho requereixin és una cosa així com la lliura incloure en C. Còpia i pastes
el contingut efectivament aquí en aquest arxiu.
>> Així que en header.php, com vostè podria inferir del seu nom,
serà la capçalera de la pàgina.
És una espècie d'orfe aquí.
Només té la part superior a la mateixa, però no hi ha més contingut a continuació.
>> I si miro a peu de pàgina per la seva banda, que era l'altre arxiu mentioned--
aquest és molt menys interessant, però de nou, és comú a tot.
Així que aquest és el peu de pàgina.
Aquest és l'encapçalament.
Aquest és l'arxiu que és canviar, així que per què no
tractar de factoritzar la comunalitat amb aquestes dues línies aquí?
>> Però podem netejar aquesta una mica més lluny.
Vaig a seguir endavant i obrir la versió 2, on
ja veurem que no hi ha un nou arxiu, helpers.php.
Anem a veure el que és això en un moment.
Anem a l'índex, com el punt d'entrada com abans.
>> I ara noto que estic requerint helpers.php, no la capçalera o peu de pàgina.
Però els ajudants és una cosa així com helpers.c i helpers.h de PSET 2
o PSET 3 Fa molt de temps, quan en realitat es va fer buscar i trobar perquè PSET,
i que tenia tot el codi per a la classificació i la recerca en un arxiu separat.
Això és el que està passant aquí.
>> I ara la línia 3 es veu una mica diferent.
I és només una línia.
Per fer això encara més clar, aquí podria simplement
Què això sigui estilísticament coherent amb tota la resta que hem fet.
Però això no és realment canviar la funcionalitat.
És només una línia de codi real.
>> Pel que sembla, hi ha una funció en algun lloc anomenat render de capçalera,
I aquí és on les coses ser bastant potent.
Tingueu en compte que a l'interior de les seves parèntesi és el que una altra peça de sintaxi?
És probable que sigui una mica difícil de dir, però notar there's-- vaig a posar una mica de blanc
espai.
Hi ha claudàtors.
>> I entre claudàtors que vam veure fa una mica en el context de matrius associatives,
que són, de nou, igual que les taules hash.
I si vostè pensa ara a C, la ordre d'arguments en una funció
ha de ser sempre el mateix.
Cal recordar el que el ordenar x és--, i, z z, i, x--
i vostè ha de proporcionar sempre els en el mateix ordre o mirar cap amunt
si se li ha oblidat.
>> Però això sembla ser una forma intel·ligent passant d'un valor clau arbitrària
parells pel que el títol és el nom d'un argument en aquest cas
i CS50 és el seu valor.
I el fet que tinc aquests claudàtors
aquí voldrà dir que vaig poder també passar en alguna cosa
com una setmana és 1 o 0 o 2 o 3.
Per a això hem parametritzem aquesta funció d'una manera tal
que pot prendre múltiples entrades, però per ara és només l'un.
>> Si ara vaig a helpers.php, observi el que està fent.
Això és una mica de nova funcionalitat,
però per ara només prendre en la fe que això és
la sintaxi amb la qual definir una funció en PHP.
Vostè, literalment, diu la funció.
No s'especifica un retorn escrigui, i això és consistent
amb el detall de la variable anterior on vostè realment no escriu fortament.
>> Això només especifica que, per defecte, aquesta
pren un associativa matriu com un argument.
I saps què?
Si l'usuari no en passa un en, assumirà un valor per defecte.
>> Aquesta és una característica que C no té per a nosaltres, la qual cosa és bo, perquè ara
dades, fins i tot si no li donen res,
serà un matriu, però un buit.
I com un part, extracte tot just fa una mica covard
on pren totes les claus d'aquest matriu associativa, totes les coses
es pot posar entre claudàtors, i crea les variables d'ells
pel que en última instància, podem tenir accés a ells en footet.php i header.php.
Això és una mica abstracte, així que permetin-me explicar-ho.
>> En index.php, noto que estic que passa en un parell de valors clau del títol
amb un valor de CS50.
Si ara miro helpers.php, notar que RenderHeader
s'extreu que les dades que estic passant en, i després requerir header.php.
El que he fet és una espècie d'un pobre home de aplicació ara de la següent.
>> Si obro header.php, Tingueu en compte que jo ja no tinc dur
codificada la paraula CS50 en aquest arxiu de capçalera.
He posat aquest reconegudament atroçment funció amb nom, HTML caràcters especials,
en aquest país.
Però noto el que he fet.
Tinc HTML obert.
Llavors tinc el cap obert i el títol obert.
>> I després a l'interior de l'títol obert i tancar etiquetes, tinc una mica de codi PHP.
I aquest és un bonic però de sintaxi, que només significa trec.
Significa literalment esto-- ressò de la following--
però això és més atractiu per escriure.
Trobo a terme el títol que ha estat aprovada en.
>> Però què et sembla HTML Char especial es tracta,
especialment si vostè té alguna experiència prèvia en HTML?
Quin podria ser caràcters perillós per passar a una pàgina
on s'està generant dinàmicament la pàgina web amb un codi com aquest?
Déjame anar a aquesta imatge, versió 2, i veure si no puc induir això.
>> Versió 2 és això.
I compte tot està molt bé, treballant bé.
Però suposo que vaig a index.php i He especificat que el títol de la meva pàgina
no és CS50.
És alerta guió suport obert hola món, cometa simple tancament,
parèntesi de tancament, punt i coma, suport obert, guió barra.
>> Guió, com veurem finalment veure, és una etiqueta
que es pot utilitzar amb l'ús d'un altre llenguatge de programació anomenat
JavaScript dins d'una pàgina web.
I ara compte de la lògica aquí.
Heus aquí una clau anomenada títol.
Aquí és el seu valor a llarg boig ara.
>> Però si vaig als ajudants pàgina- o més aviat, la pàgina de capçalera,
Vaig a trucar a aquesta funció en aquest títol per primera vegada.
Així que si ara torno a carregar aquesta pàgina, veure això, que sembla ridícul,
però és segur.
Només es veu estúpid.
>> Però suposem que en lloc M'havia oblidat d'això.
I recorda les meves paraules, un nombre diferent de zero que vostè s'oblidi de fer això
i obtindrà alguns industriosos estudiant o amic que puja
perquè a la fira CS50 o anònimament en la nit furgant a la seva pàgina web
i, essencialment, la injecció de codi sense el coneixement que al seu lloc
d'alguna manera.
>> Perquè si jo simplement escopir a títol aquí i títol
allà-- bé, si el títol literalment són aquestes i PHP
com un llenguatge que pot escopir a terme un altre text llengües,
és a dir, literalment, va per reemplaçar aquesta etiqueta amb,
per descomptat, el que he posat en un altre lloc.
>> Així que si jo ara vaig aquí i tornar a carregar després desfer els mecanismes de seguretat,
Ara tinc hola món aquí.
Ara això no és tot tan gran d'un acord, però es podria fer alguna cosa
una mica més maliciós aquí, com si hagués
una altra tags-- com veurem, una vegada que passem més temps en JavaScript-- com a ubicació
punt href aconsegueix, cita, fi de la cita, HTTP business.com, però el contrari que
des de l'altre dia.
I ara vostè pot induir un web pàgina per anar en realitat immediatament
a aquesta pàgina web aquí.
>> I en realitat, no vull per fins i tot anar a business.com
perquè jo no vull saber el que és això.
Però això, també, es dispararà codi per a ser injectada en aquesta pàgina.
Així que això és només per dir que tot i que estem introduint súper d'hora en alguns
d'aquestes estructures més complexes, és tot cap a un fi d'assegurar-
que el codi no és explotable.
>> Així que ara una tercera versió aquí.
S'està fent una mica més de luxe.
Realment no em com-- la part anal de mi
estava una mica molest per la fet que una funció que havia cridat
RenderHeader i RenderFooter que eren gairebé idèntics.
Així que es va acudir, per què no ho fan Jo parametritzar aquestes funcions
en una sola trucada render, faci que prendre un segon argument
com el nom de la plantilla, a la final a render-- ja sigui encapçalat o peu de pàgina?
I a continuació, opcionalment, si vull per passar en alguns parells de valors clau
com ho faig pel títol de la capçalera, però no per al peu de pàgina,
Jo podria fer això.
>> I ara si em vaig a helpers.php, que és una mica més complex.
I vaig a sacsejo les mans al detalls, però és només una funció.
Així que això és un pas cap a un millor disseny.
>> Podem prendre un pas més enllà.
Si me'n vaig a la meva habitació versió d'aquest, compte ara
que estic fent alguna cosa encara més tipus de críptic.
I sé que això és un molt per absorbir al mateix temps,
però estem només una mica de la neteja de les coses.
Ara m'estic posant els meus ajudants presentar en una carpeta anomenada
includes-- només una arbitrària nomenar on vull posar coses
que vull figurar i després la resta d'aquest és el mateix.
>> Però si miro ara a gedit, avís que m'he lliurat
de tots els altres arxius i tinc ells mogut, per exemple, en aquí.
I després a les plantilles, Tinc això, també.
I així, tot això és ara cap a un pas d'utilitzar un patró de disseny molt millor.
I estem molt ràpidament va a allunyar-
de funcionalitat per defecte de PHP, que vam començar aquí amb,
on s'acaba de barregeu PHP, i el codi HTML, CSS i la seva,
i que acaba d'escopir cap a fora i vostè va sobre el seu camí.
No serà molt fàcil de mantenir.
Igual que en C, que vam començar a utilitzar diversos arxius i múltiples funcions
i coses de facturatge això.
Anem a fer el mateix aquí.
I de fet, en la cinquena i última versió aquí, ho vaig fer una altra cosa.
Vostè pot fins i tot utilitzar punt punt, que, de nou, és només el directori pare.
Per ser encara més conscients de la seguretat, perquè si miro l'escolta
aquí per cinquena i última versió, previ avís que tinc un directori anomenat aquí
públic, i després en el mateix nivell, per dir-ho,
Tinc inclou i plantilles i després aquest arxiu de text Llegiu-me.
>> I la raó per la qual he estructurat Com és esto-- i tants web
amfitrions, especialment els 5 $ els mesos o els 10 dòlars al mes,
si alguna vegada has tingut un d'aquests services-- el que molts d'ells ho fan
és que només esperen que bolcar tot dels teus arxius en un directori,
com ja vam fer amb aquest primer exemple.
>> Però tan aviat com s'inicia la construcció més llocs sofisticats que només emmagatzemen
dades que es preocupen per vostè i arxius preocupar-se, en realitat l'organització de les coses
correctament i amb més seguretat consciència en la ment pot
comencem a defensar contra tots els amics
que vostè té ja sigui en o fora d'aquesta classe que,
tan aviat com vostè comença a fer programes vostè mateix al web,
començaran a recollir sobre vostè i sobre ells.
>> I així anem a veure en última instància, en aquest disseny.
Això és només una imatge que representa el següent.
Anem a posar tot de la nostra lògica de programació en un o més arxius,
i anem a començar just trucant als controladors.
És on els cervells de els nostres llocs web són en realitat.
A continuació, anem a tenen punts de vista i opinions
són tan simple com independent files-- anomenats plantilles, sovint.
Només tenen la estètica de la meva pàgina,
el que vull de la pàgina per buscar com-- els colors i el disseny
i les posicions de totes les variables.
>> I després més interessant que amb el temps anem a arribar a
és el model, que serà just la paraula ens copet a altres tecnologies
que portem en el imatge, de la mateixa manera que les bases de dades reals,
pel que quan es vol per guardar la informació,
no acaba d'enviar un correu electrònic al seu supervisor oa vostè mateix,
en realitat s'emmagatzema en una base de dades utilitzant un altre llenguatge conegut com SQL.
I així anem a deixar aquí avui i recollir amb aquest dimecres
bases de dades i introduir a continuació.
>> [REPRODUCCIÓ DE MÚSICA]