1 00:00:00,000 --> 00:00:03,920 >> [RIPRODUZIONE DI BRANI MUSICALI] 2 00:00:03,920 --> 00:00:11,760 3 00:00:11,760 --> 00:00:13,800 >> DAVID J. MALAN: Va bene. 4 00:00:13,800 --> 00:00:15,640 Questo è CS50. 5 00:00:15,640 --> 00:00:17,620 Questo è l'inizio di otto settimane. 6 00:00:17,620 --> 00:00:22,440 E si può ricordare che abbiamo lasciato ultima volta che guardando un nuovo linguaggio 7 00:00:22,440 --> 00:00:23,240 del tutto. 8 00:00:23,240 --> 00:00:25,905 In effetti, uno che è abbastanza leggero e non è nemmeno 9 00:00:25,905 --> 00:00:26,940 un linguaggio di programmazione. 10 00:00:26,940 --> 00:00:31,100 Si tratta di un linguaggio di markup che ci permette di in realtà strutturare e rendere le pagine web. 11 00:00:31,100 --> 00:00:33,350 E quando qualcosa d'altro in collaborazione con questo-- 12 00:00:33,350 --> 00:00:35,670 o presto sarà, se non l'hai già. 13 00:00:35,670 --> 00:00:38,530 Stiamo andando a utilizzare Cascading Fogli di stile o CSS, che 14 00:00:38,530 --> 00:00:40,971 è un altro tipo di linguaggio con proprietà e valori 15 00:00:40,971 --> 00:00:43,220 che sta per farci fare cose come cambiare il colore 16 00:00:43,220 --> 00:00:46,010 e modificare la posizione e questo tipo di modifiche. 17 00:00:46,010 --> 00:00:49,940 Ma oggi e in poi, iniziamo a concentrarsi sulle lingue più potenti, 18 00:00:49,940 --> 00:00:52,810 linguaggi di programmazione come PHP effettivi. 19 00:00:52,810 --> 00:00:54,880 >> Così PHP è stato intorno per qualche tempo. 20 00:00:54,880 --> 00:00:56,810 E, come vedrete, è è stato progettato principalmente 21 00:00:56,810 --> 00:01:00,280 nella fase iniziale, per gli effettivi utilizzare nello sviluppo web 22 00:01:00,280 --> 00:01:02,360 e in realtà la generazione di pagine web. 23 00:01:02,360 --> 00:01:04,849 Quindi che tipo di Caratteristiche fa una lingua 24 00:01:04,849 --> 00:01:10,040 necessario al fine di rendere web pagine in modo dinamico con esso? 25 00:01:10,040 --> 00:01:14,760 >> In altre parole, se si desidera generare contenuti dynamically-- come Facebook di 26 00:01:14,760 --> 00:01:19,480 Newsfeed, che cambia continuamente, o messaggi istantanei che compaiono di tanto 27 00:01:19,480 --> 00:01:21,872 a tempo-- come quello che è il pezzo chiave di funzionalità 28 00:01:21,872 --> 00:01:24,580 è necessario in un linguaggio di programmazione che ti lascerebbe in modo dinamico 29 00:01:24,580 --> 00:01:28,070 stampare le nuove informazioni sullo schermo? 30 00:01:28,070 --> 00:01:28,685 >> STUDENTE: Codice. 31 00:01:28,685 --> 00:01:29,560 DAVID J. MALAN: Codice. 32 00:01:29,560 --> 00:01:30,440 Ok. 33 00:01:30,440 --> 00:01:31,995 Prendiamo questo. 34 00:01:31,995 --> 00:01:35,310 Un po 'più precisa. 35 00:01:35,310 --> 00:01:37,639 Voglio dire, potremmo fare questo con C, francamente. 36 00:01:37,639 --> 00:01:38,930 Sarebbe un dolore al collo. 37 00:01:38,930 --> 00:01:41,045 Ma-- è questo impegno? 38 00:01:41,045 --> 00:01:41,895 >> STUDENTE: Sì. 39 00:01:41,895 --> 00:01:42,677 Variabili, forse? 40 00:01:42,677 --> 00:01:43,760 DAVID J. MALAN: Variabili. 41 00:01:43,760 --> 00:01:44,160 OK, certo. 42 00:01:44,160 --> 00:01:45,740 Le variabili possono certamente aiutarci. 43 00:01:45,740 --> 00:01:47,020 E anche qualcosa di più semplice. 44 00:01:47,020 --> 00:01:50,640 Abbiamo usato nella prima Programma del primo giorno 45 00:01:50,640 --> 00:01:55,686 quando abbiamo effettivamente detto "ciao mondo". 46 00:01:55,686 --> 00:01:56,570 >> STUDENTE: Stampa. 47 00:01:56,570 --> 00:01:57,778 >> DAVID J. MALAN: Stampa, giusto? 48 00:01:57,778 --> 00:02:01,050 Stampa o printf nel mondo di C. Quindi tutto questo tempo, 49 00:02:01,050 --> 00:02:03,362 abbiamo avuto al nostro disposizione una language-- C, 50 00:02:03,362 --> 00:02:05,570 in particular-- e anche Scratch è per questo che 51 00:02:05,570 --> 00:02:07,400 può generare stringhe di testo. 52 00:02:07,400 --> 00:02:11,090 >> Beh, se l'HTML, come abbiamo visto la scorsa settimana, è solo un insieme di stringhe di testo 53 00:02:11,090 --> 00:02:14,692 anche se con staffe aperte e chiuse staffe e qualche tipo di rima 54 00:02:14,692 --> 00:02:16,650 e la ragione dietro di esso, beh, allora potremmo davvero 55 00:02:16,650 --> 00:02:20,440 iniziare a generare le pagine web o manualmente digitando fuori in gedit 56 00:02:20,440 --> 00:02:23,870 o in Microsoft Word, per questo matter-- abbiamo solo bisogno di un editor di testo. 57 00:02:23,870 --> 00:02:26,830 >> Oppure potremmo scrivere il codice, per il tuo suggerimento 58 00:02:26,830 --> 00:02:30,435 in precedenza, che avrebbe cerchiamo generare dinamicamente codice HTML, 59 00:02:30,435 --> 00:02:32,560 e questo è quello che stiamo andando per iniziare a fare con PHP 60 00:02:32,560 --> 00:02:34,900 e, infine, anche con un linguaggio chiamato JavaScript, 61 00:02:34,900 --> 00:02:37,910 è utilizzare una lingua per generare un'altra. 62 00:02:37,910 --> 00:02:40,720 E in effetti, questo è ciò che Facebook e molti, molti altri siti 63 00:02:40,720 --> 00:02:44,530 fare per davvero in modo dinamico visualizzare le nuove informazioni a voi. 64 00:02:44,530 --> 00:02:47,117 >> Quindi cominciamo con un questo-- criptico linea di ricerca, ma una 65 00:02:47,117 --> 00:02:48,450 che in realtà è piuttosto potente. 66 00:02:48,450 --> 00:02:51,210 Finora, abbiamo usato C, che è un linguaggio compilato. 67 00:02:51,210 --> 00:02:55,050 E solo un rapido recap-- un compilato lingua ha quali caratteristiche? 68 00:02:55,050 --> 00:02:59,050 È ovviamente necessario compilare si, ma cosa significa? 69 00:02:59,050 --> 00:03:00,505 Sì? 70 00:03:00,505 --> 00:03:02,940 >> STUDENTE: Ha bisogno di essere assemblati in codice macchina. 71 00:03:02,940 --> 00:03:03,060 >> DAVID J. MALAN: OK. 72 00:03:03,060 --> 00:03:04,530 Deve essere assemblato in codice macchina. 73 00:03:04,530 --> 00:03:07,340 Quindi, prendete il vostro codice sorgente, che è una sorta di inglese-like. 74 00:03:07,340 --> 00:03:09,270 Si converte che per livello più basso qualcosa, 75 00:03:09,270 --> 00:03:11,590 che è in ultima analisi, chiamato oggetto code-- 0 e 1.. 76 00:03:11,590 --> 00:03:14,830 Ed è quelle di 0 e 1 che di una CPU, come quelli prodotti da Intel, 77 00:03:14,830 --> 00:03:16,110 in realtà capire. 78 00:03:16,110 --> 00:03:19,690 >> Ora, PHP e Python e Ruby e JavaScript e mazzi di altri 79 00:03:19,690 --> 00:03:23,190 le lingue non vengono compilati lingue, ma interpretato lingue, 80 00:03:23,190 --> 00:03:26,630 il che significa che solo la digitazione e poi non li trasformano in 0 e 1.. 81 00:03:26,630 --> 00:03:30,790 È invece proprio fornisci poi come input per il programma di qualcun altro, 82 00:03:30,790 --> 00:03:32,080 chiamato un interprete. 83 00:03:32,080 --> 00:03:34,460 E quella persona programma è stato progettato 84 00:03:34,460 --> 00:03:38,280 per capire ciò che ogni e ogni simbolo in Python o PHP 85 00:03:38,280 --> 00:03:42,650 o Ruby o un qualsiasi numero di altre lingue significa. 86 00:03:42,650 --> 00:03:44,760 >> E così tutti abbiamo bisogno è qualcosa di simile. 87 00:03:44,760 --> 00:03:46,350 Quindi, in realtà, ho intenzione di andare oltre all'apparecchio 88 00:03:46,350 --> 00:03:48,100 qui, proprio in qualsiasi vecchia finestra, e siamo 89 00:03:48,100 --> 00:03:52,580 intenzione di andare avanti e aprire un file chiamato, dire, ciao. 90 00:03:52,580 --> 00:03:55,780 Ora in precedenza, avrei potuto salvare questo anche con un estensione del file, 91 00:03:55,780 --> 00:03:57,910 ma ho intenzione di fare qualcosa di ancora più semplice qui. 92 00:03:57,910 --> 00:04:02,450 Ho intenzione di andare avanti e iniziare questo file con questa sintassi criptica. 93 00:04:02,450 --> 00:04:06,310 Quindi "utente, bin, env, per l'ambiente, php. " 94 00:04:06,310 --> 00:04:10,670 >> Questo è semplicemente una linea di codice che è dirò il mio sistema operativo, 95 00:04:10,670 --> 00:04:13,730 andare a trovare nel vostro locale ambiente qualunque essa sia, 96 00:04:13,730 --> 00:04:18,149 ovunque PHP è-- il interpreter-- e andare avanti e utilizzare tale interprete 97 00:04:18,149 --> 00:04:20,589 interpretare il codice seguente. 98 00:04:20,589 --> 00:04:22,760 Ora, questo è una specie di una caratteristica brutta di PHP. 99 00:04:22,760 --> 00:04:24,980 Ma in questo linguaggio, qualsiasi volta che si scrive codice PHP, 100 00:04:24,980 --> 00:04:29,200 è necessario disporre di uno di questi brutto Tag PHP che delimitano l'inizio 101 00:04:29,200 --> 00:04:32,220 del code-- 00:04:37,430 >> Ma al di sotto di qui, ora posso fare qualcosa abbastanza semplice, come printf ciao virgola 103 00:04:37,430 --> 00:04:40,922 mondo backslash n vicino preventivo, parentesi chiusa. 104 00:04:40,922 --> 00:04:42,630 E poi per buona misura, vado 105 00:04:42,630 --> 00:04:45,380 di andare avanti e chiudere il mio tag php qui 106 00:04:45,380 --> 00:04:47,390 in modo che sembra tutto abbastanza ben stampata. 107 00:04:47,390 --> 00:04:50,780 >> E non appena si fa clic su Salva, gedit è in realtà abbastanza intelligente 108 00:04:50,780 --> 00:04:54,620 a guardare quella prima riga e rendi conto, oh, si sta scrivendo codice PHP. 109 00:04:54,620 --> 00:04:56,710 Permettetemi di evidenziazione della sintassi con i colori 110 00:04:56,710 --> 00:04:58,690 qui in modo che si leva in piedi un po 'di più. 111 00:04:58,690 --> 00:05:01,300 Ma ora ho intenzione di andare verso il basso per la mia finestra di terminale. 112 00:05:01,300 --> 00:05:02,340 Io lo zoom in. 113 00:05:02,340 --> 00:05:06,860 >> Questo programma è stato chiamato "ciao," così ho intenzione di fare barra dot ciao, 114 00:05:06,860 --> 00:05:07,990 ma permesso negato. 115 00:05:07,990 --> 00:05:08,490 E bash. 116 00:05:08,490 --> 00:05:10,610 In realtà abbiamo sentito parlare di tale cosa che un paio di settimane fa 117 00:05:10,610 --> 00:05:13,140 nel contesto di Shellshock, uno di quegli insetti. 118 00:05:13,140 --> 00:05:16,240 >> Ma il permesso negato che abbiamo visto prima, magari in un contesto diverso. 119 00:05:16,240 --> 00:05:19,060 Qualcuno ricorda come si potrebbe risolvere qualcosa 120 00:05:19,060 --> 00:05:22,100 in cui il permesso è negato in questo modo? 121 00:05:22,100 --> 00:05:23,490 Qual è il comando, almeno? 122 00:05:23,490 --> 00:05:24,159 >> STUDENTE: chmod. 123 00:05:24,159 --> 00:05:26,700 DAVID J. MALAN: Sì, chmod, per cambiare la modalità di un file. 124 00:05:26,700 --> 00:05:30,171 E avrai tutto il più utilizzato per la prossima settimana con un conseguente problema 125 00:05:30,171 --> 00:05:30,670 set. 126 00:05:30,670 --> 00:05:33,211 Ma per ora, ho intenzione di cambiare il modo di non essere leggibile, 127 00:05:33,211 --> 00:05:36,650 ma per dare a tutti executeability privilegi, la capacità 128 00:05:36,650 --> 00:05:37,710 per eseguire questo file. 129 00:05:37,710 --> 00:05:40,360 E ho intenzione di assegnare che al file ciao. 130 00:05:40,360 --> 00:05:45,150 >> Se io ora faccio barra dot ciao entrare, vedere, infatti, il mio programma, ciao mondo. 131 00:05:45,150 --> 00:05:48,760 E che passo fatto che chiaramente ignorare del tutto? 132 00:05:48,760 --> 00:05:49,520 Compilazione. 133 00:05:49,520 --> 00:05:51,680 Così ho appena eseguito questo programma molto semplicemente. 134 00:05:51,680 --> 00:05:55,690 >> E si scopre che si può fare questo con un sacco di sintassi che ricorda C. 135 00:05:55,690 --> 00:06:03,400 Lasciami andare per il codice di oggi, che ho messo nel mio elenco vhost 136 00:06:03,400 --> 00:06:05,250 qui, per ragioni reali ci torneremo a. 137 00:06:05,250 --> 00:06:09,350 E ho intenzione di andare in, diciamo, le condizioni 1. 138 00:06:09,350 --> 00:06:12,450 >> E vedrete qui, prima e soprattutto, un sacco di commenti. 139 00:06:12,450 --> 00:06:15,240 Ma questo è in realtà una ri-creazione in PHP 140 00:06:15,240 --> 00:06:18,960 di un programma che abbiamo fatto in settimana uno chiamato condizioni 1.c 141 00:06:18,960 --> 00:06:20,690 in cui lo scopo di vita di questo programma 142 00:06:20,690 --> 00:06:22,950 è apparentemente di chiedere l'utente per un numero intero 143 00:06:22,950 --> 00:06:25,270 e poi fare un po 'birichino analisi su cui esso 144 00:06:25,270 --> 00:06:29,510 tu dici se è positivo o negativo o uguale a zero. 145 00:06:29,510 --> 00:06:34,220 E io portare questo solo perché, tranne forse un piccolo dettaglio, 146 00:06:34,220 --> 00:06:37,150 è indistinguibile così lontano da C. 147 00:06:37,150 --> 00:06:39,930 >> Qual è la una caratteristica qui che forse salta fuori 148 00:06:39,930 --> 00:06:41,410 a voi come un po 'diverso? 149 00:06:41,410 --> 00:06:42,160 Forse due cose. 150 00:06:42,160 --> 00:06:42,660 Sì? 151 00:06:42,660 --> 00:06:44,070 >> STUDENTE: Segno del dollaro n? 152 00:06:44,070 --> 00:06:44,944 >> DAVID J. MALAN: Sì. 153 00:06:44,944 --> 00:06:46,210 Così il segno del dollaro n è presente. 154 00:06:46,210 --> 00:06:48,120 E il segno del dollaro, come vedremo, sono in corso 155 00:06:48,120 --> 00:06:51,460 essere una correzione all'inizio di qualsiasi variabile in PHP. 156 00:06:51,460 --> 00:06:54,250 E 'il bene e il bene in bad-- che è una specie di ovvio ciò che è 157 00:06:54,250 --> 00:06:56,797 una variabile, male che è ancora un'altra cosa da scrivere. 158 00:06:56,797 --> 00:06:58,630 E c'è un altro cosa che non abbiamo abbastanza 159 00:06:58,630 --> 00:07:00,876 visto, almeno da questo ortografico. sì? 160 00:07:00,876 --> 00:07:01,630 >> STUDENTE: Readline. 161 00:07:01,630 --> 00:07:02,671 >> DAVID J. MALAN: Readline. 162 00:07:02,671 --> 00:07:06,550 Readline non abbiamo visto, di per sé, in C, anche se esiste qualcosa 163 00:07:06,550 --> 00:07:09,530 simile, ma abbiamo utilizzato getString, e questa è la sua controparte. 164 00:07:09,530 --> 00:07:12,950 Quindi, se vado in questo directory, che risulta essere, 165 00:07:12,950 --> 00:07:18,030 come spiegherò in un po 'nel mio vhost directory e la mia fonte Una directory, 166 00:07:18,030 --> 00:07:22,730 e vado avanti e faccio barra dot conditions-- whoops-- dot barra 167 00:07:22,730 --> 00:07:26,710 condizioni 1, vedrete, ancora una volta, la stessa autorizzazione issue-- negato. 168 00:07:26,710 --> 00:07:33,610 >> Permettetemi quindi di ingrandire e fare chmod un plus x delle condizioni, condizioni oblique di punti. 169 00:07:33,610 --> 00:07:35,222 Mi piacerebbe un numero intero, per favore, 50. 170 00:07:35,222 --> 00:07:36,930 E potremmo giocare a questo gioco tutto il giorno. 171 00:07:36,930 --> 00:07:39,140 Sta andando a comportarsi esattamente come ha fatto nella prima settimana. 172 00:07:39,140 --> 00:07:42,860 >> OK non così tanto diversa, ad eccezione non solo quella leggera po 'di sintassi, 173 00:07:42,860 --> 00:07:45,490 ma in cima, ho di nuovo avuto questa linea che 174 00:07:45,490 --> 00:07:49,760 mi ha permesso di creare qualcosa che si presenta come un programma in C chiamato ciao, 175 00:07:49,760 --> 00:07:51,150 chiamati condizioni 1. 176 00:07:51,150 --> 00:07:54,520 Ma non è 0 e di quelli Sto eseguendo direttamente. 177 00:07:54,520 --> 00:07:57,620 E 'invece l'esecuzione di questo interprete il cui nome 178 00:07:57,620 --> 00:07:59,440 sembra essere identica alla lingua. 179 00:07:59,440 --> 00:08:04,970 Il programma si chiama PHP, e il mio codice sotto la linea si sta passando in esso. 180 00:08:04,970 --> 00:08:07,740 >> Possiamo fare un altro abbastanza semplice esempio che ricorda qualcosa 181 00:08:07,740 --> 00:08:09,240 abbiamo fatto settimane fa. 182 00:08:09,240 --> 00:08:12,020 Di nuovo, questo è una sorta di pezzo di codice arbitrario 183 00:08:12,020 --> 00:08:14,000 che a quanto pare fa quello che quando lo si esegue? 184 00:08:14,000 --> 00:08:15,625 Che cosa è questo andare in stampa, presumibilmente? 185 00:08:15,625 --> 00:08:23,540 186 00:08:23,540 --> 00:08:28,250 >> Quindi inizialmente sulla linea 16, è per dire x ora è 2, probabilmente. 187 00:08:28,250 --> 00:08:30,920 % D è uguale a $ i per printf. 188 00:08:30,920 --> 00:08:33,460 Allora è cubatura, puntino, dot, dot, in linea 17. 189 00:08:33,460 --> 00:08:36,299 E poi la linea 18 viene visualizzato per chiamare una funzione Cubed. 190 00:08:36,299 --> 00:08:37,600 E dove è definito Cubed? 191 00:08:37,600 --> 00:08:40,319 >> Beh, sembra che in linea 25, in modo che non è tutto così diverso. 192 00:08:40,319 --> 00:08:42,610 Ho alcuni commenti qui sopra essa, ma per la maggior parte, 193 00:08:42,610 --> 00:08:45,370 è una abbastanza semplice porting o la conversione 194 00:08:45,370 --> 00:08:48,470 dal programma C per la versione di PHP. 195 00:08:48,470 --> 00:08:52,670 Ma ora ci sono un paio di differenze che forse dovrebbe saltare fuori. 196 00:08:52,670 --> 00:08:56,100 Che altro è diverso su come si potrebbe scrivere questo stesso programma in C? 197 00:08:56,100 --> 00:08:57,900 >> STUDENTE: [incomprensibile]. 198 00:08:57,900 --> 00:09:00,070 >> DAVID J. MALAN: Non c'è nessun prototipo sulla parte superiore. 199 00:09:00,070 --> 00:09:03,210 Quindi francamente PHP-- e, una sacco di languages-- moderna 200 00:09:03,210 --> 00:09:06,920 sono molto più intelligente e più disponibile di compilatori C in quanto si 201 00:09:06,920 --> 00:09:09,740 può mettere la funzione qui, si può mettere una funzione di quaggiù, 202 00:09:09,740 --> 00:09:12,740 e l'interprete sta andando per farti il ​​favore di leggere 203 00:09:12,740 --> 00:09:16,010 l'intero file prima di decidere che qualche funzione non esiste. 204 00:09:16,010 --> 00:09:17,970 So Nice miglioramenti anni successivi. 205 00:09:17,970 --> 00:09:22,126 Ma c'è anche qualcosa di altro diverso o assente qui. 206 00:09:22,126 --> 00:09:22,626 Sì? 207 00:09:22,626 --> 00:09:25,084 >> STUDENTE: [incomprensibile]. 208 00:09:25,084 --> 00:09:27,750 DAVID J. MALAN: Non c'è bisogno di dichiarare i tipi di variabili, 209 00:09:27,750 --> 00:09:31,780 quindi vedremo fra poco che ci sono diversi tipi in PHP, 210 00:09:31,780 --> 00:09:34,970 ma non è necessario specificarli, che è anche bene e nel male. 211 00:09:34,970 --> 00:09:36,623 E c'è un'altra cosa che mancava. 212 00:09:36,623 --> 00:09:37,430 >> STUDENTE: Non c'è librerie. 213 00:09:37,430 --> 00:09:38,630 >> DAVID J. MALAN: Non ci sono biblioteche. 214 00:09:38,630 --> 00:09:39,350 OK, così che è bello. 215 00:09:39,350 --> 00:09:40,540 Abbiamo un sacco più out of the box. 216 00:09:40,540 --> 00:09:43,373 Quindi c'è in realtà molto di più cose di quanto ho pensato che erano diverse. 217 00:09:43,373 --> 00:09:44,350 Che ne dite di modo in retro? 218 00:09:44,350 --> 00:09:46,032 Che cos'è? 219 00:09:46,032 --> 00:09:46,740 Dicono che una volta di più? 220 00:09:46,740 --> 00:09:47,960 >> STUDENTE: Pointer. 221 00:09:47,960 --> 00:09:49,270 >> DAVID J. MALAN: No puntatori. 222 00:09:49,270 --> 00:09:51,280 OK, almeno in questo esempio, non. 223 00:09:51,280 --> 00:09:52,070 Questo è giusto. 224 00:09:52,070 --> 00:09:55,090 Quindi non ci sono puntatori in PHP realtà in generale. 225 00:09:55,090 --> 00:09:58,730 Ci sono qualcosa chiamato riferimenti, ma noi non spendere troppo tempo lì. 226 00:09:58,730 --> 00:09:59,520 E che altro? 227 00:09:59,520 --> 00:10:00,185 >> STUDENTE: principale. 228 00:10:00,185 --> 00:10:01,060 DAVID J. MALAN: principale. 229 00:10:01,060 --> 00:10:02,768 Quindi questo è stato il biggie Stavo pensando di. 230 00:10:02,768 --> 00:10:04,660 Si noti non c'è punto di ingresso principale. 231 00:10:04,660 --> 00:10:06,525 È sufficiente iniziare a scrivere il codice. 232 00:10:06,525 --> 00:10:08,400 E questo è in realtà andando essere vantaggioso 233 00:10:08,400 --> 00:10:10,560 quando abbiamo Transizione momentaneamente in realtà utilizzando 234 00:10:10,560 --> 00:10:13,980 questo stesso linguaggio per il web-based programmazione, per il quale 235 00:10:13,980 --> 00:10:16,580 non vogliono avere un solo punto di ingresso. 236 00:10:16,580 --> 00:10:19,980 Si potrebbe desiderare di avere un gruppo di URL, un gruppo di file diversi 237 00:10:19,980 --> 00:10:22,930 tutto prendendo in input dell'utente e produrre in uscita. 238 00:10:22,930 --> 00:10:27,130 >> Ma qui è il molto sconfortante esempio che ho promesso l'ultima volta, 239 00:10:27,130 --> 00:10:30,130 vale a dire in questa cartella qui, errori di ortografia. 240 00:10:30,130 --> 00:10:33,680 Quindi, in questo file correttore ortografico, che si non spendere troppo tempo su, non vi è 241 00:10:33,680 --> 00:10:37,870 essenzialmente un porting-- P-O-R-T. E 'solo la parola data quando, per esempio, 242 00:10:37,870 --> 00:10:40,800 si converte da una lingua ad un altro manuale di solito. 243 00:10:40,800 --> 00:10:45,680 >> Questo è un porting di PC versione di correttore ortografico da PSET 5. 244 00:10:45,680 --> 00:10:48,856 E ho provato a convertire in sostanza linea per linea il più vicino possibile. 245 00:10:48,856 --> 00:10:51,730 Quindi, se vi piace questo genere di cose, in realtà la pena a un certo punto 246 00:10:51,730 --> 00:10:54,229 tirando entrambi fianco a lato e vedere che cosa è lo stesso 247 00:10:54,229 --> 00:10:55,230 e cosa c'è di diverso. 248 00:10:55,230 --> 00:10:57,510 Ma sono maledettamente simili. 249 00:10:57,510 --> 00:11:00,110 Se vi ricordate cosa correttore ortografico anche sembrava, 250 00:11:00,110 --> 00:11:02,110 anche se non l'hai fatto essere necessario modificare questo file, 251 00:11:02,110 --> 00:11:04,860 è abbastanza simile strutturalmente con solo un paio 252 00:11:04,860 --> 00:11:06,200 di modifiche qua e là. 253 00:11:06,200 --> 00:11:10,140 >> Quindi questo è solo per dire che è piuttosto semplice per convertire correttore ortografico 254 00:11:10,140 --> 00:11:12,000 da C a PHP. 255 00:11:12,000 --> 00:11:15,390 Ma nel dizionario, c'è qualcosa di ancora più interessante. 256 00:11:15,390 --> 00:11:19,270 Lasciami andare avanti e creare il mio file dictionary.php. 257 00:11:19,270 --> 00:11:24,010 Quindi, un po 'diverso, in quanto che chiameremo .php invece di .c. 258 00:11:24,010 --> 00:11:26,980 Poiché si tratta di un file PHP, ho fare-- leggermente annoyingly-- hanno 259 00:11:26,980 --> 00:11:30,132 per avviare il file con un tag php del genere. 260 00:11:30,132 --> 00:11:32,340 E ho intenzione di andare avanti e definire alcune funzioni. 261 00:11:32,340 --> 00:11:35,770 Funzione chiamata di controllo, che è andando a prendere in una parola come prima. 262 00:11:35,770 --> 00:11:37,520 Ma di questo argomento andando ad avere un dollaro 263 00:11:37,520 --> 00:11:39,840 firmare perché siamo, ancora una volta, utilizzando PHP. 264 00:11:39,840 --> 00:11:42,350 Un'altra funzione da dictionary.c era carico 265 00:11:42,350 --> 00:11:47,120 e ha preso il nome di un dizionario, così vado a prendere quella funzione pronto ad andare. 266 00:11:47,120 --> 00:11:50,920 >> Un altro in dictionary.c era quello? 267 00:11:50,920 --> 00:11:54,580 La dimensione era uno di quelli più belli, a almeno se hai tenuto qualche variabile intorno. 268 00:11:54,580 --> 00:11:57,830 così formato deve solo restituire una variabile. 269 00:11:57,830 --> 00:11:59,090 E poi c'era scarico. 270 00:11:59,090 --> 00:12:02,830 >> Quindi ci sono stati questi quattro funzioni problema set 5 271 00:12:02,830 --> 00:12:06,770 che avevi bisogno di implementare con qualche struttura di dati o strutture. 272 00:12:06,770 --> 00:12:10,170 Così ho promesso che in PHP, possiamo dichiarare 273 00:12:10,170 --> 00:12:14,490 una tabella hash, per esempio, tutto ciò che più facilmente. 274 00:12:14,490 --> 00:12:17,377 Infatti, se voglio una tabella hash, Sto solo andando ad andare in quel modo 275 00:12:17,377 --> 00:12:18,460 e c'è la mia tabella di hash. 276 00:12:18,460 --> 00:12:21,555 E questa è la nota, sconfortante, che abbiamo lasciato su l'ultima volta. 277 00:12:21,555 --> 00:12:23,930 E sai una cosa, se avessi voluto una variabile per dimensioni, ben, 278 00:12:23,930 --> 00:12:25,867 questo non è tutto così diversa da C, 279 00:12:25,867 --> 00:12:27,450 ma ho intenzione di andare avanti e farlo. 280 00:12:27,450 --> 00:12:28,630 E notare alcun tipo di dati. 281 00:12:28,630 --> 00:12:31,180 E ci tornerò più tardi e effettivamente aggiungere alcuni commenti qui. 282 00:12:31,180 --> 00:12:32,480 Ma per quanto riguarda il carico? 283 00:12:32,480 --> 00:12:35,780 >> Se Dizionario simbolo del dollaro è il nome del mio file 284 00:12:35,780 --> 00:12:39,600 e io in realtà voglio caricare parole in questa tabella la società, 285 00:12:39,600 --> 00:12:42,360 Posso effettivamente fare qualcosa di abbastanza semplice. 286 00:12:42,360 --> 00:12:44,880 Tra-- e questo è minorly annoying-- in PHP, 287 00:12:44,880 --> 00:12:47,710 è necessario specificare all'interno di una funzione se 288 00:12:47,710 --> 00:12:51,060 vuole accedere ad alcune globale variabile che è definita al di fuori. 289 00:12:51,060 --> 00:12:53,530 >> Ma non è particolarmente interessante in questo momento. 290 00:12:53,530 --> 00:12:57,920 La cosa più interessante è questo per ogni costrutto che ho detto l'ultima volta. 291 00:12:57,920 --> 00:13:01,880 E si scopre che il PHP ha una funzione chiamato file il cui scopo nella vita 292 00:13:01,880 --> 00:13:05,550 è quello di aprire un file e leggere in tutte le linee in un array 293 00:13:05,550 --> 00:13:06,840 e la mano di nuovo a. 294 00:13:06,840 --> 00:13:12,170 >> Vale a dire che posso fare in modo dizionario che ora in modo efficace quando chiamo il file, 295 00:13:12,170 --> 00:13:15,472 questo sta a portata di mano me indietro un array di parole dal file. 296 00:13:15,472 --> 00:13:16,430 Non è affatto buono. 297 00:13:16,430 --> 00:13:20,130 E 'ancora in corso di essere una linea di parole, qualcosa di lineare. 298 00:13:20,130 --> 00:13:23,880 Ma posso andare avanti e iterare su ciascuna di queste parole usando 299 00:13:23,880 --> 00:13:25,710 che la sintassi che abbiamo visto brevemente l'ultima volta. 300 00:13:25,710 --> 00:13:27,940 E vedrete più nel PSET prossimo. 301 00:13:27,940 --> 00:13:32,070 >> Ma ora ho un loop di iterazione su ogni parola del dizionario. 302 00:13:32,070 --> 00:13:36,100 E su ogni iterazione, ricordo sono chiamando la parola corrente "parola". 303 00:13:36,100 --> 00:13:39,790 E tutto sta andando a prendere per mettere una parola nel dizionario è 304 00:13:39,790 --> 00:13:43,530 sta per essere parola indovinare "vero". 305 00:13:43,530 --> 00:13:44,740 Questa è la mia funzione di inserimento. 306 00:13:44,740 --> 00:13:46,661 Questa è la mia funzione di caricamento per il mio dizionario. 307 00:13:46,661 --> 00:13:49,410 Ora è un po 'un imbroglio, perché, si sa che cosa, c'è in realtà 308 00:13:49,410 --> 00:13:52,920 barra rovesciata n di a fine le parole che forse dovrei liberarmi di, 309 00:13:52,920 --> 00:13:56,380 ma questo non è un problema perché PHP ha un taglio che funzione chiamata letteralmente 310 00:13:56,380 --> 00:13:58,480 braciole di fuori di un carattere proprio alla fine. 311 00:13:58,480 --> 00:13:59,400 Quindi nessun problema. 312 00:13:59,400 --> 00:14:02,199 Siamo andati avanti e in realtà accorciato che per proprio questo. 313 00:14:02,199 --> 00:14:05,240 E ora forse dovrei tenere traccia di dimensioni, quindi cerchiamo di fare almeno questo-- 314 00:14:05,240 --> 00:14:05,835 dimensioni ++. 315 00:14:05,835 --> 00:14:07,339 Posso farlo come prima. 316 00:14:07,339 --> 00:14:10,380 E allora questo è probabilmente andando a funzionare bene, in modo che ritorniamo vero. 317 00:14:10,380 --> 00:14:10,930 Fatto. 318 00:14:10,930 --> 00:14:11,797 PSET 5. 319 00:14:11,797 --> 00:14:13,545 >> [Risate] 320 00:14:13,545 --> 00:14:14,420 >> DAVID J. MALAN: OK. 321 00:14:14,420 --> 00:14:16,628 Stiamo andando a farlo di nuovo con la PSET prossimo, anche. 322 00:14:16,628 --> 00:14:18,730 E per quanto riguarda le dimensioni? 323 00:14:18,730 --> 00:14:22,080 Beh, questo si spera è di circa come ci si aspetterebbe l'ultima volta, 324 00:14:22,080 --> 00:14:24,460 anche se devo fare questa cosa stupida globale. 325 00:14:24,460 --> 00:14:26,610 E 'solo un artefatto da design della lingua. 326 00:14:26,610 --> 00:14:28,450 >> Ma controllo è un po 'più interessante. 327 00:14:28,450 --> 00:14:31,420 Quindi, se ho passato in dollari segno verbale, ho 328 00:14:31,420 --> 00:14:34,060 vogliono avere accesso a quel tavolo variabile globale. 329 00:14:34,060 --> 00:14:36,700 E ora se voglio controllare se una parola è lì, 330 00:14:36,700 --> 00:14:44,350 Posso semplicemente dire che se è vero che il seguente è impostato nella tabella, 331 00:14:44,350 --> 00:14:49,957 poi andare avanti e ritorno vero; altrimenti, restituisce false. 332 00:14:49,957 --> 00:14:51,180 Fatto. 333 00:14:51,180 --> 00:14:52,440 L'altra metà della PSET 5. 334 00:14:52,440 --> 00:14:54,540 >> Va bene, così ancora una volta, sono tagliando qualche curva. 335 00:14:54,540 --> 00:14:56,831 In tutta onestà, dovrei probabilmente spendere qualche secondo 336 00:14:56,831 --> 00:14:58,300 su questa implementazione. 337 00:14:58,300 --> 00:15:01,860 E forse è meglio non prendere in giro tutto il ore si mette sul PSET così tanto. 338 00:15:01,860 --> 00:15:04,045 Quindi strtolower è una funzione. 339 00:15:04,045 --> 00:15:06,670 Qualcosa di simile esistenzialista in C, almeno per caratteri, 340 00:15:06,670 --> 00:15:08,560 ma PHP ha un versione intera stringa. 341 00:15:08,560 --> 00:15:11,226 >> Che sta per forzare tutto in minuscolo, che alcuni di voi 342 00:15:11,226 --> 00:15:14,944 avrebbe potuto fare di canonicalizzare cosa stavi mettendo nel vostro dizionario. 343 00:15:14,944 --> 00:15:16,360 E ora si può fare questo in C, anche. 344 00:15:16,360 --> 00:15:17,780 Questo non ha nulla a che fare con PHP. 345 00:15:17,780 --> 00:15:20,260 >> Ma ogni volta che si ha una condizione booleana, 346 00:15:20,260 --> 00:15:22,680 come qualcosa on line 10 esiste, che è solo 347 00:15:22,680 --> 00:15:27,145 sta cercando di valutare al vero o falso, e se il vostro altro chiaramente 348 00:15:27,145 --> 00:15:33,620 sta tornando vero o falso, ho potuto semplicemente davvero fare questo più sexy 349 00:15:33,620 --> 00:15:38,360 e basta fare una cosa del genere. 350 00:15:38,360 --> 00:15:40,500 Modo che ci sia la mia funzione di controllo. 351 00:15:40,500 --> 00:15:42,560 A destra, se il booleano restituisce true o false, 352 00:15:42,560 --> 00:15:44,630 facciamo solo tornare subito. 353 00:15:44,630 --> 00:15:47,340 >> E ci sono alcune altre modifiche Potrei fare qua e là. 354 00:15:47,340 --> 00:15:51,380 Scarico Load--, tra l'altro, che è fatto. 355 00:15:51,380 --> 00:15:52,850 Niente da fare lì. 356 00:15:52,850 --> 00:15:55,840 Poiché tutta la memoria in PHP e molte altre lingue 357 00:15:55,840 --> 00:15:57,570 è in realtà gestito per voi. 358 00:15:57,570 --> 00:16:00,330 Così, mentre in C, come che hai imparato dolorosamente, 359 00:16:00,330 --> 00:16:04,700 tutto quello che malloc o calloc o realloc, devi liberarti. 360 00:16:04,700 --> 00:16:08,770 Tutto ciò che si FOPEN, devi fclose, in modo che le risorse siano in ultima analisi, liberate 361 00:16:08,770 --> 00:16:11,690 e strumenti come Valgrind non lo fanno notare e non si lamentano, 362 00:16:11,690 --> 00:16:13,570 che è una buona cosa per l'esecuzione su di loro. 363 00:16:13,570 --> 00:16:16,190 >> Ma sicuramente, ci deve essere un po 'fermo, giusto? 364 00:16:16,190 --> 00:16:19,400 In caso contrario, abbiamo sprecato tipo di un sacco di settimane. 365 00:16:19,400 --> 00:16:23,270 Quindi ci sono una serie di ragioni perché noi prendiamo questo tipo di traiettoria, 366 00:16:23,270 --> 00:16:24,440 ma c'è un trade-off. 367 00:16:24,440 --> 00:16:25,820 Giusto, questo è stato tematica. 368 00:16:25,820 --> 00:16:29,690 >> Così che cosa potrebbe un trade-off qui si muove, da C a PHP? 369 00:16:29,690 --> 00:16:33,250 Si sente come tutti vincere finora diverso un po 'di bruttezza qui o là. 370 00:16:33,250 --> 00:16:34,040 Sì. 371 00:16:34,040 --> 00:16:34,700 Che cos'è? 372 00:16:34,700 --> 00:16:36,064 >> STUDENTE: [incomprensibile] memoria. 373 00:16:36,064 --> 00:16:36,980 DAVID J. MALAN: Velocità. 374 00:16:36,980 --> 00:16:37,479 Ok. 375 00:16:37,479 --> 00:16:40,720 Beh, la mia velocità era abbastanza veloce. 376 00:16:40,720 --> 00:16:42,020 Giusto? 377 00:16:42,020 --> 00:16:44,320 Ma la velocità di esecuzione del programma? 378 00:16:44,320 --> 00:16:45,580 OK, quindi questo è un punto giusto. 379 00:16:45,580 --> 00:16:50,930 >> Così come accadrebbe, I prima cue up sia la mia soluzione tentativo, quello 380 00:16:50,930 --> 00:16:53,510 Ho avuto il grande bordo era una soluzione try-based, 381 00:16:53,510 --> 00:16:55,510 e non ho che in questa directory qui. 382 00:16:55,510 --> 00:16:58,510 Quindi io in un attimo, posso andare avanti e eseguire questo sulla Bibbia di Re Giacomo, 383 00:16:58,510 --> 00:16:59,657 premendo Invio. 384 00:16:59,657 --> 00:17:01,990 E questo si spera corretto attuazione alla fine, 385 00:17:01,990 --> 00:17:05,109 mi dà il tempo in totale di 0,38 secondi per tale 386 00:17:05,109 --> 00:17:07,270 un esempio un po 'arbitraria. 387 00:17:07,270 --> 00:17:09,270 >> E se io ora vado in questo seconda finestra terminale 388 00:17:09,270 --> 00:17:14,569 qui dove ho aperto gedit, per non andare in code-- di oggi, che, ancora una volta, 389 00:17:14,569 --> 00:17:19,650 è in questa directory qui-- e lasciami andare avanti e correre correttore ortografico. 390 00:17:19,650 --> 00:17:23,470 Quindi, tanto per essere chiari, questa è la versione di PHP. 391 00:17:23,470 --> 00:17:25,170 Sto solo mostra la parte superiore di esso qui. 392 00:17:25,170 --> 00:17:32,020 >> Quindi se faccio correttore ortografico di tilde CS50 PSET 5 testi, re Giacomo, entrano. 393 00:17:32,020 --> 00:17:39,700 394 00:17:39,700 --> 00:17:43,050 E 'ancora più veloce di scrittura in C, ma il tempo totale 395 00:17:43,050 --> 00:17:47,650 è, avviso, 0.93, mentre il mio Implementazione basata-C è stato 0,38. 396 00:17:47,650 --> 00:17:49,110 Quindi si tratta di una differenza non banale. 397 00:17:49,110 --> 00:17:51,100 >> E questo è solo su un file. 398 00:17:51,100 --> 00:17:53,480 Se si dovesse eseguire i due programmi contro la grande tavola 399 00:17:53,480 --> 00:17:56,510 e hanno un sacco di ingressi testato, questo sarebbe sicuramente aggiungere fino. 400 00:17:56,510 --> 00:18:00,310 E se avessimo set di dati ancora più grandi, anche questo sarebbe aggiungere tanto più. 401 00:18:00,310 --> 00:18:04,820 Quindi sì, pagando un certo prezzo di velocità è davvero il caso. 402 00:18:04,820 --> 00:18:05,470 Cos'altro? 403 00:18:05,470 --> 00:18:08,000 404 00:18:08,000 --> 00:18:08,860 Sì? 405 00:18:08,860 --> 00:18:10,340 >> STUDENTE: Quantità di uso RAM. 406 00:18:10,340 --> 00:18:11,756 >> DAVID J. MALAN: Quantità di uso RAM. 407 00:18:11,756 --> 00:18:15,380 Così non ho dato uno secondo pensato durante la scrittura di questo PHP 408 00:18:15,380 --> 00:18:17,300 versione da quante ricordo che stavo usando. 409 00:18:17,300 --> 00:18:22,080 Sono completamente rimandando che a PHP stesso e chi ha scritto quel programma. 410 00:18:22,080 --> 00:18:24,500 E che potrebbe essere OK, ma se io in realtà davvero 411 00:18:24,500 --> 00:18:28,420 cura di spremere tanto le prestazioni dal mio programma o dal mio sito 412 00:18:28,420 --> 00:18:31,150 o su qualsiasi strumento Sto costruendo, forse 413 00:18:31,150 --> 00:18:33,310 PHP, infatti, non è la lingua giusta. 414 00:18:33,310 --> 00:18:36,330 >> E infatti, è per questo che, per esempio, molti web servers-- 415 00:18:36,330 --> 00:18:38,980 i programmi attuali che servire web content-- 416 00:18:38,980 --> 00:18:41,810 non sono scritti in PHP o in Python o Ruby. 417 00:18:41,810 --> 00:18:44,630 Sono stati scritti, come ti ora fare con PSET 6, 418 00:18:44,630 --> 00:18:48,120 in C in modo che si può spremere ogni po 'di prestazioni fuori di esso 419 00:18:48,120 --> 00:18:50,780 e davvero esercitare il controllo a grana fine su ciò che c'è di 420 00:18:50,780 --> 00:18:52,980 in corso sotto il Cappuccio e non solo prendono 421 00:18:52,980 --> 00:18:54,890 per scontato un certo superiore struttura di dati di livello. 422 00:18:54,890 --> 00:18:58,071 >> Si consideri, dopo tutto, chi in PHP implementato 423 00:18:58,071 --> 00:19:00,070 questa nozione di un hash table-- in realtà è più 424 00:19:00,070 --> 00:19:04,260 chiamato correttamente un array-- associativa fa lui o lei ha idea di che tipo 425 00:19:04,260 --> 00:19:07,090 di ingressi che si sta per essere mettendo nella struttura? 426 00:19:07,090 --> 00:19:08,260 Così, ovviamente no, giusto? 427 00:19:08,260 --> 00:19:10,340 E 'uno strumento generico nel toolkit che è 428 00:19:10,340 --> 00:19:13,430 fornito a chiunque voglia ad usarlo, e così sicuramente 429 00:19:13,430 --> 00:19:17,680 non può essere ottimizzato definitiva per esattamente quello che vuoi fare. 430 00:19:17,680 --> 00:19:21,180 >> Così i tempi di sviluppo del commercio-offs-- potrebbe differiscono, le prestazioni potrebbero differire, 431 00:19:21,180 --> 00:19:23,120 complessità o l'utilizzo di memoria potrebbero differire. 432 00:19:23,120 --> 00:19:24,820 E così ciò che troverete sempre più è che non c'è 433 00:19:24,820 --> 00:19:26,570 sta per essere diverso strumenti per il commercio. 434 00:19:26,570 --> 00:19:31,160 E infatti per un super maggioranza progetti definitivi delle persone in questa classe, 435 00:19:31,160 --> 00:19:34,360 che ci crediate o no, C non sta andando essere la lingua giusta da usare. 436 00:19:34,360 --> 00:19:37,880 >> E infatti, una delle rosticcerie in ultima analisi, per qualsiasi classe come questo 437 00:19:37,880 --> 00:19:40,510 è quello di farti pensare, bene, che cosa si deve tirare fuori 438 00:19:40,510 --> 00:19:42,710 il ripiano quando vuoi per risolvere qualche problema. 439 00:19:42,710 --> 00:19:46,720 E in effetti, attraverseremo il ponte ancora di più come si guarda più lingue 440 00:19:46,720 --> 00:19:47,920 anche al di là oggi. 441 00:19:47,920 --> 00:19:50,530 >> Quindi, andiamo ora a transizione forse un contesto più familiare 442 00:19:50,530 --> 00:19:52,480 per l'utilizzo di un linguaggio come PHP. 443 00:19:52,480 --> 00:19:56,720 E 'un po' comune l'uso a la riga di comando, scrittura di script 444 00:19:56,720 --> 00:19:59,050 come ho fatto io, ma è molto, molto più comune. 445 00:19:59,050 --> 00:20:02,350 Ed è stato destinato ad essere utilizzato in sotto forma di file che di solito finiscono 446 00:20:02,350 --> 00:20:05,060 in .php-- ma questo è non un prerequisite-- 447 00:20:05,060 --> 00:20:07,990 che si generano contenuti web. 448 00:20:07,990 --> 00:20:11,310 >> Quindi lasciami andare avanti e aprire alcuni esempi che ho preparato in anticipo. 449 00:20:11,310 --> 00:20:15,100 E questi sono in realtà una sorta di vero storie che una delle prime cose 450 00:20:15,100 --> 00:20:18,200 Mai mi ha fatto dopo aver terminato CS50 e forse, credo, 451 00:20:18,200 --> 00:20:21,350 CS51 anni fa, è il mio compagno di stanza ed io stavamo aiutando 452 00:20:21,350 --> 00:20:24,320 per eseguire il intramurale matricola programma sportivo, che, al momento, 453 00:20:24,320 --> 00:20:28,610 aveva matricola registrazione per vari sport compilando un pezzo di carta, 454 00:20:28,610 --> 00:20:31,800 come si diceva, a piedi attraverso il cortile di Wigglesworth, 455 00:20:31,800 --> 00:20:34,030 e rilasciandola in alcuni porta goccia di Proctor. 456 00:20:34,030 --> 00:20:37,210 E allora lui o lei sarebbe passare attraverso e poi in realtà via e-mail manualmente 457 00:20:37,210 --> 00:20:39,140 che sono stati registrati per un po 'di sport. 458 00:20:39,140 --> 00:20:41,166 >> Quindi, chiaramente, un'opportunità di miglioramento. 459 00:20:41,166 --> 00:20:44,040 In questi giorni, si potrebbe girare a poco Moduli Google, ma back in the day, 460 00:20:44,040 --> 00:20:46,914 abbiamo dovuto raggiungere in realtà for-- questo non è stato arrivare anche che a lungo ago-- 461 00:20:46,914 --> 00:20:49,410 per una programmazione lingua che non è stato php. 462 00:20:49,410 --> 00:20:51,200 A quel tempo, era qualcosa chiamato Perl, 463 00:20:51,200 --> 00:20:52,890 che è andato fuori moda allora. 464 00:20:52,890 --> 00:20:54,160 Ma l'idea è la stessa. 465 00:20:54,160 --> 00:20:58,940 >> E io in sostanza sono seduto a provare alla porta va versioni di Perl per PHP, 466 00:20:58,940 --> 00:21:03,710 ma in piena dichiarazione di non responsabilità, non ha dato alcun pensiero per l'estetica ancora. 467 00:21:03,710 --> 00:21:04,960 Così qui è una pagina web. 468 00:21:04,960 --> 00:21:05,670 Questo è un file. 469 00:21:05,670 --> 00:21:09,470 Se io lo zoom avanti, la sua apparenza chiamato froshim0.php 470 00:21:09,470 --> 00:21:12,060 solo perché è il nostro primo esempio in questa serie. 471 00:21:12,060 --> 00:21:15,970 E notare che è quello che sembra per essere un modulo HTML molto brutto, 472 00:21:15,970 --> 00:21:18,680 ma una forma interessante perché permette 473 00:21:18,680 --> 00:21:21,910 me per fornire l'input dell'utente al browser. 474 00:21:21,910 --> 00:21:27,730 >> Ora, l'ultima volta in cui abbiamo avuto una forma, per i quali abbiamo sottoponiamo il nostro parametro di query, 475 00:21:27,730 --> 00:21:30,450 il parametro di coda come si chiamava? 476 00:21:30,450 --> 00:21:31,330 Quindi, per Google, giusto? 477 00:21:31,330 --> 00:21:34,090 Siamo totalmente giocato d'azzardo sul concetto di fare qualsiasi cosa con tale ingresso. 478 00:21:34,090 --> 00:21:36,160 >> Ma oggi, iniziamo la produzione di output. 479 00:21:36,160 --> 00:21:39,420 E il comportamento vado a vedere qui inizialmente è piuttosto banale. 480 00:21:39,420 --> 00:21:42,980 David, io spuntare genere qui, dice Matthews qui. 481 00:21:42,980 --> 00:21:43,800 Non sarò capitano. 482 00:21:43,800 --> 00:21:45,410 Io vado a fare clic su Registra. 483 00:21:45,410 --> 00:21:50,720 E notare che l'URL è cambiato per registrare-0.php, 484 00:21:50,720 --> 00:21:52,310 e poi c'è questo testo brutto qui. 485 00:21:52,310 --> 00:21:54,460 Ho dato nessun pensiero per la formattazione di questo. 486 00:21:54,460 --> 00:21:59,900 >> Ma ciò che è interessante è che tre I valori erano apparentemente passati. 487 00:21:59,900 --> 00:22:02,960 Questa è una sorta di di PHP equivalente a printf-- 488 00:22:02,960 --> 00:22:06,330 vedremo cosa è davvero chiamato in un bit-- che stampa appena fuori 489 00:22:06,330 --> 00:22:08,300 quello che avete passato in esso. 490 00:22:08,300 --> 00:22:11,414 Quindi, questo suggerisce che tale forma avuto almeno tre campi ad esso, 491 00:22:11,414 --> 00:22:12,580 e mi hai visto la digitazione in. 492 00:22:12,580 --> 00:22:15,739 Uno era il mio nome, uno era genere, uno era dormitorio. 493 00:22:15,739 --> 00:22:18,780 E il capitano non ha nemmeno ottenere inviato il server perché non ho controllato esso. 494 00:22:18,780 --> 00:22:22,150 >> Quindi questo è per dire a quanto pare, quando si invia cose sul web, 495 00:22:22,150 --> 00:22:26,830 non solo l'URL volte change-- a volte non è così. 496 00:22:26,830 --> 00:22:30,330 Infatti, il nome di file modificato ma ciò che è assente dalla URL 497 00:22:30,330 --> 00:22:32,861 che abbiamo visto l'ultima volta con Google. 498 00:22:32,861 --> 00:22:33,360 Sì? 499 00:22:33,360 --> 00:22:34,380 >> STUDENTE: No stringa di query 500 00:22:34,380 --> 00:22:35,220 >> DAVID J. MALAN: Non c'è stringa di query. 501 00:22:35,220 --> 00:22:37,270 Non c'è punto interrogativo qualcosa. 502 00:22:37,270 --> 00:22:40,050 Non c'è alcun punto di domanda q pari gatti, come abbiamo fatto l'ultima volta. 503 00:22:40,050 --> 00:22:42,170 E non c'è certo Nome punto di domanda è uguale 504 00:22:42,170 --> 00:22:46,310 David dormitorio o uguale a Matthews, Allora, dove è che tutti andando? 505 00:22:46,310 --> 00:22:51,290 >> Beh, mi permetta di tornare a gedit qui e di aprire il primo di questi file 506 00:22:51,290 --> 00:22:57,020 nel mio vhost, host locale, pubblico elenco qui e andare in froshim0. 507 00:22:57,020 --> 00:23:02,060 Così si scopre che quasi tutto di questa pagina è solo HTML. 508 00:23:02,060 --> 00:23:05,410 E questo potrebbe essere sconosciuto a voi, ma ben presto sarà più così con PSET 6 509 00:23:05,410 --> 00:23:07,370 e PSET 7 e 8 PSET. 510 00:23:07,370 --> 00:23:09,160 Ma questa è solo una pagina HTML. 511 00:23:09,160 --> 00:23:12,400 >> E la roba interessante sembra essere qui. 512 00:23:12,400 --> 00:23:16,290 Un tag forma la cui azione di attributo ha un valore di registro 0. 513 00:23:16,290 --> 00:23:18,890 Ecco perché quando mi presento questo, va a quel file. 514 00:23:18,890 --> 00:23:20,620 Ma il metodo è diverso messaggio oggi--. 515 00:23:20,620 --> 00:23:23,120 Così si scopre che ci sia almeno due metodi sul web utilizzati 516 00:23:23,120 --> 00:23:24,911 per inviare informazioni dal browser al server. 517 00:23:24,911 --> 00:23:25,980 Get mette nell'URL. 518 00:23:25,980 --> 00:23:27,950 Posta mette altrove. 519 00:23:27,950 --> 00:23:30,570 E quando e perché si potrebbe in realtà vogliono un sito web 520 00:23:30,570 --> 00:23:34,110 di usare il post poi invece di ottenere, solo intuitivamente? 521 00:23:34,110 --> 00:23:37,080 Qualsiasi sito web. 522 00:23:37,080 --> 00:23:42,010 Che tipo di dati dovrebbero essere comunicate solo per deduzione ora via posta in contrasto 523 00:23:42,010 --> 00:23:45,184 per ottenere, se abbiamo visto le due differenze? 524 00:23:45,184 --> 00:23:46,350 STUDENTE: [incomprensibile] sicuro. 525 00:23:46,350 --> 00:23:47,790 DAVID J. MALAN: Se si desidera qualcosa di cui essere sicuro. 526 00:23:47,790 --> 00:23:50,360 Così si potrebbe digitare una password in un sito web, una carta di credito 527 00:23:50,360 --> 00:23:53,030 in un sito web sarebbe tipo di questi sub-ottimale 528 00:23:53,030 --> 00:23:56,220 se il browser che ha messo valore all'interno della URL. 529 00:23:56,220 --> 00:23:57,680 Perché? 530 00:23:57,680 --> 00:24:00,059 Lo vedi, che non fa sembra essere un tale grosso problema, 531 00:24:00,059 --> 00:24:03,350 ma le probabilità sono voi abbastanza spesso a piedi lontano dal computer o l'uso del computer 532 00:24:03,350 --> 00:24:05,310 laboratori, e così qualcuno altro o addirittura un compagno di stanza 533 00:24:05,310 --> 00:24:08,220 potrebbe facilmente salire a piedi e vedere che informazioni private. 534 00:24:08,220 --> 00:24:10,220 Quando si invia una e-mail tramite il web, probabilmente 535 00:24:10,220 --> 00:24:12,350 non vogliono che finale dei dati nella URL pure. 536 00:24:12,350 --> 00:24:15,266 E così ci sono una serie di ragioni il motivo per cui si potrebbe desiderare di metterlo qui. 537 00:24:15,266 --> 00:24:18,610 E proprio photos--, non posso nemmeno del tutto immaginare come si dovrebbe fare un grafico, 538 00:24:18,610 --> 00:24:21,480 come un JPEG, e metterlo in un URL. 539 00:24:21,480 --> 00:24:22,330 Si potrebbe farlo. 540 00:24:22,330 --> 00:24:25,840 Ci sono modi di codifica è, ma è semplicemente non semplice come quello. 541 00:24:25,840 --> 00:24:29,030 >> Così registro 0 è in realtà molto deludente. 542 00:24:29,030 --> 00:24:31,610 Tutto ciò che dice letteralmente questo. 543 00:24:31,610 --> 00:24:35,910 Esso stampa all'interno di alcuni Tag HTML seguente. 544 00:24:35,910 --> 00:24:38,640 Ho un tag PHP qui nidificato all'interno di un tag pre. 545 00:24:38,640 --> 00:24:42,300 "Pre" significa solo testo pre-formattato, mono-distanziati, come una macchina da scrivere. 546 00:24:42,300 --> 00:24:44,836 >> Printr è una funzione ricorsiva stampa. 547 00:24:44,836 --> 00:24:46,710 E poi c'è questa cosa interessante qui. 548 00:24:46,710 --> 00:24:48,835 E torneremo a questo perché ci sono gli altri, 549 00:24:48,835 --> 00:24:51,140 ma il simbolo del dollaro di sottolineatura messaggio sembra essere 550 00:24:51,140 --> 00:24:56,110 una variabile in PHP in cui tutto inviato dal browser al server 551 00:24:56,110 --> 00:24:58,040 viene conservato per voi. 552 00:24:58,040 --> 00:25:00,930 E vedremo come arrivare a che le informazioni in breve tempo. 553 00:25:00,930 --> 00:25:04,000 >> Ma prima, torniamo a un esempio leggermente diverso. 554 00:25:04,000 --> 00:25:09,050 Entrando in register-- o piuttosto, froshims1.php, 555 00:25:09,050 --> 00:25:10,470 che sembra un po 'diverso. 556 00:25:10,470 --> 00:25:12,670 Ho preso un po 'di più sforzo con la formattazione, 557 00:25:12,670 --> 00:25:14,370 anche se è ancora piuttosto brutto. 558 00:25:14,370 --> 00:25:16,990 Ma ho intenzione di andare avanti e digitare "David" ora. 559 00:25:16,990 --> 00:25:17,850 Maschio. 560 00:25:17,850 --> 00:25:19,360 Controlleremo "capitano" questa volta. 561 00:25:19,360 --> 00:25:20,660 Faremo Matthews. 562 00:25:20,660 --> 00:25:22,430 E la registrazione. 563 00:25:22,430 --> 00:25:24,110 >> E questa volta si dice, hm, non proprio. 564 00:25:24,110 --> 00:25:26,180 Va bene, e allora di registrare 1? 565 00:25:26,180 --> 00:25:30,509 Lasciami andare nel registro aperto 1 hm e-. 566 00:25:30,509 --> 00:25:32,300 Va bene, quindi questo è interessante, e questo 567 00:25:32,300 --> 00:25:34,880 è un trampolino di lancio verso la società programmi più interessanti. 568 00:25:34,880 --> 00:25:38,970 >> Si noti la parte superiore di questo file ha un Tag PHP e alcuni commenti. 569 00:25:38,970 --> 00:25:42,590 E questi sono, per ora, una distrazione così facciamo solo sbarazzarsi di quei commenti 570 00:25:42,590 --> 00:25:47,070 proprio come se fossero in C. E mi sostengono con questo pezzo di codice con un commento 571 00:25:47,070 --> 00:25:49,280 che questo codice è convalidare la presentazione. 572 00:25:49,280 --> 00:25:51,690 >> Beh, si scopre che variabili come il simbolo del dollaro 573 00:25:51,690 --> 00:25:53,739 sottolineatura postale sono chiamato Super globali. 574 00:25:53,739 --> 00:25:55,530 Sono come questi variabili globali speciali 575 00:25:55,530 --> 00:25:58,840 che sono solo omni-attualmente disponibili all'interno del programma. 576 00:25:58,840 --> 00:26:03,870 Ed è possibile utilizzare la notazione parentesi quadra per indicizzare loro non utilizzando i numeri 577 00:26:03,870 --> 00:26:07,460 come 0, 1, 2, 3, ma parole reali. 578 00:26:07,460 --> 00:26:12,100 >> Così si può pensare del dollaro sottolineare posto come una sorta di tabella di hash 579 00:26:12,100 --> 00:26:15,920 che si potrebbe passare una chiave in una ricerca parola in-tra le parentesi quadre, 580 00:26:15,920 --> 00:26:19,370 e sta andando per darvi indietro il valore che l'utente effettivamente disponibile. 581 00:26:19,370 --> 00:26:21,210 PHP ha una funzione chiamato vuoto che solo 582 00:26:21,210 --> 00:26:23,720 dice sì o no, questo variabile è vuota o no. 583 00:26:23,720 --> 00:26:27,250 Abbiamo queste doppie verticali, che significa solo o, come in C. 584 00:26:27,250 --> 00:26:31,740 >> Quindi, in effetti, questa linea 4 è solo dire se l'utente non ha dato un nome 585 00:26:31,740 --> 00:26:36,540 o non ha dato un genere o non ha fatto dare un dormitorio, andare avanti e lui reindirizzare 586 00:26:36,540 --> 00:26:38,184 o il suo tramite questa linea qui. 587 00:26:38,184 --> 00:26:40,600 Quindi questo è un po 'criptico, ma questo significa solo letteralmente 588 00:26:40,600 --> 00:26:43,330 tornare in questa posizione, in modo che l'utente punts 589 00:26:43,330 --> 00:26:45,420 torna a ovunque lui o lei è venuto da. 590 00:26:45,420 --> 00:26:47,880 Ma è un po 'inelegante in quel duro ho codificato esso. 591 00:26:47,880 --> 00:26:52,150 >> Ma cosa succede se questo se la condizione non valuta a vero? 592 00:26:52,150 --> 00:26:55,790 Che cosa succede se l'utente mi ha dato il suo o il suo nome e il dormitorio e il sesso? 593 00:26:55,790 --> 00:26:58,540 Che se la condizione non è sta cercando di valutare al vero, 594 00:26:58,540 --> 00:27:00,650 quindi non mi ha colpito l'uscita in linea 7. 595 00:27:00,650 --> 00:27:01,680 Che cosa succede? 596 00:27:01,680 --> 00:27:03,880 E questo è ciò che è interessante di PHP. 597 00:27:03,880 --> 00:27:07,470 >> Si può cadere dentro e fuori dalla modalità PHP, per così dire. 598 00:27:07,470 --> 00:27:10,985 Se volete un po 'di codice da eseguire, è possibile aprire e chiudere un tag PHP 599 00:27:10,985 --> 00:27:13,010 e inserire il codice lì come ho fatto qui. 600 00:27:13,010 --> 00:27:16,810 Non appena si chiude il tag PHP, il server 601 00:27:16,810 --> 00:27:19,407 sta solo andando a sputare fuori tutto ciò che si mette lì. 602 00:27:19,407 --> 00:27:21,740 E in effetti, questo faceva parte del il disegno originale di PHP, 603 00:27:21,740 --> 00:27:25,280 nel bene e nel male, era questo commistione di codice e markup 604 00:27:25,280 --> 00:27:25,920 lingua. 605 00:27:25,920 --> 00:27:28,670 E vedremo che questo molto devolve rapidamente in un pasticcio. 606 00:27:28,670 --> 00:27:31,280 E così faremo meglio questo fine, ma proprio 607 00:27:31,280 --> 00:27:35,620 notare la facilità con cui sono effettivamente in grado di eseguire una certa logica. 608 00:27:35,620 --> 00:27:37,440 >> Ma ancora un po 'deludente. 609 00:27:37,440 --> 00:27:41,210 Apriamo up versione due dei Frosh IM, che 610 00:27:41,210 --> 00:27:44,270 a quanto pare sottopone al register2.php. 611 00:27:44,270 --> 00:27:47,600 Quindi questo file sta realmente accadendo guardare quasi lo stesso. 612 00:27:47,600 --> 00:27:50,780 Ho intenzione di andare a Frosh IM 2. 613 00:27:50,780 --> 00:27:53,050 Ma in Frosh IM 2, vediamo cosa succede. 614 00:27:53,050 --> 00:27:58,110 >> David, fare clic sul pulsante di opzione, come si chiama; Matthews, nessun capitano. 615 00:27:58,110 --> 00:27:59,230 Registrati. 616 00:27:59,230 --> 00:28:00,130 Ti sei registrato. 617 00:28:00,130 --> 00:28:00,700 Non proprio. 618 00:28:00,700 --> 00:28:02,574 Oh aspetta, abbiamo appena fatto che esempio, non l'abbiamo fatto noi? 619 00:28:02,574 --> 00:28:04,520 Va bene, stand by. 620 00:28:04,520 --> 00:28:06,602 Faremo il tre. 621 00:28:06,602 --> 00:28:08,560 Chiaramente qualcosa è circa accadere con Gmail. 622 00:28:08,560 --> 00:28:09,600 Ci arriveremo. 623 00:28:09,600 --> 00:28:11,900 >> Così Frosh IM 3 si presenta così. 624 00:28:11,900 --> 00:28:13,050 Non è diverso. 625 00:28:13,050 --> 00:28:19,850 Ma quando lo faccio David, maschio, Matthews, e registrare, questa terza e ultima versione 626 00:28:19,850 --> 00:28:22,230 pretese, molto semplicemente si, sono registrati davvero. 627 00:28:22,230 --> 00:28:23,560 Questo è una sorta di immateriale. 628 00:28:23,560 --> 00:28:25,600 Ma io pretendo con questo terza e ultima versione 629 00:28:25,600 --> 00:28:30,610 Ora ho ricreato esattamente ciò che il mio compagno di stanza e ho costruito per le IM Frosh 630 00:28:30,610 --> 00:28:31,731 anni di programma fa. 631 00:28:31,731 --> 00:28:32,480 Ed è stato semplice. 632 00:28:32,480 --> 00:28:34,330 Non c'era nessun database, nessun foglio di calcolo Excel. 633 00:28:34,330 --> 00:28:36,450 Ma soprattutto, non c'era più carta 634 00:28:36,450 --> 00:28:42,520 perché quello che abbiamo fatto con questo programma era in realtà e-mail il procuratore, che 635 00:28:42,520 --> 00:28:44,530 era in precedenza di ricezione queste cose attraverso forme. 636 00:28:44,530 --> 00:28:48,890 >> E a quanto pare ci siamo programmati in questo modo tale che quando qualcuno registra, 637 00:28:48,890 --> 00:28:52,470 Dell'account e-mail di John Harvard il proctor-- o se stesso in questo caso, 638 00:28:52,470 --> 00:28:55,960 John Harvard-- con il seguente text-- "Questa persona appena registrata." 639 00:28:55,960 --> 00:29:00,560 Nome è David, il capitano è vuoto; genere, di sesso maschile; e dormitorio, Matthews. 640 00:29:00,560 --> 00:29:01,560 >> Così che cosa è successo lì? 641 00:29:01,560 --> 00:29:05,360 Beh, il file in questione qui è apparentemente register3.php. 642 00:29:05,360 --> 00:29:09,080 E se apro questo, si vedrà sia la potenza di codice come questo 643 00:29:09,080 --> 00:29:12,380 e anche, francamente, l'insicurezza di un sistema come e-mail. 644 00:29:12,380 --> 00:29:16,290 Ho appena efficace finta di essere John Harvard nel modo seguente. 645 00:29:16,290 --> 00:29:20,920 >> Ho il tag php aperto sulla parte superiore, che dice solo ecco che arriva un po 'di codice PHP. 646 00:29:20,920 --> 00:29:23,155 Quaggiù, risulta là fuori sono librerie in PHP. 647 00:29:23,155 --> 00:29:26,410 Devi solo non è necessario includere i file di intestazione come molto. 648 00:29:26,410 --> 00:29:28,900 Si ottiene di più con il lavello della cucina, per così dire. 649 00:29:28,900 --> 00:29:31,820 >> Ma questa volta in linea 4, che faccio vogliono speciale libreria chiamata 650 00:29:31,820 --> 00:29:36,087 PHP mailer, che è qualcosa che si è possibile installare gratuitamente in molti sistemi. 651 00:29:36,087 --> 00:29:37,920 Quaggiù sto convalidando la presentazione appena 652 00:29:37,920 --> 00:29:40,540 controllando dava l'utente mi ha un nome, un genere, e un dormitorio. 653 00:29:40,540 --> 00:29:44,130 E se è così, andare avanti e un'istanza di un mailer. 654 00:29:44,130 --> 00:29:47,020 >> Si può pensare a questo come un riga di codice che assegna solo. 655 00:29:47,020 --> 00:29:48,950 E 'come malloc, ma è un po 'più sexy 656 00:29:48,950 --> 00:29:51,790 in quanto non si parla solo malloc e un numero generico. 657 00:29:51,790 --> 00:29:55,030 Tu dici che mi dia una di queste, dammi un nuovo uno di questi. 658 00:29:55,030 --> 00:29:57,950 >> E se avete già programmato in Java o C ++ o altri linguaggi, 659 00:29:57,950 --> 00:29:59,130 si potrebbe avere visto questo. 660 00:29:59,130 --> 00:30:01,840 Ma il corto di esso, se sconosciuto, questa linea 661 00:30:01,840 --> 00:30:05,410 mette in simbolo del dollaro di posta una struttura speciale chiamata 662 00:30:05,410 --> 00:30:08,731 un oggetto che ha incorporato funzionalità e-mail. 663 00:30:08,731 --> 00:30:10,355 E infatti, notare e sintassi simile. 664 00:30:10,355 --> 00:30:11,900 >> Questo non è un puntatore, per sé. 665 00:30:11,900 --> 00:30:13,990 PHP solo utilizza la stessa sintassi. 666 00:30:13,990 --> 00:30:17,660 Questa linea sta dicendo uso SMTP-- Simple Mail Transfer 667 00:30:17,660 --> 00:30:20,900 Protocollo, che è solo il protocollo usato per inviare la posta. 668 00:30:20,900 --> 00:30:24,240 Si tratta di specificare l'uso Server SMTP di Harvard, che 669 00:30:24,240 --> 00:30:25,830 è da qualche parte qui nel campus. 670 00:30:25,830 --> 00:30:28,480 >> Questo sta dicendo che cosa TCP numero di porta per parlare, 671 00:30:28,480 --> 00:30:31,650 e ho pensato che da su Google o chiedendo l'help desk. 672 00:30:31,650 --> 00:30:34,640 E poi perché Harvard utilizza alcuni la sicurezza del sistema sul server-- di posta 673 00:30:34,640 --> 00:30:37,060 almeno per crittografare il traffico tra l'utente e, 674 00:30:37,060 --> 00:30:41,380 anche se chiunque può inviare a it-- Ho intenzione di attivare il protocollo TLS 675 00:30:41,380 --> 00:30:42,710 per mantenere questo sicuro. 676 00:30:42,710 --> 00:30:44,730 >> Ma questo è dove le cose ottenere un po 'paura. 677 00:30:44,730 --> 00:30:47,970 Posso solo arbitrariamente dire che sono jharvard, 678 00:30:47,970 --> 00:30:51,930 e posso solo arbitrariamente e-mail me stesso qui. 679 00:30:51,930 --> 00:30:55,650 E poi posso specificare un soggetto con questa linea qui. 680 00:30:55,650 --> 00:30:58,460 >> E questo sembra proprio brutto, ma è solo un mucchio di concatenazione. 681 00:30:58,460 --> 00:31:04,480 Si scopre che PHP ha un simbolo super utile, come alcune lingue, l'operatore punto, 682 00:31:04,480 --> 00:31:07,340 che concatena solo letteralmente corda dopo corda dopo corda, 683 00:31:07,340 --> 00:31:09,810 e non si dispone di malloc o figura la lunghezza totale della stringa. 684 00:31:09,810 --> 00:31:10,820 Devi solo farlo. 685 00:31:10,820 --> 00:31:15,220 E in effetti, perché sto concatenando in tutte queste cose con questi punti, 686 00:31:15,220 --> 00:31:18,330 è per questo che la mail che ho inviato sembrava come ha fatto. 687 00:31:18,330 --> 00:31:20,610 >> E poi, infine qui, sto l'invio della posta. 688 00:31:20,610 --> 00:31:22,580 Quindi, se questo è falso, Sto solo andando a morire, 689 00:31:22,580 --> 00:31:25,680 che è una funzione che solo stampe alla schermata di qualche messaggio di errore. 690 00:31:25,680 --> 00:31:29,170 Ma è, infatti, chiamando la funzione di invio. 691 00:31:29,170 --> 00:31:31,780 Altrimenti, se tutto questo fallisce, mi reindirizza qui. 692 00:31:31,780 --> 00:31:34,050 >> E perché ho visto che Mi sono registrato davvero? 693 00:31:34,050 --> 00:31:36,110 Beh, è ​​successo proprio qui. 694 00:31:36,110 --> 00:31:38,170 Così ho portare questo per un paio di motivi. 695 00:31:38,170 --> 00:31:41,542 >> Uno, questo è esattamente come se si costruisce qualche sito per un progetto finale 696 00:31:41,542 --> 00:31:44,000 o per il mondo reale, questo è come si invia promemoria via email 697 00:31:44,000 --> 00:31:45,924 ai vostri clienti o utenti iscritti. 698 00:31:45,924 --> 00:31:47,590 Questo è il modo di inviare promemoria di password. 699 00:31:47,590 --> 00:31:50,760 Questo è il modo di inviare messaggi di persone che hanno un nuovo Facebook 700 00:31:50,760 --> 00:31:52,990 messaggio in attesa o qualcosa del genere. 701 00:31:52,990 --> 00:31:55,010 >> Ma si parla anche di il fatto che questo potrebbe 702 00:31:55,010 --> 00:31:58,160 sono stati molto bene dal Davin o chiunque altro. 703 00:31:58,160 --> 00:32:00,567 E dico questo tipo di con un sorriso perché sono 704 00:32:00,567 --> 00:32:03,400 abbastanza sicuro di quello che sta succedendo attraverso molte delle vostre menti a questo punto. 705 00:32:03,400 --> 00:32:11,910 Ma questo è uno di quelli che lo fanno, come ho dico, non come faccio io tipo di cose, 706 00:32:11,910 --> 00:32:14,480 perché è banale creare messaggi di posta elettronica come questo. 707 00:32:14,480 --> 00:32:16,480 Ma come avrete visto o leggere in Crimson, 708 00:32:16,480 --> 00:32:18,271 negli ultimi tempi è anche abbastanza banale per persone 709 00:32:18,271 --> 00:32:20,050 per risalire a qualche origine. 710 00:32:20,050 --> 00:32:23,790 E chiedere a me un po 'di tempo, forse CS50 a pranzo, come ho 711 00:32:23,790 --> 00:32:27,080 conobbe molto da vicino quasi al Consiglio ed anni 712 00:32:27,080 --> 00:32:30,890 fa, quando ho scoperto come la connessione internet funzionava. 713 00:32:30,890 --> 00:32:36,940 Quindi, in ogni case-- un po ' dopo il consiglio ed ha fatto. 714 00:32:36,940 --> 00:32:42,300 >> Quindi, in ogni caso, vi è un tutta una serie di super globali, 715 00:32:42,300 --> 00:32:45,960 come si chiamano qui, uno dei quali abbiamo saw-- simbolo del dollaro di sottolineatura postale. 716 00:32:45,960 --> 00:32:49,530 C'è una controparte chiamata get, che è dove roba da un URL 717 00:32:49,530 --> 00:32:50,690 finisce per andare. 718 00:32:50,690 --> 00:32:54,051 E c'è un sacco di altri, sessione di too-- e server e biscotto. 719 00:32:54,051 --> 00:32:55,800 Torneremo a Cookie un'altra volta, 720 00:32:55,800 --> 00:33:01,340 ma sessione è genere di freddo perché in questo now-- fino now-- 721 00:33:01,340 --> 00:33:06,350 tutto quello che abbiamo fatto con un browser web è una sorta di apolide, per così dire. 722 00:33:06,350 --> 00:33:10,060 Posso cliccare in giro, l'accesso file sul server, cosa 723 00:33:10,060 --> 00:33:13,500 accade sullo schermo, ma quindi la connessione si chiude. 724 00:33:13,500 --> 00:33:17,450 L'Internet Explorer o il Icona di Firefox si ferma la filatura 725 00:33:17,450 --> 00:33:20,340 e basta vedere quello che la pagina web contiene. 726 00:33:20,340 --> 00:33:23,530 >> Così HTTP è stateless in che una volta stabilita una connessione, 727 00:33:23,530 --> 00:33:25,050 ottiene alcuni dati, il gioco è fatto. 728 00:33:25,050 --> 00:33:29,940 Niente più collegamento, a differenza di Skype, a differenza di FaceTime, Gchat differenza, che 729 00:33:29,940 --> 00:33:32,180 mantiene un costante connessione al server. 730 00:33:32,180 --> 00:33:34,650 Il web è fondamentalmente scollegato, anche se ti 731 00:33:34,650 --> 00:33:36,630 vedere fra non molto come possiamo simulare le cose 732 00:33:36,630 --> 00:33:39,300 come la chat di Facebook e Gchat, che mantengono la illusion-- 733 00:33:39,300 --> 00:33:41,680 o effettivamente fare mantenere un costante collegamento con 734 00:33:41,680 --> 00:33:43,270 più moderne tecnologie. 735 00:33:43,270 --> 00:33:49,000 >> Ma se vado a, dire, counter.php, questo è un altro semplice esempio, 736 00:33:49,000 --> 00:33:52,700 come vedremo, che pensa oggi Ho visitato il sito tempo zero. 737 00:33:52,700 --> 00:33:56,790 Ma se io semplicemente ricaricare la pagina, in qualche modo sa che sono stato qui prima. 738 00:33:56,790 --> 00:33:58,840 Se ricarico di nuovo, sa Sono stato qui prima. 739 00:33:58,840 --> 00:34:01,100 E ancora e ancora e ancora e ancora. 740 00:34:01,100 --> 00:34:03,610 >> Quindi c'è un po 'di più-plussing in corso, a meno di notare 741 00:34:03,610 --> 00:34:07,090 la piccola cosa gira mai così brevemente sulla parte superiore e poi si disconnette, 742 00:34:07,090 --> 00:34:11,179 quindi non è come se avessi un costante collegamento con l'apparecchio in uso. 743 00:34:11,179 --> 00:34:16,929 Beh, se vado in counter.php, notare quanto sia semplice. 744 00:34:16,929 --> 00:34:19,080 Io chiamo questo primo speciale funzione che faremo presto 745 00:34:19,080 --> 00:34:21,513 iniziare a prendere per scontato chiamato start sessione. 746 00:34:21,513 --> 00:34:22,179 Avviare una sessione. 747 00:34:22,179 --> 00:34:25,095 >> E una sessione è d'ora in poi solo sarà un secchio, come un carrello 748 00:34:25,095 --> 00:34:28,120 carrello in cui è possibile inserire i valori e il tipo di fiducia come programmatore 749 00:34:28,120 --> 00:34:31,590 che sta andando ad essere qui quando l'utente viene back-- un secondo 750 00:34:31,590 --> 00:34:35,670 più tardi, un'ora più tardi, anche un anno dopo, fino a quando lui o lei non si risolve 751 00:34:35,670 --> 00:34:37,602 loro biscotti, come vedremo alla fine vediamo. 752 00:34:37,602 --> 00:34:39,310 E ora non mi resta che una condizione if qui. 753 00:34:39,310 --> 00:34:44,679 Quindi, se la seguente chiave, chiamato contatore, inserita in 754 00:34:44,679 --> 00:34:49,210 di questo super global-- questo hash tavolo, se si will-- chiamato sessione, 755 00:34:49,210 --> 00:34:53,350 poi andare avanti e prendere il valore dal think session-- 756 00:34:53,350 --> 00:34:55,250 di questo come un acquisto cart-- e memorizzarlo 757 00:34:55,250 --> 00:34:57,680 in una variabile temporanea denominata contatore. 758 00:34:57,680 --> 00:35:02,240 >> Altrimenti, se tale controvalore era non impostato nel cosiddetto carrello della spesa, 759 00:35:02,240 --> 00:35:04,430 solo inizializzare a 0. 760 00:35:04,430 --> 00:35:09,830 Infine, qui, andare a rimettere nei carrelli della spesa o della sessione 761 00:35:09,830 --> 00:35:13,000 il valore del contatore +1. 762 00:35:13,000 --> 00:35:16,730 Così si scopre che questo speciale contenitore qui-- 763 00:35:16,730 --> 00:35:20,355 che, di nuovo, è uno di questi associato array, una matrice che è possibile indicizzare 764 00:35:20,355 --> 00:35:25,010 in parole invece di numbers-- persiste anche dopo che l'utente se ne va. 765 00:35:25,010 --> 00:35:26,510 Ancora una volta, tornerò alla pagina ora. 766 00:35:26,510 --> 00:35:28,400 E 'stato un minuto o giù di lì. 767 00:35:28,400 --> 00:35:31,300 Ma ricorda che ho stato qui 19 volte prima. 768 00:35:31,300 --> 00:35:32,740 Questo è il mio 20 ° visita. 769 00:35:32,740 --> 00:35:36,560 >> E così questo sarà la chiave per mettere in atto qualsiasi sito web che ricorda 770 00:35:36,560 --> 00:35:40,640 che si è registrato in, che si mette qualcosa letterale nel tuo carrello 771 00:35:40,640 --> 00:35:43,902 comprare o che avete un po ' numero di messaggi in attesa. 772 00:35:43,902 --> 00:35:45,610 Ogni volta che si desidera ricordare le informazioni, 773 00:35:45,610 --> 00:35:48,130 vedremo che PHP, come diverse altre lingue, 774 00:35:48,130 --> 00:35:53,640 ci fornisce questa illusione di stato anche se, come si vedrà in PSET 6, 775 00:35:53,640 --> 00:35:57,642 come si sta facendo richieste HTTP dal client al server, il gioco è fatto. 776 00:35:57,642 --> 00:35:59,850 Una volta arrivati ​​alla schiena che risposta, non c'è niente di più 777 00:35:59,850 --> 00:36:01,790 di ritorno dal server per impostazione predefinita. 778 00:36:01,790 --> 00:36:03,820 Ma vedremo come risolvere questo. 779 00:36:03,820 --> 00:36:07,430 >> Bene, ora, cerchiamo di pulire questo un po '. 780 00:36:07,430 --> 00:36:09,470 Abbiamo visto un paio di esempi diversi là. 781 00:36:09,470 --> 00:36:12,250 Oh, e come una digressione, per chi ha familiarità o non familiare, 782 00:36:12,250 --> 00:36:14,230 la ragione che il Frosh IM esempio è andato 783 00:36:14,230 --> 00:36:18,060 di guardare davvero brutto da slightly-- bene, 784 00:36:18,060 --> 00:36:23,160 ugly-- ancora per un po ' meno brutto anche se ancora brutto 785 00:36:23,160 --> 00:36:25,230 è perché se guardiamo il codice sorgente qui 786 00:36:25,230 --> 00:36:28,240 si scopre che ho questa al vertice del file. 787 00:36:28,240 --> 00:36:32,570 >> Si scopre che il bootstrap è uno dei tanti librerie liberamente disponibili là fuori 788 00:36:32,570 --> 00:36:37,140 che non esiste per i linguaggi di programmazione sempre, ma per i CSS o JavaScript 789 00:36:37,140 --> 00:36:39,190 o HTML o un qualsiasi numero di lingue. 790 00:36:39,190 --> 00:36:42,160 >> E queste persone qui-- originariamente uscito 791 00:36:42,160 --> 00:36:44,730 di Twitter-- semplicemente un sacco di stili. 792 00:36:44,730 --> 00:36:47,360 Si tratta di un file di massa qui che qualcuno ha scritto, 793 00:36:47,360 --> 00:36:51,020 o qualcuno di ha scritto, nel corso del tempo che specifica i colori e la formattazione 794 00:36:51,020 --> 00:36:53,740 e quant'altro in modo che posso tipo di prendere in prestito la loro sintassi 795 00:36:53,740 --> 00:36:56,157 e non c'è bisogno di capire come a tracciare la mia forma. 796 00:36:56,157 --> 00:36:57,990 Questo è anche ridotte di in modo che un computer può 797 00:36:57,990 --> 00:37:00,560 capire, ma non necessariamente un essere umano. 798 00:37:00,560 --> 00:37:03,050 Ecco, questo è proprio il motivo per cui il stilizzazione non è cambiato. 799 00:37:03,050 --> 00:37:05,450 >> Ma veniamo ora fare meglio in termini di progettazione, 800 00:37:05,450 --> 00:37:07,490 perché se restiamo in giù questa strada troppo a lungo, 801 00:37:07,490 --> 00:37:11,290 il nostro codice sta per ottenere disordinato e Messier. 802 00:37:11,290 --> 00:37:13,040 Quindi concentriamoci su questi esempi qui. 803 00:37:13,040 --> 00:37:15,090 L'ultima per oggi. 804 00:37:15,090 --> 00:37:18,720 >> Così qui è un super semplice la versione 1.0 del sito di CS50. 805 00:37:18,720 --> 00:37:21,250 Ha solo collegamenti a lezioni e programma, 806 00:37:21,250 --> 00:37:25,490 ed è con tale lista non ordinata tag-- il tag UL che abbiamo usato l'ultima volta. 807 00:37:25,490 --> 00:37:28,800 E se in effetti, se aprire Visualizza sorgente pagina, 808 00:37:28,800 --> 00:37:31,710 vedrete che si tratta di davvero, davvero semplice HTML. 809 00:37:31,710 --> 00:37:35,460 Ed infatti, anche se questo è un file PHP sotto la cappa, 810 00:37:35,460 --> 00:37:38,620 è ancora solo sputando out HTML solo per ora. 811 00:37:38,620 --> 00:37:41,312 >> Quindi, se clicco su Lectures, vediamo che questo accada. 812 00:37:41,312 --> 00:37:43,020 E se clicco su settimana pari a zero, vediamo questo. 813 00:37:43,020 --> 00:37:44,920 E se clicco su Mercoledì, vediamo questo. 814 00:37:44,920 --> 00:37:47,900 E questo a quanto pare è stato il PDF le diapositive quel giorno. 815 00:37:47,900 --> 00:37:52,020 Tutto quello che ho fatto è legame con un anchor tag a questo URL qui. 816 00:37:52,020 --> 00:37:55,400 >> Quindi questo è solo per dire che questo è un bel semplice versione del sito web di CS50. 817 00:37:55,400 --> 00:37:56,790 Vediamo come è implementato. 818 00:37:56,790 --> 00:38:01,240 Se vado nella directory mvc0, staremo a vedere alcuni file. 819 00:38:01,240 --> 00:38:03,250 Uno è un README, quindi se alcune di queste è troppo veloce, 820 00:38:03,250 --> 00:38:05,166 si può semplicemente curiosare più piacevole in seguito. 821 00:38:05,166 --> 00:38:07,930 E notate qui è un file index.php. 822 00:38:07,930 --> 00:38:09,960 Si scopre che, se lei stesso, l'umano, 823 00:38:09,960 --> 00:38:14,460 non specificare un nome definitivo in un URL, il server web di solito 824 00:38:14,460 --> 00:38:17,010 deduce qualche nome di default per voi. 825 00:38:17,010 --> 00:38:20,060 Un indice di qualcosa di dot è in genere il valore predefinito. 826 00:38:20,060 --> 00:38:23,010 >> Ecco, questo è il motivo per cui un momento fa quando ho visitato questo URL qui, 827 00:38:23,010 --> 00:38:26,750 non il nome del file, nessun file estensione, nessun periodo nell'URL. 828 00:38:26,750 --> 00:38:29,710 E 'solo sapeva in qualche modo magicamente per cercare index.php. 829 00:38:29,710 --> 00:38:30,870 E 'solo una convenzione. 830 00:38:30,870 --> 00:38:32,360 Potrebbe essere chiamato nulla. 831 00:38:32,360 --> 00:38:35,110 >> Quindi, se io ora vado in index.php, vedrete 832 00:38:35,110 --> 00:38:37,100 che, indeed-- facciamo sbarazzarsi dei commenti 833 00:38:37,100 --> 00:38:39,500 qui perché non c'è davvero nulla di interessante da it-- 834 00:38:39,500 --> 00:38:41,579 questo è solo difficile codificato HTML. 835 00:38:41,579 --> 00:38:43,370 Ecco, questo è coerente, però, con la mia richiesta 836 00:38:43,370 --> 00:38:45,230 che si può mescolarsi HTML e PHP. 837 00:38:45,230 --> 00:38:48,060 Non c'è reale logica di programmazione qui. 838 00:38:48,060 --> 00:38:51,030 >> E gli altri file sono abbastanza molto proprio come poco interessante. 839 00:38:51,030 --> 00:38:56,240 E 'solo una settimana hard-coded qui per una settimana me una settimana w, 840 00:38:56,240 --> 00:38:57,510 per Lunedi e Mercoledì. 841 00:38:57,510 --> 00:39:01,890 E poi se apro la settimana a zero, notare è quasi identico. 842 00:39:01,890 --> 00:39:03,320 >> E questo è una specie di chiave da asporto. 843 00:39:03,320 --> 00:39:06,180 Si noti quanto sia ridondante questo è. 844 00:39:06,180 --> 00:39:10,710 Questi file malapena cambiano, ma io tirato uno di questi processi di copia / incolla 845 00:39:10,710 --> 00:39:13,420 dove ho preso uno file-- presumibilmente in settimana zero-- copiato 846 00:39:13,420 --> 00:39:16,320 quando la settimana è venuto in giro, e ottimizzato alcuni valori. 847 00:39:16,320 --> 00:39:18,590 Probabilmente dovremmo essere in grado a fare meglio di così. 848 00:39:18,590 --> 00:39:21,800 >> Quindi, torniamo fino a mvc e andare in versione uno. 849 00:39:21,800 --> 00:39:24,810 E ho notato un alcuni file, perché ciò che 850 00:39:24,810 --> 00:39:29,870 era comune a tutti quei file solo momento ago-- se torno alla versione 0, 851 00:39:29,870 --> 00:39:32,600 torniamo in indice, e solo postulate-- 852 00:39:32,600 --> 00:39:36,090 una volta mi libero della comments-- quale parte di questa pagina 853 00:39:36,090 --> 00:39:40,072 è presumibilmente in ognuno dei miei file? 854 00:39:40,072 --> 00:39:40,780 Basta chiamare fuori. 855 00:39:40,780 --> 00:39:44,620 Quali linee sono duplicati probabilmente in tutte queste pagine? 856 00:39:44,620 --> 00:39:45,120 Sì? 857 00:39:45,120 --> 00:39:46,110 >> STUDENTE: [incomprensibile]. 858 00:39:46,110 --> 00:39:47,660 >> DAVID J. MALAN: da 1 a 9. 859 00:39:47,660 --> 00:39:48,720 Sì, assolutamente. 860 00:39:48,720 --> 00:39:52,080 Da 1 a 9, eccetto forse 8 cambia un pò perchè CS50 861 00:39:52,080 --> 00:39:54,650 diventa conferenze o Settimana zero o qualcosa del genere. 862 00:39:54,650 --> 00:39:55,970 Ma quasi identico. 863 00:39:55,970 --> 00:39:58,657 Quindi tutta questa roba è solo tipo di copiato e incollato. 864 00:39:58,657 --> 00:40:00,490 E ci sono un paio altre linee mi viene in mente 865 00:40:00,490 --> 00:40:05,000 di che sono probabilmente identici in tutti i file. 866 00:40:05,000 --> 00:40:06,315 >> STUDENTE: 12 e 13. 867 00:40:06,315 --> 00:40:07,190 DAVID J. MALAN: Sì. 868 00:40:07,190 --> 00:40:11,220 Certo, 12, 13, e 14, probabilmente, solo perché le cose interessanti 869 00:40:11,220 --> 00:40:15,460 sta accadendo sulle linee 11 e 10, così sembrerebbe. 870 00:40:15,460 --> 00:40:18,350 Quindi diamo un'occhiata a versione 1, che cerca di migliorare su questo. 871 00:40:18,350 --> 00:40:24,020 Nella versione 1 del presente example-- mvc ce la faremo spiegare cosa significa MVC in una moment-- 872 00:40:24,020 --> 00:40:27,420 se vado in indice, che tipo di guarda un po 'di confusione ora. 873 00:40:27,420 --> 00:40:28,880 Non è così semplice come prima. 874 00:40:28,880 --> 00:40:30,906 >> Ma una volta che si inizia a lesse con attenzione, è 875 00:40:30,906 --> 00:40:32,530 piuttosto semplice quello che sta facendo. 876 00:40:32,530 --> 00:40:34,397 A quanto pare la linea 1 e linea 8 sono sostituiti 877 00:40:34,397 --> 00:40:37,230 tutte le cose che hai appena identified-- anche se solo per buona misura, 878 00:40:37,230 --> 00:40:41,900 Ho lasciato le ULS lì solo nel caso in cui alcuni giorni non hanno un elenco di cose. 879 00:40:41,900 --> 00:40:47,860 E lo richiedano è un po 'come libbra includere in C. Copia e incolla 880 00:40:47,860 --> 00:40:50,470 il contenuto efficacemente proprio qui in questo file. 881 00:40:50,470 --> 00:40:53,650 >> Quindi, in header.php, come si potrebbe dedurre dal suo nome, 882 00:40:53,650 --> 00:40:55,330 sta per essere nell'intestazione della pagina. 883 00:40:55,330 --> 00:40:57,110 È un po 'orfani qui. 884 00:40:57,110 --> 00:41:01,820 Ha solo la parte superiore di esso, ma non c'è più il contenuto sotto. 885 00:41:01,820 --> 00:41:05,070 >> E se guardo a piè di pagina nel frattempo, che era l'altro file mentioned-- 886 00:41:05,070 --> 00:41:08,830 questo è ancora meno interessante, ma ancora una volta, è comune a tutto. 887 00:41:08,830 --> 00:41:10,250 Quindi questo è il piè di pagina. 888 00:41:10,250 --> 00:41:11,300 Questa è l'intestazione. 889 00:41:11,300 --> 00:41:13,950 Questo è il file che è cambiare, quindi perché non 890 00:41:13,950 --> 00:41:18,140 cercare di scomporre la comunanza con queste due righe qui? 891 00:41:18,140 --> 00:41:20,090 >> Ma possiamo pulire questo un po 'più lontano. 892 00:41:20,090 --> 00:41:23,260 Ho intenzione di andare avanti e aprire versione a due in cui 893 00:41:23,260 --> 00:41:27,106 vedremo che non c'è un nuovo file, helpers.php. 894 00:41:27,106 --> 00:41:28,610 Staremo a vedere di cosa si tratta in un attimo. 895 00:41:28,610 --> 00:41:30,930 Andiamo a indice, come il punto di ingresso come prima. 896 00:41:30,930 --> 00:41:35,230 >> E ora mi accorgo che richiedono helpers.php, non di intestazione o piè di pagina. 897 00:41:35,230 --> 00:41:41,720 Ma aiutanti è una specie di helpers.c e helpers.h da PSET 2 898 00:41:41,720 --> 00:41:46,150 o PSET 3 tempo fa, quando in realtà ha cercare e trovare per questo PSET, 899 00:41:46,150 --> 00:41:50,950 e hai avuto tutto il codice per l'ordinamento e la ricerca in un file separato. 900 00:41:50,950 --> 00:41:52,510 Questo è quello che sta succedendo qui. 901 00:41:52,510 --> 00:41:54,390 >> E ora la linea 3 sembra un po 'diverso. 902 00:41:54,390 --> 00:41:55,920 Ed è una sola riga. 903 00:41:55,920 --> 00:41:57,950 Per renderlo ancora più chiaro, ho potuto solo 904 00:41:57,950 --> 00:42:01,820 do che questo sia stilisticamente coerente con tutto il resto che abbiamo fatto. 905 00:42:01,820 --> 00:42:04,130 Ma non è davvero modificare la funzionalità. 906 00:42:04,130 --> 00:42:05,880 E 'solo una riga di codice vero e proprio. 907 00:42:05,880 --> 00:42:09,010 >> A quanto pare, c'è una funzione in qualche luogo chiamato render intestazione, 908 00:42:09,010 --> 00:42:11,420 Ed è qui che le cose ottenere abbastanza potente. 909 00:42:11,420 --> 00:42:17,040 Si noti che all'interno delle sue parentesi è ciò che altro pezzo di sintassi? 910 00:42:17,040 --> 00:42:19,780 911 00:42:19,780 --> 00:42:23,350 E 'probabilmente un po' difficile da dire, ma notare there's-- metto un po 'di bianco 912 00:42:23,350 --> 00:42:24,300 lo spazio. 913 00:42:24,300 --> 00:42:25,530 C'è parentesi quadre. 914 00:42:25,530 --> 00:42:29,700 >> E parentesi quadre abbiamo visto un po 'fa nell'ambito di array associativi, 915 00:42:29,700 --> 00:42:31,580 quali sono, ancora una volta, come tabelle hash. 916 00:42:31,580 --> 00:42:36,230 E se si pensa ora a C, il ordine degli argomenti in una funzione 917 00:42:36,230 --> 00:42:37,570 deve essere sempre la stessa. 918 00:42:37,570 --> 00:42:41,146 Bisogna ricordare ciò che il ordinare è-- x, y, z o z, y, X-- 919 00:42:41,146 --> 00:42:44,020 e è necessario fornire sempre loro nello stesso ordine oppure cercare 920 00:42:44,020 --> 00:42:45,100 se hai dimenticato. 921 00:42:45,100 --> 00:42:51,140 >> Ma questo sembra essere un modo intelligente di superamento di un valore chiave arbitrario 922 00:42:51,140 --> 00:42:55,840 coppie in base al quale il titolo è il nome di un argomento in questo caso 923 00:42:55,840 --> 00:42:58,334 e CS50 è il suo valore. 924 00:42:58,334 --> 00:43:00,250 E il fatto che io ho queste parentesi quadre 925 00:43:00,250 --> 00:43:02,560 qui significa che ho potuto passare anche a qualcosa 926 00:43:02,560 --> 00:43:07,550 come una settimana è 1 o 0 o 2 o 3. 927 00:43:07,550 --> 00:43:10,550 Proprio per questo abbiamo parametrizzato questa funzione in modo 928 00:43:10,550 --> 00:43:15,180 che possono essere necessari più ingressi, ma per ora è solo quello. 929 00:43:15,180 --> 00:43:20,060 >> Se io ora vado in helpers.php, notare quello che sta facendo. 930 00:43:20,060 --> 00:43:22,030 Questo è un po ' di nuove funzionalità, 931 00:43:22,030 --> 00:43:24,190 ma per ora basta prendere sulla fede che si tratta di 932 00:43:24,190 --> 00:43:26,570 la sintassi con cui si definire una funzione in PHP. 933 00:43:26,570 --> 00:43:27,840 È letteralmente dice funzione. 934 00:43:27,840 --> 00:43:30,090 Non si specifica un ritorno digitare, e questo è coerente 935 00:43:30,090 --> 00:43:33,880 con dettaglio variabile precedente in cui non si ha realmente digita con forza. 936 00:43:33,880 --> 00:43:35,650 >> Questo specifica solo che, per impostazione predefinita, questo 937 00:43:35,650 --> 00:43:37,460 prende un associativa matrice come argomento. 938 00:43:37,460 --> 00:43:38,210 E sai una cosa? 939 00:43:38,210 --> 00:43:41,450 Se l'utente non passa uno in, assumere un valore predefinito. 940 00:43:41,450 --> 00:43:44,680 >> Questa è una caratteristica che C non ha per noi, che è bello, perché ora 941 00:43:44,680 --> 00:43:46,430 dati, anche se si non dare nulla, 942 00:43:46,430 --> 00:43:49,300 sta per essere matrice ma uno vuoto. 943 00:43:49,300 --> 00:43:51,860 E per inciso, estratto appena fa qualcosa di strano 944 00:43:51,860 --> 00:43:56,380 dove prende tutte le chiavi da questo array associativo, tutte le cose 945 00:43:56,380 --> 00:43:59,950 si potrebbe mettere tra parentesi quadre, e crea le variabili di fuori di essi 946 00:43:59,950 --> 00:44:06,270 in modo che possiamo in ultima analisi, avere accesso a loro in footet.php e header.php. 947 00:44:06,270 --> 00:44:08,950 Questo è un po 'astratto, così vorrei sottolineare questo fuori. 948 00:44:08,950 --> 00:44:12,990 >> In index.php, noto che sono passando in una coppia di valori chiave di titolo 949 00:44:12,990 --> 00:44:14,850 con un valore di CS50. 950 00:44:14,850 --> 00:44:18,660 Se io ora guardo helpers.php, notare che RenderHeader 951 00:44:18,660 --> 00:44:23,870 è l'estrazione che i dati che sto passando in, e quindi richiedono header.php. 952 00:44:23,870 --> 00:44:27,970 Quello che ho fatto è una sorta di un povero uomo di implementazione ora di quanto segue. 953 00:44:27,970 --> 00:44:31,720 >> Se apro header.php, Avviso che non ho più duro 954 00:44:31,720 --> 00:44:34,890 codificato la parola CS50 in questo file di intestazione. 955 00:44:34,890 --> 00:44:39,310 Ho messo questo certamente atrocemente nome funzione, HTML caratteri speciali, 956 00:44:39,310 --> 00:44:40,170 in là. 957 00:44:40,170 --> 00:44:41,640 A meno di notare quello che ho fatto. 958 00:44:41,640 --> 00:44:44,240 Ho aperto HTML. 959 00:44:44,240 --> 00:44:47,420 Poi ho aperto la testa e il titolo aperto. 960 00:44:47,420 --> 00:44:52,380 >> E poi all'interno del titolo aperto e tag di chiusura, mi hanno un po 'di codice PHP. 961 00:44:52,380 --> 00:44:56,670 E questa è una bella, ma di sintassi, il che significa che solo eco fuori. 962 00:44:56,670 --> 00:44:59,840 Letteralmente significa questo-- eco il following-- 963 00:44:59,840 --> 00:45:01,910 ma questo è più sexy di scrivere. 964 00:45:01,910 --> 00:45:05,000 Echo il titolo che è stato in passato. 965 00:45:05,000 --> 00:45:07,560 >> Ma voi cosa ne pensate HTML carattere speciale è tutto, 966 00:45:07,560 --> 00:45:10,590 soprattutto se si hanno una certa esperienza prima HTML? 967 00:45:10,590 --> 00:45:14,050 Quali sono i caratteri potrebbe essere pericoloso passare in una pagina 968 00:45:14,050 --> 00:45:17,980 dove si sta generando dinamicamente la pagina web con il codice come questo? 969 00:45:17,980 --> 00:45:21,370 970 00:45:21,370 --> 00:45:24,650 Lasciami andare a questo file, versione due, e vedere se non riesco a indurre questa. 971 00:45:24,650 --> 00:45:26,210 >> Versione due è questo. 972 00:45:26,210 --> 00:45:28,510 E notare tutto va bene, funziona bene. 973 00:45:28,510 --> 00:45:35,280 Ma supponiamo che io vado in index.php e Ho specificato che il titolo della mia pagina 974 00:45:35,280 --> 00:45:36,630 non è CS50. 975 00:45:36,630 --> 00:45:44,930 E 'avviso scritto parentesi aperta ciao mondo, vicino singola citazione, 976 00:45:44,930 --> 00:45:49,740 parentesi chiusa, punto e virgola, parentesi aperta, lo script barra. 977 00:45:49,740 --> 00:45:51,897 >> Script, come vedremo finalmente vedere, è un tag 978 00:45:51,897 --> 00:45:54,480 che è possibile utilizzare per usare di un altro linguaggio di programmazione chiamato 979 00:45:54,480 --> 00:45:56,330 JavaScript all'interno di una pagina web. 980 00:45:56,330 --> 00:45:57,960 E ora notare la logica qui. 981 00:45:57,960 --> 00:45:59,840 Ecco una chiave denominata titolo. 982 00:45:59,840 --> 00:46:02,690 Ecco è pazzesco valore a lungo ora. 983 00:46:02,690 --> 00:46:07,840 >> Ma se vado a chi aiuta page- o meglio, la pagina di intestazione, 984 00:46:07,840 --> 00:46:11,310 Io chiamo questa funzione su quel titolo prima. 985 00:46:11,310 --> 00:46:15,250 Quindi, se io ora ricarica questa pagina, ho vedere questo, che sembra ridicolo, 986 00:46:15,250 --> 00:46:16,110 ma è sicuro. 987 00:46:16,110 --> 00:46:17,310 Sembra proprio stupido. 988 00:46:17,310 --> 00:46:20,320 >> Ma supponiamo invece Avevo dimenticato questo. 989 00:46:20,320 --> 00:46:24,660 E le mie parole, un numero diverso da zero di si dimentica di fare questo 990 00:46:24,660 --> 00:46:27,790 e si otterrà un po 'laboriosa studente o un amico in arrivo 991 00:46:27,790 --> 00:46:31,540 a voi in fiera CS50 o anonima di notte rovistando sul tuo sito web 992 00:46:31,540 --> 00:46:35,300 ed essenzialmente iniettare codice a tua insaputa nel tuo sito 993 00:46:35,300 --> 00:46:35,800 in qualche modo. 994 00:46:35,800 --> 00:46:39,000 >> Perché se io sputo semplicemente out titolo qui e titolo 995 00:46:39,000 --> 00:46:44,330 there-- bene, se il titolo letteralmente sembra che questo e PHP 996 00:46:44,330 --> 00:46:47,660 come un linguaggio che può sputare le altre lingue il testo, 997 00:46:47,660 --> 00:46:50,650 questo sta letteralmente andando di sostituire questo tag con, 998 00:46:50,650 --> 00:46:53,010 Naturalmente, quello che ho messo altrove. 999 00:46:53,010 --> 00:46:57,640 >> Quindi, se io ora vado qui e ricaricare dopo annullare quei meccanismi di sicurezza, 1000 00:46:57,640 --> 00:46:59,982 ora ho ciao mondo qui. 1001 00:46:59,982 --> 00:47:02,690 Ora che non è tutto così grande di un a che fare, ma si potrebbe fare qualcosa 1002 00:47:02,690 --> 00:47:05,119 un po 'più dannoso qui, come se ci fosse 1003 00:47:05,119 --> 00:47:08,410 altro tags-- come vedremo, una volta che spendiamo più tempo in Javascript-- come posizione 1004 00:47:08,410 --> 00:47:14,910 dot href ottiene, citazione, unquote, HTTP business.com, ma il contrario di quello 1005 00:47:14,910 --> 00:47:15,950 dall'altro giorno. 1006 00:47:15,950 --> 00:47:20,120 E ora è possibile indurre una web Pagina di andare effettivamente subito 1007 00:47:20,120 --> 00:47:21,190 a questa pagina web qui. 1008 00:47:21,190 --> 00:47:23,000 >> E in realtà, non voglio di andare anche a business.com 1009 00:47:23,000 --> 00:47:24,749 perché non voglio per sapere di cosa si tratta. 1010 00:47:24,749 --> 00:47:28,710 Ma anche questo innescherà codice essere iniettato in questa pagina. 1011 00:47:28,710 --> 00:47:32,680 Quindi questo è solo per dire che anche se stiamo introducendo super presto su alcuni 1012 00:47:32,680 --> 00:47:36,800 di queste strutture più complesse, è tutto verso la fine di fare in modo 1013 00:47:36,800 --> 00:47:39,320 che il codice non è sfruttabile. 1014 00:47:39,320 --> 00:47:40,960 >> Così ora una terza versione qui. 1015 00:47:40,960 --> 00:47:42,470 Sta diventando un po 'più elaborato. 1016 00:47:42,470 --> 00:47:44,875 Non ho davvero like-- il lato anale di me 1017 00:47:44,875 --> 00:47:47,750 è stato sempre un po 'infastidito dal fatto che avevo una funzione chiamata 1018 00:47:47,750 --> 00:47:51,940 RenderHeader e RenderFooter che erano quasi identici. 1019 00:47:51,940 --> 00:47:55,400 Così mi venne in mente, perché non fare I parametrizzare queste funzioni 1020 00:47:55,400 --> 00:47:59,180 in una sola chiamata di rendering, farlo prendere un secondo argomento 1021 00:47:59,180 --> 00:48:04,420 come il nome del modello, la finale a render-- o intestazione o piè di pagina? 1022 00:48:04,420 --> 00:48:07,160 E poi eventualmente, se voglio di passare in alcune coppie di valori chiave 1023 00:48:07,160 --> 00:48:10,580 come faccio io per il titolo per la intestazione, ma non per il piè di pagina, 1024 00:48:10,580 --> 00:48:11,800 Potrei farlo. 1025 00:48:11,800 --> 00:48:16,510 >> E così ora se vado in helpers.php, è un po 'più complessa. 1026 00:48:16,510 --> 00:48:19,670 E io agito le mani al dettagli, ma è solo una funzione. 1027 00:48:19,670 --> 00:48:21,890 Ecco, questo è un passo verso una migliore progettazione. 1028 00:48:21,890 --> 00:48:23,360 >> Possiamo prendere ulteriormente questo un passo. 1029 00:48:23,360 --> 00:48:28,890 Se vado nel mio quarto versione di questo, si noti oggi 1030 00:48:28,890 --> 00:48:31,320 che sto facendo qualcosa ancora più specie di criptico. 1031 00:48:31,320 --> 00:48:33,230 E so che questo è un lotto di assorbire in una volta, 1032 00:48:33,230 --> 00:48:35,080 ma siamo solo tipo di pulire le cose. 1033 00:48:35,080 --> 00:48:38,550 Ora sto mettendo i miei ausiliari file in una cartella chiamata 1034 00:48:38,550 --> 00:48:41,190 includes-- solo un arbitrario nome dove voglio mettere roba 1035 00:48:41,190 --> 00:48:44,300 che voglio include-- e poi il resto di questo è la stessa. 1036 00:48:44,300 --> 00:48:47,140 >> Ma se guardo ora in gedit, Avviso che ho deciso di eliminare 1037 00:48:47,140 --> 00:48:51,940 di tutti quegli altri file e ho li spostata, per esempio, in questa sede. 1038 00:48:51,940 --> 00:48:55,110 E poi nei modelli, Ho questo qui, anche. 1039 00:48:55,110 --> 00:48:59,292 E così questo è tutto ora verso un passo di utilizzare un migliore modello di progettazione. 1040 00:48:59,292 --> 00:49:01,000 E siamo molto velocemente intenzione di allontanarsi 1041 00:49:01,000 --> 00:49:03,870 dalla funzionalità predefinita di PHP, che abbiamo iniziato qui con, 1042 00:49:03,870 --> 00:49:07,655 dove basta commingle PHP, e il codice HTML e il CSS, 1043 00:49:07,655 --> 00:49:09,780 e basta sputare fuori e si va sulla tua strada. 1044 00:49:09,780 --> 00:49:11,404 Non sarà molto gestibile. 1045 00:49:11,404 --> 00:49:14,481 Proprio come in C, abbiamo iniziato a utilizzare più file e più funzioni 1046 00:49:14,481 --> 00:49:15,730 e factoring cose che fuori. 1047 00:49:15,730 --> 00:49:16,688 Faremo lo stesso qui. 1048 00:49:16,688 --> 00:49:19,970 Ed infatti, nel quinto e ultimo versione qui, ho fatto un'altra cosa. 1049 00:49:19,970 --> 00:49:23,710 È anche possibile utilizzare punto punto, che, ancora una volta, è solo la directory principale. 1050 00:49:23,710 --> 00:49:28,260 Per essere ancora più attenti alla sicurezza, perché se guardo l'ascolto 1051 00:49:28,260 --> 00:49:32,450 qui per la quinta e la versione finale, avviso che ho un elenco qui chiamato 1052 00:49:32,450 --> 00:49:35,180 pubblica, e quindi sulla stesso livello, per così dire, 1053 00:49:35,180 --> 00:49:38,490 Ho comprende e modelli e poi il file di testo readme. 1054 00:49:38,490 --> 00:49:41,130 >> E la ragione per cui ho strutturato ci si sente questo-- e tanti web 1055 00:49:41,130 --> 00:49:44,330 padroni di casa, soprattutto quelli $ 5 quelli mese o quelle 10 dollari al mese, 1056 00:49:44,330 --> 00:49:47,170 se hai mai avuto uno di questi services-- quello che molti di loro lo fanno 1057 00:49:47,170 --> 00:49:50,690 è solo che aspettano di scaricare tutto i file in una directory, 1058 00:49:50,690 --> 00:49:53,640 come abbiamo fatto già con questo primo esempio. 1059 00:49:53,640 --> 00:49:56,740 >> Ma non appena si inizia la costruzione di più siti sofisticati che solo memorizzano 1060 00:49:56,740 --> 00:50:00,480 dati che si preoccupano e file che si si preoccupano, in realtà organizzare le cose 1061 00:50:00,480 --> 00:50:05,060 correttamente e con più sicurezza coscienza nella mente può 1062 00:50:05,060 --> 00:50:07,927 cominciamo a difendere contro tutti gli amici 1063 00:50:07,927 --> 00:50:10,135 che hai dentro o al di fuori di questa classe che, 1064 00:50:10,135 --> 00:50:12,510 non appena si inizia a fare programmi di te sul web, 1065 00:50:12,510 --> 00:50:15,140 stanno per iniziare a raccogliere su di voi e su di essi. 1066 00:50:15,140 --> 00:50:17,420 >> E così vedremo in ultima analisi, in questo disegno. 1067 00:50:17,420 --> 00:50:20,010 Questa è solo una foto che raffigura il seguente. 1068 00:50:20,010 --> 00:50:22,897 Stiamo andando a mettere tutta la nostra logica di programmazione in uno o più file, 1069 00:50:22,897 --> 00:50:25,230 e stiamo per iniziare solo chiamando i controllori. 1070 00:50:25,230 --> 00:50:28,022 È il luogo dove il cervello di i nostri siti web sono in realtà. 1071 00:50:28,022 --> 00:50:29,730 Poi andremo a hanno vista e viste 1072 00:50:29,730 --> 00:50:32,480 sono così semplice come separato files-- chiamati modelli, spesso. 1073 00:50:32,480 --> 00:50:34,410 Hanno solo il l'estetica della mia pagina, 1074 00:50:34,410 --> 00:50:37,020 quello che voglio nella pagina di guardare like-- i colori e il layout 1075 00:50:37,020 --> 00:50:38,870 e le posizioni di tutte le variabili. 1076 00:50:38,870 --> 00:50:41,120 >> E poi più interessante che saremo alla fine arriva a 1077 00:50:41,120 --> 00:50:45,420 è il modello, che sta per essere solo la parola che schiaffo su altre tecnologie 1078 00:50:45,420 --> 00:50:47,771 che mettono in immagine, come i database attuali, 1079 00:50:47,771 --> 00:50:49,520 in modo che quando si desidera per salvare le informazioni, 1080 00:50:49,520 --> 00:50:52,140 non è sufficiente inviare una e-mail al Proctor o per te stesso, 1081 00:50:52,140 --> 00:50:57,350 in realtà memorizza in un database utilizzando un altro linguaggio conosciuto come SQL. 1082 00:50:57,350 --> 00:51:00,450 E così ce ne andremo qui oggi e pick up con questo il Mercoledì 1083 00:51:00,450 --> 00:51:02,990 e di introdurre i database poi. 1084 00:51:02,990 --> 00:51:06,940 >> [RIPRODUZIONE DI BRANI MUSICALI] 1085 00:51:06,940 --> 00:54:24,555