>> [RIPRODUZIONE DI BRANI MUSICALI]
>> DAVID J. MALAN: Va bene.
Questo è CS50.
Questo è l'inizio di otto settimane.
E si può ricordare che abbiamo lasciato ultima volta che guardando un nuovo linguaggio
del tutto.
In effetti, uno che è abbastanza leggero e non è nemmeno
un linguaggio di programmazione.
Si tratta di un linguaggio di markup che ci permette di in realtà strutturare e rendere le pagine web.
E quando qualcosa d'altro in collaborazione con questo--
o presto sarà, se non l'hai già.
Stiamo andando a utilizzare Cascading Fogli di stile o CSS, che
è un altro tipo di linguaggio con proprietà e valori
che sta per farci fare cose come cambiare il colore
e modificare la posizione e questo tipo di modifiche.
Ma oggi e in poi, iniziamo a concentrarsi sulle lingue più potenti,
linguaggi di programmazione come PHP effettivi.
>> Così PHP è stato intorno per qualche tempo.
E, come vedrete, è è stato progettato principalmente
nella fase iniziale, per gli effettivi utilizzare nello sviluppo web
e in realtà la generazione di pagine web.
Quindi che tipo di Caratteristiche fa una lingua
necessario al fine di rendere web pagine in modo dinamico con esso?
>> In altre parole, se si desidera generare contenuti dynamically-- come Facebook di
Newsfeed, che cambia continuamente, o messaggi istantanei che compaiono di tanto
a tempo-- come quello che è il pezzo chiave di funzionalità
è necessario in un linguaggio di programmazione che ti lascerebbe in modo dinamico
stampare le nuove informazioni sullo schermo?
>> STUDENTE: Codice.
DAVID J. MALAN: Codice.
Ok.
Prendiamo questo.
Un po 'più precisa.
Voglio dire, potremmo fare questo con C, francamente.
Sarebbe un dolore al collo.
Ma-- è questo impegno?
>> STUDENTE: Sì.
Variabili, forse?
DAVID J. MALAN: Variabili.
OK, certo.
Le variabili possono certamente aiutarci.
E anche qualcosa di più semplice.
Abbiamo usato nella prima Programma del primo giorno
quando abbiamo effettivamente detto "ciao mondo".
>> STUDENTE: Stampa.
>> DAVID J. MALAN: Stampa, giusto?
Stampa o printf nel mondo di C. Quindi tutto questo tempo,
abbiamo avuto al nostro disposizione una language-- C,
in particular-- e anche Scratch è per questo che
può generare stringhe di testo.
>> Beh, se l'HTML, come abbiamo visto la scorsa settimana, è solo un insieme di stringhe di testo
anche se con staffe aperte e chiuse staffe e qualche tipo di rima
e la ragione dietro di esso, beh, allora potremmo davvero
iniziare a generare le pagine web o manualmente digitando fuori in gedit
o in Microsoft Word, per questo matter-- abbiamo solo bisogno di un editor di testo.
>> Oppure potremmo scrivere il codice, per il tuo suggerimento
in precedenza, che avrebbe cerchiamo generare dinamicamente codice HTML,
e questo è quello che stiamo andando per iniziare a fare con PHP
e, infine, anche con un linguaggio chiamato JavaScript,
è utilizzare una lingua per generare un'altra.
E in effetti, questo è ciò che Facebook e molti, molti altri siti
fare per davvero in modo dinamico visualizzare le nuove informazioni a voi.
>> Quindi cominciamo con un questo-- criptico linea di ricerca, ma una
che in realtà è piuttosto potente.
Finora, abbiamo usato C, che è un linguaggio compilato.
E solo un rapido recap-- un compilato lingua ha quali caratteristiche?
È ovviamente necessario compilare si, ma cosa significa?
Sì?
>> STUDENTE: Ha bisogno di essere assemblati in codice macchina.
>> DAVID J. MALAN: OK.
Deve essere assemblato in codice macchina.
Quindi, prendete il vostro codice sorgente, che è una sorta di inglese-like.
Si converte che per livello più basso qualcosa,
che è in ultima analisi, chiamato oggetto code-- 0 e 1..
Ed è quelle di 0 e 1 che di una CPU, come quelli prodotti da Intel,
in realtà capire.
>> Ora, PHP e Python e Ruby e JavaScript e mazzi di altri
le lingue non vengono compilati lingue, ma interpretato lingue,
il che significa che solo la digitazione e poi non li trasformano in 0 e 1..
È invece proprio fornisci poi come input per il programma di qualcun altro,
chiamato un interprete.
E quella persona programma è stato progettato
per capire ciò che ogni e ogni simbolo in Python o PHP
o Ruby o un qualsiasi numero di altre lingue significa.
>> E così tutti abbiamo bisogno è qualcosa di simile.
Quindi, in realtà, ho intenzione di andare oltre all'apparecchio
qui, proprio in qualsiasi vecchia finestra, e siamo
intenzione di andare avanti e aprire un file chiamato, dire, ciao.
Ora in precedenza, avrei potuto salvare questo anche con un estensione del file,
ma ho intenzione di fare qualcosa di ancora più semplice qui.
Ho intenzione di andare avanti e iniziare questo file con questa sintassi criptica.
Quindi "utente, bin, env, per l'ambiente, php. "
>> Questo è semplicemente una linea di codice che è dirò il mio sistema operativo,
andare a trovare nel vostro locale ambiente qualunque essa sia,
ovunque PHP è-- il interpreter-- e andare avanti e utilizzare tale interprete
interpretare il codice seguente.
Ora, questo è una specie di una caratteristica brutta di PHP.
Ma in questo linguaggio, qualsiasi volta che si scrive codice PHP,
è necessario disporre di uno di questi brutto Tag PHP che delimitano l'inizio
del code-- <? php.
>> Ma al di sotto di qui, ora posso fare qualcosa abbastanza semplice, come printf ciao virgola
mondo backslash n vicino preventivo, parentesi chiusa.
E poi per buona misura, vado
di andare avanti e chiudere il mio tag php qui
in modo che sembra tutto abbastanza ben stampata.
>> E non appena si fa clic su Salva, gedit è in realtà abbastanza intelligente
a guardare quella prima riga e rendi conto, oh, si sta scrivendo codice PHP.
Permettetemi di evidenziazione della sintassi con i colori
qui in modo che si leva in piedi un po 'di più.
Ma ora ho intenzione di andare verso il basso per la mia finestra di terminale.
Io lo zoom in.
>> Questo programma è stato chiamato "ciao," così ho intenzione di fare barra dot ciao,
ma permesso negato.
E bash.
In realtà abbiamo sentito parlare di tale cosa che un paio di settimane fa
nel contesto di Shellshock, uno di quegli insetti.
>> Ma il permesso negato che abbiamo visto prima, magari in un contesto diverso.
Qualcuno ricorda come si potrebbe risolvere qualcosa
in cui il permesso è negato in questo modo?
Qual è il comando, almeno?
>> STUDENTE: chmod.
DAVID J. MALAN: Sì, chmod, per cambiare la modalità di un file.
E avrai tutto il più utilizzato per la prossima settimana con un conseguente problema
set.
Ma per ora, ho intenzione di cambiare il modo di non essere leggibile,
ma per dare a tutti executeability privilegi, la capacità
per eseguire questo file.
E ho intenzione di assegnare che al file ciao.
>> Se io ora faccio barra dot ciao entrare, vedere, infatti, il mio programma, ciao mondo.
E che passo fatto che chiaramente ignorare del tutto?
Compilazione.
Così ho appena eseguito questo programma molto semplicemente.
>> E si scopre che si può fare questo con un sacco di sintassi che ricorda C.
Lasciami andare per il codice di oggi, che ho messo nel mio elenco vhost
qui, per ragioni reali ci torneremo a.
E ho intenzione di andare in, diciamo, le condizioni 1.
>> E vedrete qui, prima e soprattutto, un sacco di commenti.
Ma questo è in realtà una ri-creazione in PHP
di un programma che abbiamo fatto in settimana uno chiamato condizioni 1.c
in cui lo scopo di vita di questo programma
è apparentemente di chiedere l'utente per un numero intero
e poi fare un po 'birichino analisi su cui esso
tu dici se è positivo o negativo o uguale a zero.
E io portare questo solo perché, tranne forse un piccolo dettaglio,
è indistinguibile così lontano da C.
>> Qual è la una caratteristica qui che forse salta fuori
a voi come un po 'diverso?
Forse due cose.
Sì?
>> STUDENTE: Segno del dollaro n?
>> DAVID J. MALAN: Sì.
Così il segno del dollaro n è presente.
E il segno del dollaro, come vedremo, sono in corso
essere una correzione all'inizio di qualsiasi variabile in PHP.
E 'il bene e il bene in bad-- che è una specie di ovvio ciò che è
una variabile, male che è ancora un'altra cosa da scrivere.
E c'è un altro cosa che non abbiamo abbastanza
visto, almeno da questo ortografico. sì?
>> STUDENTE: Readline.
>> DAVID J. MALAN: Readline.
Readline non abbiamo visto, di per sé, in C, anche se esiste qualcosa
simile, ma abbiamo utilizzato getString, e questa è la sua controparte.
Quindi, se vado in questo directory, che risulta essere,
come spiegherò in un po 'nel mio vhost directory e la mia fonte Una directory,
e vado avanti e faccio barra dot conditions-- whoops-- dot barra
condizioni 1, vedrete, ancora una volta, la stessa autorizzazione issue-- negato.
>> Permettetemi quindi di ingrandire e fare chmod un plus x delle condizioni, condizioni oblique di punti.
Mi piacerebbe un numero intero, per favore, 50.
E potremmo giocare a questo gioco tutto il giorno.
Sta andando a comportarsi esattamente come ha fatto nella prima settimana.
>> OK non così tanto diversa, ad eccezione non solo quella leggera po 'di sintassi,
ma in cima, ho di nuovo avuto questa linea che
mi ha permesso di creare qualcosa che si presenta come un programma in C chiamato ciao,
chiamati condizioni 1.
Ma non è 0 e di quelli Sto eseguendo direttamente.
E 'invece l'esecuzione di questo interprete il cui nome
sembra essere identica alla lingua.
Il programma si chiama PHP, e il mio codice sotto la linea si sta passando in esso.
>> Possiamo fare un altro abbastanza semplice esempio che ricorda qualcosa
abbiamo fatto settimane fa.
Di nuovo, questo è una sorta di pezzo di codice arbitrario
che a quanto pare fa quello che quando lo si esegue?
Che cosa è questo andare in stampa, presumibilmente?
>> Quindi inizialmente sulla linea 16, è per dire x ora è 2, probabilmente.
% D è uguale a $ i per printf.
Allora è cubatura, puntino, dot, dot, in linea 17.
E poi la linea 18 viene visualizzato per chiamare una funzione Cubed.
E dove è definito Cubed?
>> Beh, sembra che in linea 25, in modo che non è tutto così diverso.
Ho alcuni commenti qui sopra essa, ma per la maggior parte,
è una abbastanza semplice porting o la conversione
dal programma C per la versione di PHP.
Ma ora ci sono un paio di differenze che forse dovrebbe saltare fuori.
Che altro è diverso su come si potrebbe scrivere questo stesso programma in C?
>> STUDENTE: [incomprensibile].
>> DAVID J. MALAN: Non c'è nessun prototipo sulla parte superiore.
Quindi francamente PHP-- e, una sacco di languages-- moderna
sono molto più intelligente e più disponibile di compilatori C in quanto si
può mettere la funzione qui, si può mettere una funzione di quaggiù,
e l'interprete sta andando per farti il ​​favore di leggere
l'intero file prima di decidere che qualche funzione non esiste.
So Nice miglioramenti anni successivi.
Ma c'è anche qualcosa di altro diverso o assente qui.
Sì?
>> STUDENTE: [incomprensibile].
DAVID J. MALAN: Non c'è bisogno di dichiarare i tipi di variabili,
quindi vedremo fra poco che ci sono diversi tipi in PHP,
ma non è necessario specificarli, che è anche bene e nel male.
E c'è un'altra cosa che mancava.
>> STUDENTE: Non c'è librerie.
>> DAVID J. MALAN: Non ci sono biblioteche.
OK, così che è bello.
Abbiamo un sacco più out of the box.
Quindi c'è in realtà molto di più cose di quanto ho pensato che erano diverse.
Che ne dite di modo in retro?
Che cos'è?
Dicono che una volta di più?
>> STUDENTE: Pointer.
>> DAVID J. MALAN: No puntatori.
OK, almeno in questo esempio, non.
Questo è giusto.
Quindi non ci sono puntatori in PHP realtà in generale.
Ci sono qualcosa chiamato riferimenti, ma noi non spendere troppo tempo lì.
E che altro?
>> STUDENTE: principale.
DAVID J. MALAN: principale.
Quindi questo è stato il biggie Stavo pensando di.
Si noti non c'è punto di ingresso principale.
È sufficiente iniziare a scrivere il codice.
E questo è in realtà andando essere vantaggioso
quando abbiamo Transizione momentaneamente in realtà utilizzando
questo stesso linguaggio per il web-based programmazione, per il quale
non vogliono avere un solo punto di ingresso.
Si potrebbe desiderare di avere un gruppo di URL, un gruppo di file diversi
tutto prendendo in input dell'utente e produrre in uscita.
>> Ma qui è il molto sconfortante esempio che ho promesso l'ultima volta,
vale a dire in questa cartella qui, errori di ortografia.
Quindi, in questo file correttore ortografico, che si non spendere troppo tempo su, non vi è
essenzialmente un porting-- P-O-R-T. E 'solo la parola data quando, per esempio,
si converte da una lingua ad un altro manuale di solito.
>> Questo è un porting di PC versione di correttore ortografico da PSET 5.
E ho provato a convertire in sostanza linea per linea il più vicino possibile.
Quindi, se vi piace questo genere di cose, in realtà la pena a un certo punto
tirando entrambi fianco a lato e vedere che cosa è lo stesso
e cosa c'è di diverso.
Ma sono maledettamente simili.
Se vi ricordate cosa correttore ortografico anche sembrava,
anche se non l'hai fatto essere necessario modificare questo file,
è abbastanza simile strutturalmente con solo un paio
di modifiche qua e là.
>> Quindi questo è solo per dire che è piuttosto semplice per convertire correttore ortografico
da C a PHP.
Ma nel dizionario, c'è qualcosa di ancora più interessante.
Lasciami andare avanti e creare il mio file dictionary.php.
Quindi, un po 'diverso, in quanto che chiameremo .php invece di .c.
Poiché si tratta di un file PHP, ho fare-- leggermente annoyingly-- hanno
per avviare il file con un tag php del genere.
E ho intenzione di andare avanti e definire alcune funzioni.
Funzione chiamata di controllo, che è andando a prendere in una parola come prima.
Ma di questo argomento andando ad avere un dollaro
firmare perché siamo, ancora una volta, utilizzando PHP.
Un'altra funzione da dictionary.c era carico
e ha preso il nome di un dizionario, così vado a prendere quella funzione pronto ad andare.
>> Un altro in dictionary.c era quello?
La dimensione era uno di quelli più belli, a almeno se hai tenuto qualche variabile intorno.
così formato deve solo restituire una variabile.
E poi c'era scarico.
>> Quindi ci sono stati questi quattro funzioni problema set 5
che avevi bisogno di implementare con qualche struttura di dati o strutture.
Così ho promesso che in PHP, possiamo dichiarare
una tabella hash, per esempio, tutto ciò che più facilmente.
Infatti, se voglio una tabella hash, Sto solo andando ad andare in quel modo
e c'è la mia tabella di hash.
E questa è la nota, sconfortante, che abbiamo lasciato su l'ultima volta.
E sai una cosa, se avessi voluto una variabile per dimensioni, ben,
questo non è tutto così diversa da C,
ma ho intenzione di andare avanti e farlo.
E notare alcun tipo di dati.
E ci tornerò più tardi e effettivamente aggiungere alcuni commenti qui.
Ma per quanto riguarda il carico?
>> Se Dizionario simbolo del dollaro è il nome del mio file
e io in realtà voglio caricare parole in questa tabella la società,
Posso effettivamente fare qualcosa di abbastanza semplice.
Tra-- e questo è minorly annoying-- in PHP,
è necessario specificare all'interno di una funzione se
vuole accedere ad alcune globale variabile che è definita al di fuori.
>> Ma non è particolarmente interessante in questo momento.
La cosa più interessante è questo per ogni costrutto che ho detto l'ultima volta.
E si scopre che il PHP ha una funzione chiamato file il cui scopo nella vita
è quello di aprire un file e leggere in tutte le linee in un array
e la mano di nuovo a.
>> Vale a dire che posso fare in modo dizionario che ora in modo efficace quando chiamo il file,
questo sta a portata di mano me indietro un array di parole dal file.
Non è affatto buono.
E 'ancora in corso di essere una linea di parole, qualcosa di lineare.
Ma posso andare avanti e iterare su ciascuna di queste parole usando
che la sintassi che abbiamo visto brevemente l'ultima volta.
E vedrete più nel PSET prossimo.
>> Ma ora ho un loop di iterazione su ogni parola del dizionario.
E su ogni iterazione, ricordo sono chiamando la parola corrente "parola".
E tutto sta andando a prendere per mettere una parola nel dizionario è
sta per essere parola indovinare "vero".
Questa è la mia funzione di inserimento.
Questa è la mia funzione di caricamento per il mio dizionario.
Ora è un po 'un imbroglio, perché, si sa che cosa, c'è in realtà
barra rovesciata n di a fine le parole che forse dovrei liberarmi di,
ma questo non è un problema perché PHP ha un taglio che funzione chiamata letteralmente
braciole di fuori di un carattere proprio alla fine.
Quindi nessun problema.
Siamo andati avanti e in realtà accorciato che per proprio questo.
E ora forse dovrei tenere traccia di dimensioni, quindi cerchiamo di fare almeno questo--
dimensioni ++.
Posso farlo come prima.
E allora questo è probabilmente andando a funzionare bene, in modo che ritorniamo vero.
Fatto.
PSET 5.
>> [Risate]
>> DAVID J. MALAN: OK.
Stiamo andando a farlo di nuovo con la PSET prossimo, anche.
E per quanto riguarda le dimensioni?
Beh, questo si spera è di circa come ci si aspetterebbe l'ultima volta,
anche se devo fare questa cosa stupida globale.
E 'solo un artefatto da design della lingua.
>> Ma controllo è un po 'più interessante.
Quindi, se ho passato in dollari segno verbale, ho
vogliono avere accesso a quel tavolo variabile globale.
E ora se voglio controllare se una parola è lì,
Posso semplicemente dire che se è vero che il seguente è impostato nella tabella,
poi andare avanti e ritorno vero; altrimenti, restituisce false.
Fatto.
L'altra metà della PSET 5.
>> Va bene, così ancora una volta, sono tagliando qualche curva.
In tutta onestà, dovrei probabilmente spendere qualche secondo
su questa implementazione.
E forse è meglio non prendere in giro tutto il ore si mette sul PSET così tanto.
Quindi strtolower è una funzione.
Qualcosa di simile esistenzialista in C, almeno per caratteri,
ma PHP ha un versione intera stringa.
>> Che sta per forzare tutto in minuscolo, che alcuni di voi
avrebbe potuto fare di canonicalizzare cosa stavi mettendo nel vostro dizionario.
E ora si può fare questo in C, anche.
Questo non ha nulla a che fare con PHP.
>> Ma ogni volta che si ha una condizione booleana,
come qualcosa on line 10 esiste, che è solo
sta cercando di valutare al vero o falso, e se il vostro altro chiaramente
sta tornando vero o falso, ho potuto semplicemente davvero fare questo più sexy
e basta fare una cosa del genere.
Modo che ci sia la mia funzione di controllo.
A destra, se il booleano restituisce true o false,
facciamo solo tornare subito.
>> E ci sono alcune altre modifiche Potrei fare qua e là.
Scarico Load--, tra l'altro, che è fatto.
Niente da fare lì.
Poiché tutta la memoria in PHP e molte altre lingue
è in realtà gestito per voi.
Così, mentre in C, come che hai imparato dolorosamente,
tutto quello che malloc o calloc o realloc, devi liberarti.
Tutto ciò che si FOPEN, devi fclose, in modo che le risorse siano in ultima analisi, liberate
e strumenti come Valgrind non lo fanno notare e non si lamentano,
che è una buona cosa per l'esecuzione su di loro.
>> Ma sicuramente, ci deve essere un po 'fermo, giusto?
In caso contrario, abbiamo sprecato tipo di un sacco di settimane.
Quindi ci sono una serie di ragioni perché noi prendiamo questo tipo di traiettoria,
ma c'è un trade-off.
Giusto, questo è stato tematica.
>> Così che cosa potrebbe un trade-off qui si muove, da C a PHP?
Si sente come tutti vincere finora diverso un po 'di bruttezza qui o là.
Sì.
Che cos'è?
>> STUDENTE: [incomprensibile] memoria.
DAVID J. MALAN: Velocità.
Ok.
Beh, la mia velocità era abbastanza veloce.
Giusto?
Ma la velocità di esecuzione del programma?
OK, quindi questo è un punto giusto.
>> Così come accadrebbe, I prima cue up sia la mia soluzione tentativo, quello
Ho avuto il grande bordo era una soluzione try-based,
e non ho che in questa directory qui.
Quindi io in un attimo, posso andare avanti e eseguire questo sulla Bibbia di Re Giacomo,
premendo Invio.
E questo si spera corretto attuazione alla fine,
mi dà il tempo in totale di 0,38 secondi per tale
un esempio un po 'arbitraria.
>> E se io ora vado in questo seconda finestra terminale
qui dove ho aperto gedit, per non andare in code-- di oggi, che, ancora una volta,
è in questa directory qui-- e lasciami andare avanti e correre correttore ortografico.
Quindi, tanto per essere chiari, questa è la versione di PHP.
Sto solo mostra la parte superiore di esso qui.
>> Quindi se faccio correttore ortografico di tilde CS50 PSET 5 testi, re Giacomo, entrano.
E 'ancora più veloce di scrittura in C, ma il tempo totale
è, avviso, 0.93, mentre il mio Implementazione basata-C è stato 0,38.
Quindi si tratta di una differenza non banale.
>> E questo è solo su un file.
Se si dovesse eseguire i due programmi contro la grande tavola
e hanno un sacco di ingressi testato, questo sarebbe sicuramente aggiungere fino.
E se avessimo set di dati ancora più grandi, anche questo sarebbe aggiungere tanto più.
Quindi sì, pagando un certo prezzo di velocità è davvero il caso.
Cos'altro?
Sì?
>> STUDENTE: Quantità di uso RAM.
>> DAVID J. MALAN: Quantità di uso RAM.
Così non ho dato uno secondo pensato durante la scrittura di questo PHP
versione da quante ricordo che stavo usando.
Sono completamente rimandando che a PHP stesso e chi ha scritto quel programma.
E che potrebbe essere OK, ma se io in realtà davvero
cura di spremere tanto le prestazioni dal mio programma o dal mio sito
o su qualsiasi strumento Sto costruendo, forse
PHP, infatti, non è la lingua giusta.
>> E infatti, è per questo che, per esempio, molti web servers--
i programmi attuali che servire web content--
non sono scritti in PHP o in Python o Ruby.
Sono stati scritti, come ti ora fare con PSET 6,
in C in modo che si può spremere ogni po 'di prestazioni fuori di esso
e davvero esercitare il controllo a grana fine su ciò che c'è di
in corso sotto il Cappuccio e non solo prendono
per scontato un certo superiore struttura di dati di livello.
>> Si consideri, dopo tutto, chi in PHP implementato
questa nozione di un hash table-- in realtà è più
chiamato correttamente un array-- associativa fa lui o lei ha idea di che tipo
di ingressi che si sta per essere mettendo nella struttura?
Così, ovviamente no, giusto?
E 'uno strumento generico nel toolkit che è
fornito a chiunque voglia ad usarlo, e così sicuramente
non può essere ottimizzato definitiva per esattamente quello che vuoi fare.
>> Così i tempi di sviluppo del commercio-offs-- potrebbe differiscono, le prestazioni potrebbero differire,
complessità o l'utilizzo di memoria potrebbero differire.
E così ciò che troverete sempre più è che non c'è
sta per essere diverso strumenti per il commercio.
E infatti per un super maggioranza progetti definitivi delle persone in questa classe,
che ci crediate o no, C non sta andando essere la lingua giusta da usare.
>> E infatti, una delle rosticcerie in ultima analisi, per qualsiasi classe come questo
è quello di farti pensare, bene, che cosa si deve tirare fuori
il ripiano quando vuoi per risolvere qualche problema.
E in effetti, attraverseremo il ponte ancora di più come si guarda più lingue
anche al di là oggi.
>> Quindi, andiamo ora a transizione forse un contesto più familiare
per l'utilizzo di un linguaggio come PHP.
E 'un po' comune l'uso a la riga di comando, scrittura di script
come ho fatto io, ma è molto, molto più comune.
Ed è stato destinato ad essere utilizzato in sotto forma di file che di solito finiscono
in .php-- ma questo è non un prerequisite--
che si generano contenuti web.
>> Quindi lasciami andare avanti e aprire alcuni esempi che ho preparato in anticipo.
E questi sono in realtà una sorta di vero storie che una delle prime cose
Mai mi ha fatto dopo aver terminato CS50 e forse, credo,
CS51 anni fa, è il mio compagno di stanza ed io stavamo aiutando
per eseguire il intramurale matricola programma sportivo, che, al momento,
aveva matricola registrazione per vari sport compilando un pezzo di carta,
come si diceva, a piedi attraverso il cortile di Wigglesworth,
e rilasciandola in alcuni porta goccia di Proctor.
E allora lui o lei sarebbe passare attraverso e poi in realtà via e-mail manualmente
che sono stati registrati per un po 'di sport.
>> Quindi, chiaramente, un'opportunità di miglioramento.
In questi giorni, si potrebbe girare a poco Moduli Google, ma back in the day,
abbiamo dovuto raggiungere in realtà for-- questo non è stato arrivare anche che a lungo ago--
per una programmazione lingua che non è stato php.
A quel tempo, era qualcosa chiamato Perl,
che è andato fuori moda allora.
Ma l'idea è la stessa.
>> E io in sostanza sono seduto a provare alla porta va versioni di Perl per PHP,
ma in piena dichiarazione di non responsabilità, non ha dato alcun pensiero per l'estetica ancora.
Così qui è una pagina web.
Questo è un file.
Se io lo zoom avanti, la sua apparenza chiamato froshim0.php
solo perché è il nostro primo esempio in questa serie.
E notare che è quello che sembra per essere un modulo HTML molto brutto,
ma una forma interessante perché permette
me per fornire l'input dell'utente al browser.
>> Ora, l'ultima volta in cui abbiamo avuto una forma, per i quali abbiamo sottoponiamo il nostro parametro di query,
il parametro di coda come si chiamava?
Quindi, per Google, giusto?
Siamo totalmente giocato d'azzardo sul concetto di fare qualsiasi cosa con tale ingresso.
>> Ma oggi, iniziamo la produzione di output.
E il comportamento vado a vedere qui inizialmente è piuttosto banale.
David, io spuntare genere qui, dice Matthews qui.
Non sarò capitano.
Io vado a fare clic su Registra.
E notare che l'URL è cambiato per registrare-0.php,
e poi c'è questo testo brutto qui.
Ho dato nessun pensiero per la formattazione di questo.
>> Ma ciò che è interessante è che tre I valori erano apparentemente passati.
Questa è una sorta di di PHP equivalente a printf--
vedremo cosa è davvero chiamato in un bit-- che stampa appena fuori
quello che avete passato in esso.
Quindi, questo suggerisce che tale forma avuto almeno tre campi ad esso,
e mi hai visto la digitazione in.
Uno era il mio nome, uno era genere, uno era dormitorio.
E il capitano non ha nemmeno ottenere inviato il server perché non ho controllato esso.
>> Quindi questo è per dire a quanto pare, quando si invia cose sul web,
non solo l'URL volte change-- a volte non è così.
Infatti, il nome di file modificato ma ciò che è assente dalla URL
che abbiamo visto l'ultima volta con Google.
Sì?
>> STUDENTE: No stringa di query
>> DAVID J. MALAN: Non c'è stringa di query.
Non c'è punto interrogativo qualcosa.
Non c'è alcun punto di domanda q pari gatti, come abbiamo fatto l'ultima volta.
E non c'è certo Nome punto di domanda è uguale
David dormitorio o uguale a Matthews, Allora, dove è che tutti andando?
>> Beh, mi permetta di tornare a gedit qui e di aprire il primo di questi file
nel mio vhost, host locale, pubblico elenco qui e andare in froshim0.
Così si scopre che quasi tutto di questa pagina è solo HTML.
E questo potrebbe essere sconosciuto a voi, ma ben presto sarà più così con PSET 6
e PSET 7 e 8 PSET.
Ma questa è solo una pagina HTML.
>> E la roba interessante sembra essere qui.
Un tag forma la cui azione di attributo ha un valore di registro 0.
Ecco perché quando mi presento questo, va a quel file.
Ma il metodo è diverso messaggio oggi--.
Così si scopre che ci sia almeno due metodi sul web utilizzati
per inviare informazioni dal browser al server.
Get mette nell'URL.
Posta mette altrove.
E quando e perché si potrebbe in realtà vogliono un sito web
di usare il post poi invece di ottenere, solo intuitivamente?
Qualsiasi sito web.
Che tipo di dati dovrebbero essere comunicate solo per deduzione ora via posta in contrasto
per ottenere, se abbiamo visto le due differenze?
STUDENTE: [incomprensibile] sicuro.
DAVID J. MALAN: Se si desidera qualcosa di cui essere sicuro.
Così si potrebbe digitare una password in un sito web, una carta di credito
in un sito web sarebbe tipo di questi sub-ottimale
se il browser che ha messo valore all'interno della URL.
Perché?
Lo vedi, che non fa sembra essere un tale grosso problema,
ma le probabilità sono voi abbastanza spesso a piedi lontano dal computer o l'uso del computer
laboratori, e così qualcuno altro o addirittura un compagno di stanza
potrebbe facilmente salire a piedi e vedere che informazioni private.
Quando si invia una e-mail tramite il web, probabilmente
non vogliono che finale dei dati nella URL pure.
E così ci sono una serie di ragioni il motivo per cui si potrebbe desiderare di metterlo qui.
E proprio photos--, non posso nemmeno del tutto immaginare come si dovrebbe fare un grafico,
come un JPEG, e metterlo in un URL.
Si potrebbe farlo.
Ci sono modi di codifica è, ma è semplicemente non semplice come quello.
>> Così registro 0 è in realtà molto deludente.
Tutto ciò che dice letteralmente questo.
Esso stampa all'interno di alcuni Tag HTML seguente.
Ho un tag PHP qui nidificato all'interno di un tag pre.
"Pre" significa solo testo pre-formattato, mono-distanziati, come una macchina da scrivere.
>> Printr è una funzione ricorsiva stampa.
E poi c'è questa cosa interessante qui.
E torneremo a questo perché ci sono gli altri,
ma il simbolo del dollaro di sottolineatura messaggio sembra essere
una variabile in PHP in cui tutto inviato dal browser al server
viene conservato per voi.
E vedremo come arrivare a che le informazioni in breve tempo.
>> Ma prima, torniamo a un esempio leggermente diverso.
Entrando in register-- o piuttosto, froshims1.php,
che sembra un po 'diverso.
Ho preso un po 'di più sforzo con la formattazione,
anche se è ancora piuttosto brutto.
Ma ho intenzione di andare avanti e digitare "David" ora.
Maschio.
Controlleremo "capitano" questa volta.
Faremo Matthews.
E la registrazione.
>> E questa volta si dice, hm, non proprio.
Va bene, e allora di registrare 1?
Lasciami andare nel registro aperto 1 hm e-.
Va bene, quindi questo è interessante, e questo
è un trampolino di lancio verso la società programmi più interessanti.
>> Si noti la parte superiore di questo file ha un Tag PHP e alcuni commenti.
E questi sono, per ora, una distrazione così facciamo solo sbarazzarsi di quei commenti
proprio come se fossero in C. E mi sostengono con questo pezzo di codice con un commento
che questo codice è convalidare la presentazione.
>> Beh, si scopre che variabili come il simbolo del dollaro
sottolineatura postale sono chiamato Super globali.
Sono come questi variabili globali speciali
che sono solo omni-attualmente disponibili all'interno del programma.
Ed è possibile utilizzare la notazione parentesi quadra per indicizzare loro non utilizzando i numeri
come 0, 1, 2, 3, ma parole reali.
>> Così si può pensare del dollaro sottolineare posto come una sorta di tabella di hash
che si potrebbe passare una chiave in una ricerca parola in-tra le parentesi quadre,
e sta andando per darvi indietro il valore che l'utente effettivamente disponibile.
PHP ha una funzione chiamato vuoto che solo
dice sì o no, questo variabile è vuota o no.
Abbiamo queste doppie verticali, che significa solo o, come in C.
>> Quindi, in effetti, questa linea 4 è solo dire se l'utente non ha dato un nome
o non ha dato un genere o non ha fatto dare un dormitorio, andare avanti e lui reindirizzare
o il suo tramite questa linea qui.
Quindi questo è un po 'criptico, ma questo significa solo letteralmente
tornare in questa posizione, in modo che l'utente punts
torna a ovunque lui o lei è venuto da.
Ma è un po 'inelegante in quel duro ho codificato esso.
>> Ma cosa succede se questo se la condizione non valuta a vero?
Che cosa succede se l'utente mi ha dato il suo o il suo nome e il dormitorio e il sesso?
Che se la condizione non è sta cercando di valutare al vero,
quindi non mi ha colpito l'uscita in linea 7.
Che cosa succede?
E questo è ciò che è interessante di PHP.
>> Si può cadere dentro e fuori dalla modalità PHP, per così dire.
Se volete un po 'di codice da eseguire, è possibile aprire e chiudere un tag PHP
e inserire il codice lì come ho fatto qui.
Non appena si chiude il tag PHP, il server
sta solo andando a sputare fuori tutto ciò che si mette lì.
E in effetti, questo faceva parte del il disegno originale di PHP,
nel bene e nel male, era questo commistione di codice e markup
lingua.
E vedremo che questo molto devolve rapidamente in un pasticcio.
E così faremo meglio questo fine, ma proprio
notare la facilità con cui sono effettivamente in grado di eseguire una certa logica.
>> Ma ancora un po 'deludente.
Apriamo up versione due dei Frosh IM, che
a quanto pare sottopone al register2.php.
Quindi questo file sta realmente accadendo guardare quasi lo stesso.
Ho intenzione di andare a Frosh IM 2.
Ma in Frosh IM 2, vediamo cosa succede.
>> David, fare clic sul pulsante di opzione, come si chiama; Matthews, nessun capitano.
Registrati.
Ti sei registrato.
Non proprio.
Oh aspetta, abbiamo appena fatto che esempio, non l'abbiamo fatto noi?
Va bene, stand by.
Faremo il tre.
Chiaramente qualcosa è circa accadere con Gmail.
Ci arriveremo.
>> Così Frosh IM 3 si presenta così.
Non è diverso.
Ma quando lo faccio David, maschio, Matthews, e registrare, questa terza e ultima versione
pretese, molto semplicemente si, sono registrati davvero.
Questo è una sorta di immateriale.
Ma io pretendo con questo terza e ultima versione
Ora ho ricreato esattamente ciò che il mio compagno di stanza e ho costruito per le IM Frosh
anni di programma fa.
Ed è stato semplice.
Non c'era nessun database, nessun foglio di calcolo Excel.
Ma soprattutto, non c'era più carta
perché quello che abbiamo fatto con questo programma era in realtà e-mail il procuratore, che
era in precedenza di ricezione queste cose attraverso forme.
>> E a quanto pare ci siamo programmati in questo modo tale che quando qualcuno registra,
Dell'account e-mail di John Harvard il proctor-- o se stesso in questo caso,
John Harvard-- con il seguente text-- "Questa persona appena registrata."
Nome è David, il capitano è vuoto; genere, di sesso maschile; e dormitorio, Matthews.
>> Così che cosa è successo lì?
Beh, il file in questione qui è apparentemente register3.php.
E se apro questo, si vedrà sia la potenza di codice come questo
e anche, francamente, l'insicurezza di un sistema come e-mail.
Ho appena efficace finta di essere John Harvard nel modo seguente.
>> Ho il tag php aperto sulla parte superiore, che dice solo ecco che arriva un po 'di codice PHP.
Quaggiù, risulta là fuori sono librerie in PHP.
Devi solo non è necessario includere i file di intestazione come molto.
Si ottiene di più con il lavello della cucina, per così dire.
>> Ma questa volta in linea 4, che faccio vogliono speciale libreria chiamata
PHP mailer, che è qualcosa che si è possibile installare gratuitamente in molti sistemi.
Quaggiù sto convalidando la presentazione appena
controllando dava l'utente mi ha un nome, un genere, e un dormitorio.
E se è così, andare avanti e un'istanza di un mailer.
>> Si può pensare a questo come un riga di codice che assegna solo.
E 'come malloc, ma è un po 'più sexy
in quanto non si parla solo malloc e un numero generico.
Tu dici che mi dia una di queste, dammi un nuovo uno di questi.
>> E se avete già programmato in Java o C ++ o altri linguaggi,
si potrebbe avere visto questo.
Ma il corto di esso, se sconosciuto, questa linea
mette in simbolo del dollaro di posta una struttura speciale chiamata
un oggetto che ha incorporato funzionalità e-mail.
E infatti, notare e sintassi simile.
>> Questo non è un puntatore, per sé.
PHP solo utilizza la stessa sintassi.
Questa linea sta dicendo uso SMTP-- Simple Mail Transfer
Protocollo, che è solo il protocollo usato per inviare la posta.
Si tratta di specificare l'uso Server SMTP di Harvard, che
è da qualche parte qui nel campus.
>> Questo sta dicendo che cosa TCP numero di porta per parlare,
e ho pensato che da su Google o chiedendo l'help desk.
E poi perché Harvard utilizza alcuni la sicurezza del sistema sul server-- di posta
almeno per crittografare il traffico tra l'utente e,
anche se chiunque può inviare a it-- Ho intenzione di attivare il protocollo TLS
per mantenere questo sicuro.
>> Ma questo è dove le cose ottenere un po 'paura.
Posso solo arbitrariamente dire che sono jharvard,
e posso solo arbitrariamente e-mail me stesso qui.
E poi posso specificare un soggetto con questa linea qui.
>> E questo sembra proprio brutto, ma è solo un mucchio di concatenazione.
Si scopre che PHP ha un simbolo super utile, come alcune lingue, l'operatore punto,
che concatena solo letteralmente corda dopo corda dopo corda,
e non si dispone di malloc o figura la lunghezza totale della stringa.
Devi solo farlo.
E in effetti, perché sto concatenando in tutte queste cose con questi punti,
è per questo che la mail che ho inviato sembrava come ha fatto.
>> E poi, infine qui, sto l'invio della posta.
Quindi, se questo è falso, Sto solo andando a morire,
che è una funzione che solo stampe alla schermata di qualche messaggio di errore.
Ma è, infatti, chiamando la funzione di invio.
Altrimenti, se tutto questo fallisce, mi reindirizza qui.
>> E perché ho visto che Mi sono registrato davvero?
Beh, è ​​successo proprio qui.
Così ho portare questo per un paio di motivi.
>> Uno, questo è esattamente come se si costruisce qualche sito per un progetto finale
o per il mondo reale, questo è come si invia promemoria via email
ai vostri clienti o utenti iscritti.
Questo è il modo di inviare promemoria di password.
Questo è il modo di inviare messaggi di persone che hanno un nuovo Facebook
messaggio in attesa o qualcosa del genere.
>> Ma si parla anche di il fatto che questo potrebbe
sono stati molto bene dal Davin o chiunque altro.
E dico questo tipo di con un sorriso perché sono
abbastanza sicuro di quello che sta succedendo attraverso molte delle vostre menti a questo punto.
Ma questo è uno di quelli che lo fanno, come ho dico, non come faccio io tipo di cose,
perché è banale creare messaggi di posta elettronica come questo.
Ma come avrete visto o leggere in Crimson,
negli ultimi tempi è anche abbastanza banale per persone
per risalire a qualche origine.
E chiedere a me un po 'di tempo, forse CS50 a pranzo, come ho
conobbe molto da vicino quasi al Consiglio ed anni
fa, quando ho scoperto come la connessione internet funzionava.
Quindi, in ogni case-- un po ' dopo il consiglio ed ha fatto.
>> Quindi, in ogni caso, vi è un tutta una serie di super globali,
come si chiamano qui, uno dei quali abbiamo saw-- simbolo del dollaro di sottolineatura postale.
C'è una controparte chiamata get, che è dove roba da un URL
finisce per andare.
E c'è un sacco di altri, sessione di too-- e server e biscotto.
Torneremo a Cookie un'altra volta,
ma sessione è genere di freddo perché in questo now-- fino now--
tutto quello che abbiamo fatto con un browser web è una sorta di apolide, per così dire.
Posso cliccare in giro, l'accesso file sul server, cosa
accade sullo schermo, ma quindi la connessione si chiude.
L'Internet Explorer o il Icona di Firefox si ferma la filatura
e basta vedere quello che la pagina web contiene.
>> Così HTTP è stateless in che una volta stabilita una connessione,
ottiene alcuni dati, il gioco è fatto.
Niente più collegamento, a differenza di Skype, a differenza di FaceTime, Gchat differenza, che
mantiene un costante connessione al server.
Il web è fondamentalmente scollegato, anche se ti
vedere fra non molto come possiamo simulare le cose
come la chat di Facebook e Gchat, che mantengono la illusion--
o effettivamente fare mantenere un costante collegamento con
più moderne tecnologie.
>> Ma se vado a, dire, counter.php, questo è un altro semplice esempio,
come vedremo, che pensa oggi Ho visitato il sito tempo zero.
Ma se io semplicemente ricaricare la pagina, in qualche modo sa che sono stato qui prima.
Se ricarico di nuovo, sa Sono stato qui prima.
E ancora e ancora e ancora e ancora.
>> Quindi c'è un po 'di più-plussing in corso, a meno di notare
la piccola cosa gira mai così brevemente sulla parte superiore e poi si disconnette,
quindi non è come se avessi un costante collegamento con l'apparecchio in uso.
Beh, se vado in counter.php, notare quanto sia semplice.
Io chiamo questo primo speciale funzione che faremo presto
iniziare a prendere per scontato chiamato start sessione.
Avviare una sessione.
>> E una sessione è d'ora in poi solo sarà un secchio, come un carrello
carrello in cui è possibile inserire i valori e il tipo di fiducia come programmatore
che sta andando ad essere qui quando l'utente viene back-- un secondo
più tardi, un'ora più tardi, anche un anno dopo, fino a quando lui o lei non si risolve
loro biscotti, come vedremo alla fine vediamo.
E ora non mi resta che una condizione if qui.
Quindi, se la seguente chiave, chiamato contatore, inserita in
di questo super global-- questo hash tavolo, se si will-- chiamato sessione,
poi andare avanti e prendere il valore dal think session--
di questo come un acquisto cart-- e memorizzarlo
in una variabile temporanea denominata contatore.
>> Altrimenti, se tale controvalore era non impostato nel cosiddetto carrello della spesa,
solo inizializzare a 0.
Infine, qui, andare a rimettere nei carrelli della spesa o della sessione
il valore del contatore +1.
Così si scopre che questo speciale contenitore qui--
che, di nuovo, è uno di questi associato array, una matrice che è possibile indicizzare
in parole invece di numbers-- persiste anche dopo che l'utente se ne va.
Ancora una volta, tornerò alla pagina ora.
E 'stato un minuto o giù di lì.
Ma ricorda che ho stato qui 19 volte prima.
Questo è il mio 20 ° visita.
>> E così questo sarà la chiave per mettere in atto qualsiasi sito web che ricorda
che si è registrato in, che si mette qualcosa letterale nel tuo carrello
comprare o che avete un po ' numero di messaggi in attesa.
Ogni volta che si desidera ricordare le informazioni,
vedremo che PHP, come diverse altre lingue,
ci fornisce questa illusione di stato anche se, come si vedrà in PSET 6,
come si sta facendo richieste HTTP dal client al server, il gioco è fatto.
Una volta arrivati ​​alla schiena che risposta, non c'è niente di più
di ritorno dal server per impostazione predefinita.
Ma vedremo come risolvere questo.
>> Bene, ora, cerchiamo di pulire questo un po '.
Abbiamo visto un paio di esempi diversi là.
Oh, e come una digressione, per chi ha familiarità o non familiare,
la ragione che il Frosh IM esempio è andato
di guardare davvero brutto da slightly-- bene,
ugly-- ancora per un po ' meno brutto anche se ancora brutto
è perché se guardiamo il codice sorgente qui
si scopre che ho questa al vertice del file.
>> Si scopre che il bootstrap è uno dei tanti librerie liberamente disponibili là fuori
che non esiste per i linguaggi di programmazione sempre, ma per i CSS o JavaScript
o HTML o un qualsiasi numero di lingue.
>> E queste persone qui-- originariamente uscito
di Twitter-- semplicemente un sacco di stili.
Si tratta di un file di massa qui che qualcuno ha scritto,
o qualcuno di ha scritto, nel corso del tempo che specifica i colori e la formattazione
e quant'altro in modo che posso tipo di prendere in prestito la loro sintassi
e non c'è bisogno di capire come a tracciare la mia forma.
Questo è anche ridotte di in modo che un computer può
capire, ma non necessariamente un essere umano.
Ecco, questo è proprio il motivo per cui il stilizzazione non è cambiato.
>> Ma veniamo ora fare meglio in termini di progettazione,
perché se restiamo in giù questa strada troppo a lungo,
il nostro codice sta per ottenere disordinato e Messier.
Quindi concentriamoci su questi esempi qui.
L'ultima per oggi.
>> Così qui è un super semplice la versione 1.0 del sito di CS50.
Ha solo collegamenti a lezioni e programma,
ed è con tale lista non ordinata tag-- il tag UL che abbiamo usato l'ultima volta.
E se in effetti, se aprire Visualizza sorgente pagina,
vedrete che si tratta di davvero, davvero semplice HTML.
Ed infatti, anche se questo è un file PHP sotto la cappa,
è ancora solo sputando out HTML solo per ora.
>> Quindi, se clicco su Lectures, vediamo che questo accada.
E se clicco su settimana pari a zero, vediamo questo.
E se clicco su Mercoledì, vediamo questo.
E questo a quanto pare è stato il PDF le diapositive quel giorno.
Tutto quello che ho fatto è legame con un anchor tag a questo URL qui.
>> Quindi questo è solo per dire che questo è un bel semplice versione del sito web di CS50.
Vediamo come è implementato.
Se vado nella directory mvc0, staremo a vedere alcuni file.
Uno è un README, quindi se alcune di queste è troppo veloce,
si può semplicemente curiosare più piacevole in seguito.
E notate qui è un file index.php.
Si scopre che, se lei stesso, l'umano,
non specificare un nome definitivo in un URL, il server web di solito
deduce qualche nome di default per voi.
Un indice di qualcosa di dot è in genere il valore predefinito.
>> Ecco, questo è il motivo per cui un momento fa quando ho visitato questo URL qui,
non il nome del file, nessun file estensione, nessun periodo nell'URL.
E 'solo sapeva in qualche modo magicamente per cercare index.php.
E 'solo una convenzione.
Potrebbe essere chiamato nulla.
>> Quindi, se io ora vado in index.php, vedrete
che, indeed-- facciamo sbarazzarsi dei commenti
qui perché non c'è davvero nulla di interessante da it--
questo è solo difficile codificato HTML.
Ecco, questo è coerente, però, con la mia richiesta
che si può mescolarsi HTML e PHP.
Non c'è reale logica di programmazione qui.
>> E gli altri file sono abbastanza molto proprio come poco interessante.
E 'solo una settimana hard-coded qui per una settimana me una settimana w,
per Lunedi e Mercoledì.
E poi se apro la settimana a zero, notare è quasi identico.
>> E questo è una specie di chiave da asporto.
Si noti quanto sia ridondante questo è.
Questi file malapena cambiano, ma io tirato uno di questi processi di copia / incolla
dove ho preso uno file-- presumibilmente in settimana zero-- copiato
quando la settimana è venuto in giro, e ottimizzato alcuni valori.
Probabilmente dovremmo essere in grado a fare meglio di così.
>> Quindi, torniamo fino a mvc e andare in versione uno.
E ho notato un alcuni file, perché ciò che
era comune a tutti quei file solo momento ago-- se torno alla versione 0,
torniamo in indice, e solo postulate--
una volta mi libero della comments-- quale parte di questa pagina
è presumibilmente in ognuno dei miei file?
Basta chiamare fuori.
Quali linee sono duplicati probabilmente in tutte queste pagine?
Sì?
>> STUDENTE: [incomprensibile].
>> DAVID J. MALAN: da 1 a 9.
Sì, assolutamente.
Da 1 a 9, eccetto forse 8 cambia un pò perchè CS50
diventa conferenze o Settimana zero o qualcosa del genere.
Ma quasi identico.
Quindi tutta questa roba è solo tipo di copiato e incollato.
E ci sono un paio altre linee mi viene in mente
di che sono probabilmente identici in tutti i file.
>> STUDENTE: 12 e 13.
DAVID J. MALAN: Sì.
Certo, 12, 13, e 14, probabilmente, solo perché le cose interessanti
sta accadendo sulle linee 11 e 10, così sembrerebbe.
Quindi diamo un'occhiata a versione 1, che cerca di migliorare su questo.
Nella versione 1 del presente example-- mvc ce la faremo spiegare cosa significa MVC in una moment--
se vado in indice, che tipo di guarda un po 'di confusione ora.
Non è così semplice come prima.
>> Ma una volta che si inizia a lesse con attenzione, è
piuttosto semplice quello che sta facendo.
A quanto pare la linea 1 e linea 8 sono sostituiti
tutte le cose che hai appena identified-- anche se solo per buona misura,
Ho lasciato le ULS lì solo nel caso in cui alcuni giorni non hanno un elenco di cose.
E lo richiedano è un po 'come libbra includere in C. Copia e incolla
il contenuto efficacemente proprio qui in questo file.
>> Quindi, in header.php, come si potrebbe dedurre dal suo nome,
sta per essere nell'intestazione della pagina.
È un po 'orfani qui.
Ha solo la parte superiore di esso, ma non c'è più il contenuto sotto.
>> E se guardo a piè di pagina nel frattempo, che era l'altro file mentioned--
questo è ancora meno interessante, ma ancora una volta, è comune a tutto.
Quindi questo è il piè di pagina.
Questa è l'intestazione.
Questo è il file che è cambiare, quindi perché non
cercare di scomporre la comunanza con queste due righe qui?
>> Ma possiamo pulire questo un po 'più lontano.
Ho intenzione di andare avanti e aprire versione a due in cui
vedremo che non c'è un nuovo file, helpers.php.
Staremo a vedere di cosa si tratta in un attimo.
Andiamo a indice, come il punto di ingresso come prima.
>> E ora mi accorgo che richiedono helpers.php, non di intestazione o piè di pagina.
Ma aiutanti è una specie di helpers.c e helpers.h da PSET 2
o PSET 3 tempo fa, quando in realtà ha cercare e trovare per questo PSET,
e hai avuto tutto il codice per l'ordinamento e la ricerca in un file separato.
Questo è quello che sta succedendo qui.
>> E ora la linea 3 sembra un po 'diverso.
Ed è una sola riga.
Per renderlo ancora più chiaro, ho potuto solo
do che questo sia stilisticamente coerente con tutto il resto che abbiamo fatto.
Ma non è davvero modificare la funzionalità.
E 'solo una riga di codice vero e proprio.
>> A quanto pare, c'è una funzione in qualche luogo chiamato render intestazione,
Ed è qui che le cose ottenere abbastanza potente.
Si noti che all'interno delle sue parentesi è ciò che altro pezzo di sintassi?
E 'probabilmente un po' difficile da dire, ma notare there's-- metto un po 'di bianco
lo spazio.
C'è parentesi quadre.
>> E parentesi quadre abbiamo visto un po 'fa nell'ambito di array associativi,
quali sono, ancora una volta, come tabelle hash.
E se si pensa ora a C, il ordine degli argomenti in una funzione
deve essere sempre la stessa.
Bisogna ricordare ciò che il ordinare è-- x, y, z o z, y, X--
e è necessario fornire sempre loro nello stesso ordine oppure cercare
se hai dimenticato.
>> Ma questo sembra essere un modo intelligente di superamento di un valore chiave arbitrario
coppie in base al quale il titolo è il nome di un argomento in questo caso
e CS50 è il suo valore.
E il fatto che io ho queste parentesi quadre
qui significa che ho potuto passare anche a qualcosa
come una settimana è 1 o 0 o 2 o 3.
Proprio per questo abbiamo parametrizzato questa funzione in modo
che possono essere necessari più ingressi, ma per ora è solo quello.
>> Se io ora vado in helpers.php, notare quello che sta facendo.
Questo è un po ' di nuove funzionalità,
ma per ora basta prendere sulla fede che si tratta di
la sintassi con cui si definire una funzione in PHP.
È letteralmente dice funzione.
Non si specifica un ritorno digitare, e questo è coerente
con dettaglio variabile precedente in cui non si ha realmente digita con forza.
>> Questo specifica solo che, per impostazione predefinita, questo
prende un associativa matrice come argomento.
E sai una cosa?
Se l'utente non passa uno in, assumere un valore predefinito.
>> Questa è una caratteristica che C non ha per noi, che è bello, perché ora
dati, anche se si non dare nulla,
sta per essere matrice ma uno vuoto.
E per inciso, estratto appena fa qualcosa di strano
dove prende tutte le chiavi da questo array associativo, tutte le cose
si potrebbe mettere tra parentesi quadre, e crea le variabili di fuori di essi
in modo che possiamo in ultima analisi, avere accesso a loro in footet.php e header.php.
Questo è un po 'astratto, così vorrei sottolineare questo fuori.
>> In index.php, noto che sono passando in una coppia di valori chiave di titolo
con un valore di CS50.
Se io ora guardo helpers.php, notare che RenderHeader
è l'estrazione che i dati che sto passando in, e quindi richiedono header.php.
Quello che ho fatto è una sorta di un povero uomo di implementazione ora di quanto segue.
>> Se apro header.php, Avviso che non ho più duro
codificato la parola CS50 in questo file di intestazione.
Ho messo questo certamente atrocemente nome funzione, HTML caratteri speciali,
in là.
A meno di notare quello che ho fatto.
Ho aperto HTML.
Poi ho aperto la testa e il titolo aperto.
>> E poi all'interno del titolo aperto e tag di chiusura, mi hanno un po 'di codice PHP.
E questa è una bella, ma di sintassi, il che significa che solo eco fuori.
Letteralmente significa questo-- eco il following--
ma questo è più sexy di scrivere.
Echo il titolo che è stato in passato.
>> Ma voi cosa ne pensate HTML carattere speciale è tutto,
soprattutto se si hanno una certa esperienza prima HTML?
Quali sono i caratteri potrebbe essere pericoloso passare in una pagina
dove si sta generando dinamicamente la pagina web con il codice come questo?
Lasciami andare a questo file, versione due, e vedere se non riesco a indurre questa.
>> Versione due è questo.
E notare tutto va bene, funziona bene.
Ma supponiamo che io vado in index.php e Ho specificato che il titolo della mia pagina
non è CS50.
E 'avviso scritto parentesi aperta ciao mondo, vicino singola citazione,
parentesi chiusa, punto e virgola, parentesi aperta, lo script barra.
>> Script, come vedremo finalmente vedere, è un tag
che è possibile utilizzare per usare di un altro linguaggio di programmazione chiamato
JavaScript all'interno di una pagina web.
E ora notare la logica qui.
Ecco una chiave denominata titolo.
Ecco è pazzesco valore a lungo ora.
>> Ma se vado a chi aiuta page- o meglio, la pagina di intestazione,
Io chiamo questa funzione su quel titolo prima.
Quindi, se io ora ricarica questa pagina, ho vedere questo, che sembra ridicolo,
ma è sicuro.
Sembra proprio stupido.
>> Ma supponiamo invece Avevo dimenticato questo.
E le mie parole, un numero diverso da zero di si dimentica di fare questo
e si otterrà un po 'laboriosa studente o un amico in arrivo
a voi in fiera CS50 o anonima di notte rovistando sul tuo sito web
ed essenzialmente iniettare codice a tua insaputa nel tuo sito
in qualche modo.
>> Perché se io sputo semplicemente out titolo qui e titolo
there-- bene, se il titolo letteralmente sembra che questo e PHP
come un linguaggio che può sputare le altre lingue il testo,
questo sta letteralmente andando di sostituire questo tag con,
Naturalmente, quello che ho messo altrove.
>> Quindi, se io ora vado qui e ricaricare dopo annullare quei meccanismi di sicurezza,
ora ho ciao mondo qui.
Ora che non è tutto così grande di un a che fare, ma si potrebbe fare qualcosa
un po 'più dannoso qui, come se ci fosse
altro tags-- come vedremo, una volta che spendiamo più tempo in Javascript-- come posizione
dot href ottiene, citazione, unquote, HTTP business.com, ma il contrario di quello
dall'altro giorno.
E ora è possibile indurre una web Pagina di andare effettivamente subito
a questa pagina web qui.
>> E in realtà, non voglio di andare anche a business.com
perché non voglio per sapere di cosa si tratta.
Ma anche questo innescherà codice essere iniettato in questa pagina.
Quindi questo è solo per dire che anche se stiamo introducendo super presto su alcuni
di queste strutture più complesse, è tutto verso la fine di fare in modo
che il codice non è sfruttabile.
>> Così ora una terza versione qui.
Sta diventando un po 'più elaborato.
Non ho davvero like-- il lato anale di me
è stato sempre un po 'infastidito dal fatto che avevo una funzione chiamata
RenderHeader e RenderFooter che erano quasi identici.
Così mi venne in mente, perché non fare I parametrizzare queste funzioni
in una sola chiamata di rendering, farlo prendere un secondo argomento
come il nome del modello, la finale a render-- o intestazione o piè di pagina?
E poi eventualmente, se voglio di passare in alcune coppie di valori chiave
come faccio io per il titolo per la intestazione, ma non per il piè di pagina,
Potrei farlo.
>> E così ora se vado in helpers.php, è un po 'più complessa.
E io agito le mani al dettagli, ma è solo una funzione.
Ecco, questo è un passo verso una migliore progettazione.
>> Possiamo prendere ulteriormente questo un passo.
Se vado nel mio quarto versione di questo, si noti oggi
che sto facendo qualcosa ancora più specie di criptico.
E so che questo è un lotto di assorbire in una volta,
ma siamo solo tipo di pulire le cose.
Ora sto mettendo i miei ausiliari file in una cartella chiamata
includes-- solo un arbitrario nome dove voglio mettere roba
che voglio include-- e poi il resto di questo è la stessa.
>> Ma se guardo ora in gedit, Avviso che ho deciso di eliminare
di tutti quegli altri file e ho li spostata, per esempio, in questa sede.
E poi nei modelli, Ho questo qui, anche.
E così questo è tutto ora verso un passo di utilizzare un migliore modello di progettazione.
E siamo molto velocemente intenzione di allontanarsi
dalla funzionalità predefinita di PHP, che abbiamo iniziato qui con,
dove basta commingle PHP, e il codice HTML e il CSS,
e basta sputare fuori e si va sulla tua strada.
Non sarà molto gestibile.
Proprio come in C, abbiamo iniziato a utilizzare più file e più funzioni
e factoring cose che fuori.
Faremo lo stesso qui.
Ed infatti, nel quinto e ultimo versione qui, ho fatto un'altra cosa.
È anche possibile utilizzare punto punto, che, ancora una volta, è solo la directory principale.
Per essere ancora più attenti alla sicurezza, perché se guardo l'ascolto
qui per la quinta e la versione finale, avviso che ho un elenco qui chiamato
pubblica, e quindi sulla stesso livello, per così dire,
Ho comprende e modelli e poi il file di testo readme.
>> E la ragione per cui ho strutturato ci si sente questo-- e tanti web
padroni di casa, soprattutto quelli $ 5 quelli mese o quelle 10 dollari al mese,
se hai mai avuto uno di questi services-- quello che molti di loro lo fanno
è solo che aspettano di scaricare tutto i file in una directory,
come abbiamo fatto già con questo primo esempio.
>> Ma non appena si inizia la costruzione di più siti sofisticati che solo memorizzano
dati che si preoccupano e file che si si preoccupano, in realtà organizzare le cose
correttamente e con più sicurezza coscienza nella mente può
cominciamo a difendere contro tutti gli amici
che hai dentro o al di fuori di questa classe che,
non appena si inizia a fare programmi di te sul web,
stanno per iniziare a raccogliere su di voi e su di essi.
>> E così vedremo in ultima analisi, in questo disegno.
Questa è solo una foto che raffigura il seguente.
Stiamo andando a mettere tutta la nostra logica di programmazione in uno o più file,
e stiamo per iniziare solo chiamando i controllori.
È il luogo dove il cervello di i nostri siti web sono in realtà.
Poi andremo a hanno vista e viste
sono così semplice come separato files-- chiamati modelli, spesso.
Hanno solo il l'estetica della mia pagina,
quello che voglio nella pagina di guardare like-- i colori e il layout
e le posizioni di tutte le variabili.
>> E poi più interessante che saremo alla fine arriva a
è il modello, che sta per essere solo la parola che schiaffo su altre tecnologie
che mettono in immagine, come i database attuali,
in modo che quando si desidera per salvare le informazioni,
non è sufficiente inviare una e-mail al Proctor o per te stesso,
in realtà memorizza in un database utilizzando un altro linguaggio conosciuto come SQL.
E così ce ne andremo qui oggi e pick up con questo il Mercoledì
e di introdurre i database poi.
>> [RIPRODUZIONE DI BRANI MUSICALI]