[Powered by Google Translate] [Settimana 8]
[David J Malan] [Harvard University]
[Questo è CS50.] [CS50.TV]
>> Bentornato.
Questo è CS50, e questo è l'inizio di 8 settimane.
Un paio di opportunità di questa settimana,
tra i quali questo discorso qui, in cui il cibo viene servito.
Per maggiori informazioni consultare le diapositive che sono online.
E anche un altro evento questa settimana dal nostro Thomas Carriero.
E 'uno dei compagni di CS50 ex testa di insegnamento, che è ora a Dropbox,
e lui è il ragazzo che ci ha collegato con la sai una cosa,
quindi se si vuole di più che la testa i loro discorsi di questo pomeriggio per Dropbox e altro ancora.
CS50 pranzo è questo Venerdì.
Sei unirsi a noi, se si è in grado, 1:15, come al solito, a Fire and Ice.
>> E ora ci immergiamo in qualcosa chiamato Seminari.
I nostri Seminari CS50, richiamo, sono queste classi opzionali guidati dai compagni di insegnamento
e assistenti del corso e gli amici del corso,
gente da un gruppo di campus chiamato ABCD, che è un gruppo di
tecnofili nel campus, così come un gruppo chiamato HCS,
Society di Harvard computer, gli studenti universitari che sono ugualmente interessati al calcolo.
Roster di quest'anno di seminari comprende seminari su Android e iOS e JavaScript
e PHP, Unix, Vim, e molto altro, in modo da rendersi conto che questi seminari sono in arrivo.
Se vuoi RSVP per nessuno di loro testa a tale URL lì.
Noi poi pubblicare sul sito web del corso i tempi ei luoghi, una volta che sono finalizzati.
Ma vale la pena sapere c'è cinque anni di seminari precedenti disponibili online,
molti dei quali sono ancora molto attuale in termini di tecnologie che potrebbero
vuole giocare con per i vostri progetti finali, quindi andate lì per alcuni video disponibili della stessa.
>> CSS, quelli di voi che hanno familiarità con i CSS già,
ciò che è in poche parole?
Cosa sono i CSS?
E 'fogli di stile CSS, e che cosa vuol dire?
Che cosa fare per noi, i CSS?
Va bene, facciamo scaldare con un più facile, HTML, HyperText Markup Language.
Che cosa fare per noi?
Proprio nessuno?
Sta diventando davvero imbarazzante queste domande.
HTML, HyperText Markup Language.
Sì? No?
[Risposta degli studenti incomprensibile]
Ok, bene, ci permette di contrassegnare il testo da visualizzare in un browser web.
Non è un linguaggio di programmazione.
E 'davvero un linguaggio di markup, il che significa che indica al browser come visualizzare
informazioni, in modo il più semplice incarnazione di questo, come abbiamo visto
è qualcosa di super semplice come boldfacing, aprire staffa b parentesi chiusa, dice
fanno di questo testo in grassetto, e che in realtà è solo uno dei tanti modi
in cui possiamo farlo, e in effetti, in questi giorni un approccio migliore
alla stilizzazione tua pagina web, rendendo le cose in grassetto e corsivo
e centrati e giustificati e simili, non avviene tramite i tag HTML da solo
ma piuttosto con una tecnica chiamata CSS, fogli di stile CSS.
Questo è un linguaggio a sé stante.
E anche questo non è un linguaggio di programmazione ma-
tutti, questo è Dan, che mantiene con noi oggi.
Alcune difficoltà tecniche. Non è un problema.
>> CSS permette di stilizzare una pagina
impostando quelli che vengono chiamati proprietà, quindi diamo un'occhiata a questo
attraverso alcuni esempi di base.
Lasciami andare nell'apparecchio oggi.
Ho l'8 directory dei sorgenti Lunedi qui dentro,
e ho intenzione di andare in una directory denominata CSS dove abbiamo un sacco
di file in attesa per noi qui,
e in questa cartella abbiamo, per esempio, search0.html dall'ultima volta.
Ora, ricordo con search0 abbiamo lasciato su questa nota
ordina di implementare Google o in realtà solo il front-end di una settimana fa,
e notare che abbiamo avuto alcuni nuovi tag lì.
Avevamo h1 per un grande titolo in grassetto,
forma, che ci ha permesso di avere in realtà un modulo HTML per l'input dell'utente.
Azione, qual era il significato di un attributo action
nel tag form HTML?
Qual era il significato di questo, l'azione?
Ho appena farò questo oggi.
L'azione è la destinazione in cui il modulo sta per essere presentata.
Il fatto che l'azione che dice = "google.com / search"
significa che quando l'utente fa clic sul pulsante di invio o l'equivalente
qualunque forma campi che compilato stanno per essere inviati al nostro server non
o la nostra macchina, ma piuttosto a quello specifico URL di Google.
E il metodo che sta per usare si chiama get,
e ottenere, per ora, è solo una tecnica per il passaggio di informazioni lungo su un server web
attraverso l'URL, quindi diamo un rapido sguardo indietro a come funziona.
>> Si noti che c'è un ingresso il cui nome è q
cui tipo è testo e poi un secondo ingresso di tipo presentare
il cui valore è CS50 Ricerca, e in effetti, se ci apriamo il file qui,
search0.html, è una forma super semplice,
e se cerco qualcosa come la scienza del computer
e quindi premere Invio o fare clic su Cerca CS50
notare che ciò che accade è al di là di arrivare a Google
Ho specificamente finito in questo URL nella parte superiore,
google.com / search? q = + computer scienza,
e l'informatica è, ovviamente, quello che ho digitato trovi
Il + significa solo che lì era un carattere di spazio,
ed è fatta dal browser solo per assicurarsi che non ci sia
confusione e lo spazio bianco l'URL effettivo.
E poi q, naturalmente, è il nome del parametro.
Non abbiamo visto il modo in cui, il programmatore, può effettivamente accedere q ancora.
Possiamo supporre che Google sa cosa fare con questo qui,
ma ci arriveremo a tempo debito oggi.
>> Ma fammi dare un'occhiata invece al search1.html,
che sembra un po 'diverso, perché ho deciso che questa forma qui era solo un po' zoppo.
Voglio dire, e 'in alto a sinistra.
Non c'è davvero nessun estetica ad essa, e quindi voglio stilizzare questo
un po 'più simile a Google, la cui homepage, richiamo,
anche se non si potrebbe fare che spesso, si presenta così oggi il giorno di Halloween.
Se invece aprire la versione 1 di questo file, 1.html ricerca, l'ho centrato.
, Ancora abbastanza brutto, ma almeno ora ho iniziato a controllare l'estetica di questa pagina
non solo la marcatura su stessa.
Diamo un'occhiata a ricerca 1, e non c'è davvero solo una differenza qui,
che potrebbe saltare fuori di te, o forse no,
ma qual è la linea di una o frammento di differenza?
>> C'è questo attributo di stile, così si scopre che in HTML
maggior parte degli elementi, la maggior parte dei tag può avere un attributo di stile su di loro,
e all'interno di tale attributo stile è una stringa tra virgolette,
e che la stringa tra virgolette è CSS.
Si può mettere foglio di stile CSS in là
specificando come un nome di proprietà
seguito da due punti seguito da un valore.
Questa è una specie di una decisione di design infelice alcuni anni fa
che i CSS è un linguaggio a sé stante,
ma sintatticamente è molto diverso da HTML.
In questo caso, si vede che all'interno della mia pagina web, che è scritto in HTML,
Ho CSS all'interno di queste citazioni, e la convenzione per i CSS
è che si dispone di quello che si chiama una proprietà seguito da, ancora una volta, i due punti,
seguito dal valore di tale proprietà, quindi non c'è alcun segno di uguale.
Non ci sono citazioni supplementari.
E 'solo questa coppia di valori separati due punti chiave,
riga di testo e fa esattamente quello che dice.
Si allinea il testo nel corpo della pagina, che è davvero il coraggio della pagina,
nel centro.
>> Ok, il risultato finale poi, per essere chiari, è questo.
Non tutto ciò che più sexy, ma almeno è centrato e un po 'più come il vero Google.
Ma cosa succede se io invece aprire versione 2 di questo
e segnalare qui un nuovo tag del tutto?
Ora, nella testa della mia pagina, che in precedenza aveva solo il tag
in tutti gli esempi precedenti?
E 'appena avuto questo, il titolo.
Un momento fa, il tag head si presentava così.
Ora invece ha un interno stile tag di esso,
e anche questo, mi scuso, sembra sintatticamente molto diverso da HTML,
ma ci si abitua ad esso, per cui all'interno del tag di stile
Ora posso scomporre quello che era un momento fa
un attributo, l'attributo di stile, e può mettere in cima della mia pagina.
>> Perché?
Bene, questo è un passo verso la pulizia le cose, proprio come nella scrittura di codice C
noi a volte scrivere funzioni per scomporre funzionalità comuni.
E 'solo un po' più pulito per iniziare factoring fuori cose come l'estetica
ad una posizione centrale, piuttosto che avere tutto intersperse tutto il codice HTML.
Questo fa anche quello che dice, anche se c'è un po 'di nuova sintassi.
Questo qui è un selettore, e il corpo significa semplicemente selezionare l'elemento del corpo
e applicare le seguenti proprietà ad esso.
Beh, la proprietà è esattamente la stessa.
Per buona misura ho aggiunto un punto e virgola alla fine,
che tende ad essere convention, e ho avvolto questa intera proprietà
tra parentesi graffe, perché ho potuto effettivamente avere cose diverse qui.
Potevo dire qualcosa come il colore: blu;
>> Ora, anche questo non sarà un passo verso qualcosa di tutto ciò che più bello,
ma se io ora tornare alla versione 2 che ho almeno ora fatto il corpo di mio
pagina di testo tutto blu.
Il pulsante rimane lo stesso, perché questo è un ingresso. Non è puro testo.
Ma tutto il resto che è un testo, come CS50 ricerca in alto, è fatto in blu.
Anche in questo caso, tutto quello che abbiamo fatto oggi è rimuovere dal tag body, avviso,
l'attributo di stile, e abbiamo presi fuori qui.
Questo non è un miglioramento enorme, ma se prendiamo un passo avanti
notare ciò che possiamo fare in questa terza versione qui.
>> In search3.html la pagina web è quasi identica
salvo quanto nuovo tag adesso?
Link, quindi questo non è molto giustamente chiamato
perché non si sta collegando, nel senso di un collegamento ipertestuale cliccabile.
Piuttosto, tu sei una sorta di fare l'equivalente di # include in C
per cui il tag link con un attributo href
e un attributo rel dice andare avanti
e copia incolla il contenuto di un file chiamato search3.css proprio qui, in sostanza.
Non riesco però a farlo, ma questo è lo spirito di esso.
Dice va aperto il file, search3.css,
e trattarla come se l'utente avesse digitato proprio qui nella testa della pagina
proprio come ho fatto nell'esempio precedente.
Search3.css, nel frattempo, è piuttosto semplice.
E 'davvero contiene esattamente quello che è stato un momento fa
nel tag stile, ma ho presi fuori qui per un proprio file.
>> Anche se non abbiamo trascorso molto tempo a tutti in HTML o programmazione web
solo intuitivamente qual è la motivazione, forse, per lo scorporo
questo piccolo frammento anche di CSS in un proprio file
e poi anche con questo tag link qui?
[Risposta degli studenti incomprensibile]
Ok, è più facile da leggere, nel senso che hai il tuo CSS in un file CSS.
Tu hai il tuo HTML nel file HTML, quindi è più leggibile in questo senso.
Che altro potrebbe essere interessante? Gia '.
[Risposta degli studenti incomprensibile]
Gia ', in modo da poter includere molte volte, quindi in questo momento stiamo facendo questi
esempi di base con i file singoli, ma supponiamo che in realtà si sta facendo
un sito web vero e proprio, come si vuole per pset 7 o il progetto finale, forse,
e si desidera avere più pagine Web, come è certamente comune
il Web attuale largo, e sarebbe tipo di lame
di dover copiare e incollare lo stesso colore blu
e lo stesso testo allineato centro in ogni una di quelle pagine.
Piuttosto ha più senso di scomporre, proprio come abbiamo fatto in C
con il file. h, metterlo in un posto centrale,
in questo caso search3.css, e quindi consentire qualsiasi tipo di file
nel tuo sito web per includere effettivamente quel file per mezzo di questo tag qui a riga 16.
Come è il caso tipico, abbiamo iniziato con la versione 0, che tipo di lavori
ma non è necessariamente il migliore, e ad ogni passo,
ricerca 1, ricerca 2, e ora la ricerca 3 abbiamo preso questi piccoli passi
verso disegni che sono un po 'più pulito e sono più preparatoria
per le pagine più complesse che si potrebbe fare lungo la strada.
>> Vorrei aprire un ultimo esempio qui solo per mostrare
una pagina ancora più stilizzato, ma prima diamo un'occhiata al codice HTML.
Questo è search4.html, e notare che strutturalmente è quasi la stessa cosa
tranne per l'introduzione di un nuovo tag, div.
Div è un tag che introduce una divisione della pagina.
Si può pensare a questo come un rettangolo invisibile.
E 'una sorta di creare una fascia di zona nella pagina web
che è possibile stilizzare tutto in una volta.
Quello che ho fatto qui è la seguente.
All'interno del mio tag body, che è stato lì tutto il tempo,
Sto dicendo di creare una divisione della pagina qui tramite linee 45 a 47,
e che significa essenzialmente faccio un rettangolo invisibile lungo la parte superiore della pagina.
Allora dammi un secondo rettangolo, anche se invisibile, al di sotto,
e ad identificare il contenuto nome, e poi infine,
darmi una terza divisione della pagina in basso
chiamato ID.
Staremo a vedere per questo che ho fatto in un attimo,
ma concettualmente ho una divisione colpo di testa.
Ho una divisione dei contenuti, e ho una divisione piè di pagina
anche se questi sono solo nel markup.
L'utente non è andare a vedere 3 rettangoli,
ma una sorta di strutturalmente c'è dietro le quinte
sono effettivamente presenti.
>> Ora, chi se ne frega? Perché effettivamente fare questo?
Tutto il resto della pagina è la stessa che abbiamo visto prima.
Ecco la mia forma. Ecco il mio ingresso, il mio ingresso, l'interruzione di riga e così via.
Ecco un'immagine, però, così vedremo dove questo è venuto da solo in un momento.
Ecco un piè di pagina, che è nuovo, solo perché ho voluto introdurre
contenuti ancora un po 'qui.
Se scorrere verso l'alto notare che l'ID di questo div è intestazione.
L'ID di questo div è il contenuto, e l'ID di questo è piè di pagina.
E come suggerisce il nome, quando si dispone di un attributo ID
in HTML, per definizione, deve identificare in modo univoco
uno degli elementi, uno dei tag nella pagina.
L'onere è completamente a voi di ricordare che si dispone di un ID header già.
Si dispone di un piè di pagina. Si dispone di un ID di contenuto già.
Il computer non ha intenzione di capire che cosa è un ID a disposizione per voi,
così si potrebbe accidentalmente dare 2 tag di intestazione di un ID,
e che sarebbe solo sbagliato.
>> Dovete tenere a mente ciò che avete creato,
ma una volta che hai fatto notare ciò che possiamo fare qui.
Ora posso specificare nel mio stile di tag nella parte superiore
o, equivalentemente, nel mio file CSS, se stavo ancora usando questa versione,
Posso dire # header, e che cosa significa è che qualunque tag
in questa pagina ha un ID di intestazione
e #, solo per convenzione umana, rappresenta l'ID.
Il segno diesis o cancelletto rappresenta l'ID.
Intestazione è il nome che ho dato.
Questo significa applicare questa proprietà CSS
a qualsiasi tag di questa pagina porta un ID di intestazione.
Stessa cosa qui.
Applicare questa proprietà, che sembra essere lo stesso, a qualsiasi elemento
il cui ID è il contenuto, e poi qui
notato che ho avuto un po 'piu' complicata, piè di pagina.
Qualsiasi elemento il cui ID è piè di pagina, di cui non ci può essere una sola per definizione,
andare avanti e fare le sue dimensioni carattere più piccolo,
il suo peso di carattere grassetto, il suo margine di 20 pixel.
>> Che cosa vuol dire?
E 'solo un margine in alto, in basso, e la sinistra e la destra.
Questo significa darmi un margine di 20 pixel invisibile intorno ad esso
solo per spingere tutto il resto lontano da un po ', come si potrebbe fare in Word,
Microsoft Word o Pages o simili.
E poi il testo Allinea al centro.
Vediamo il risultato finale, e poi ce ne andiamo indietro fino al frammento restante uno dei CSS lì.
Questa è la versione 4, l'ultimo per gli esempi di ricerca, ed è molto, molto sexy.
Ora, in tutta onestà, io su Google "generatore di caratteri google logo."
E questo mi ha permesso di creare un GIF, un formato immagine, che sembra che non ci.
In realtà, si può fare anche questo.
Abbiamo "google logo font generatore."
>> Vediamo se siamo in grado di fare questo.
Va bene, penso che questo è il sito che ho usato.
Possiamo dire Ec 10, per esempio, e farli propri.
Si può giocare con questo tutto il giorno e quindi fare clic destro su di esso
e quindi scaricare l'attuale GIF, che è tutto ciò che ho fatto.
E in effetti, è per questo che nel mio HTML, ricordare, qui
Ho avuto un tag di immagine, che abbiamo visto brevemente la settimana scorsa
la cui fonte è logo.gif.
E che ancora una volta è stata la motivazione per avere questo attributo alt,
questo attributo alternativa?
Gia '.
[Risposta degli studenti incomprensibile]
Bene, quindi 2 motivi in ​​realtà, se il browser non può tirare l'immagine
perché si dispone di una connessione di rete lenta o se l'immagine è danneggiata
o qualcosa del genere che almeno l'essere umano può vedere "CS50 ricerca"
e poi anche per ragioni di accessibilità.
Se si dispone di un utente che è cieco e sta usando uno screen reader
e quindi, ovviamente, non è possibile vedere le immagini possono almeno
ascoltare il testo se il computer si parla di loro.
>> In generale, questo è più pratica quando si tratta di l'accessibilità delle pagine
modo che gli utenti, anche in questa situazione può sentire o vedere, per così dire,
che cosa è che è sulla vostra pagina.
C'è un'altra cosa che ho fatto qui
che è un po 'interessante, e vedremo di più su questo problema nel set 7
attraverso uno dei cortometraggi guidati da uno dei compagni di insegnamento.
Ma # contenuto si riferisce al tag
il cui ID è contenuto, ma poi c'è un carattere di spazio, e poi c'è la parola d'ingresso.
Beh, la cosa interessante di CSS è che si può
fare riferimento a variabili in una sorta di pagina gerarchicamente,
e ciò che questo frammento di mezzi CSS è trovare il tag
il cui ID è contenuto, e quindi applicare le seguenti proprietà
per tutti i tag di input che sono discendenti di contenuto,
cioè che sono rientrati all'interno di esso.
Rientro, di nuovo, è importante solo al computer, non umano,
ma per convenzione si trattino le cose come si va più a fondo di una pagina,
quindi questo significa applicare un margine di 5 pixel per ogni elemento di input
che da qualche parte dentro di o nidificata all'interno di
l'elemento il cui ID è contenuto.
>> Chi fa che si applicano a?
Beh, ci sono in realtà solo questi 2 ragazzi qui.
Si noti che all'interno del modulo non c'è 2 ingressi,
come c'è stato per tutti questi esempi.
Ma si noti che questi 2 ingressi capita di essere nidificato all'interno,
anche se un po 'in profondità, un doppio strato di rientro,
all'interno del tag il cui ID è contenuto.
Che cosa significa?
Se andiamo al browser qui si può vedere anche di poco-
vorrei ingrandire-che ci sia un po 'di imbottitura tra il pulsante
e tra il campo di testo.
>> Vorrei temporaneamente spegnerlo.
Lasciami andare fino al mio CSS, e lasciami andare avanti e basta
modificare tale margine da 5 pixel a 0 pixel.
Lasciami andare avanti allora e salvare il file, torna al motore di ricerca
e ricaricare, e guardare il centro della pagina.
Tutto ciò che ha compresso insieme, e quando l'ho montata su questo esempio
Ho pensato che sembrava stupido con il campo di testo e poi il pulsante immediatamente al di sotto.
Volevo pad un po ', così ho introdotto margini.
Quello che non farà in conferenza è passare attraverso la diverse decine
Proprietà CSS che esistono perché, ancora una volta, ci sono cose come la dimensione dei caratteri,
spessore del carattere, margini, testo allineare e una dozzina di altre poche,
e ti rimanda al problema posto da 7 a vari tutorial on-line
e riferimenti che consentono di recuperare queste cose.
Ma ciò che è veramente importante alla fine della giornata
>> è capire come queste cose vengono applicati.
Anche in questo caso, se abbiamo l'interno tag di stile, di cui
può andare i selettori, il tipo di identificatori che specificano
a cui si desidera applicare queste proprietà,
e poi si mettono le proprietà come coppia valore-chiave
separate da due punti e poi si è conclusa con un punto e virgola,
oppure è possibile rippare e convertire qualsiasi che fuori e metterlo in un file CSS separato
a se stessa.
Va bene, tutte le domande sui concetti
o il quadro generale dei CSS?
Potrai vedere ancora una volta di più in pset 7,
ma continueremo, in linea di abbastanza semplice.
No? Bene.
E 'tempo di un linguaggio di programmazione vero e proprio,
e torneremo a un po 'di CSS nella forma di un esempio.
PHP è in realtà un linguaggio meravigliosamente accessibile
nel senso che è sintatticamente quasi equivalente a C.
In altre parole, se si conosce C, si sa per il PHP maggior parte,
almeno sintatticamente, anche se ci sono alcune nuove funzionalità
e alcuni nuovi concetti che dovremo guardare.
>> Ma per la maggior parte, ora che abbiamo transizione da C a PHP
la maggior parte del nuovo materiale è davvero nella foto grande,
come si utilizza un linguaggio per la programmazione sul web rispetto a
alla riga di comando o in un lampeggiante prompt come abbiamo fatto finora.
Per avere un riferimento, in particolare con pset 7 e poi il progetto definitivo,
si avvalgono di questo URL qui se vuoi leggere su le formalità di PHP.
In realtà è come un libro di testo online gratuito in modo efficace,
e potrai anche scoprire che ciò che è veramente bella di PHP
è che ci sono centinaia di funzioni che vengono con esso,
mentre in C non ha necessariamente avere accesso a
più funzioni di erano nella libreria matematica, il CS50 biblioteca.
In PHP e un sacco di lingue moderne, Python e Ruby in mezzo a loro,
si ottiene così l'accesso a molte funzioni di più, il che significa che si arriva a scrivere
molto meno codice, perché si può salire sulle spalle di altre persone
che hanno già scritto alcune cose per voi.
>> Facciamo un giro veloce della sintassi di PHP e poi scrivere qualche esempio.
Il bello di PHP prima di tutto
è non c'è alcuna funzione principale.
Se si desidera scrivere un programma in PHP basta iniziare a scrivere codice,
e non si deve preoccupare principale.
Non c'è int. Non c'è ritorno.
Non c'è, argv argc quello che serve quando si scrive il programma.
Piuttosto si può solo iniziare a scrivere codice, e questo è in parte
perché PHP è quello che è chiamato un linguaggio interpretato.
C è stato compilato, ed è stato compilato, nel senso che si avvia
con il codice sorgente, si esegue attraverso Clang, che è un compilatore,
e, infine, dopo un certo numero di passaggi si ottiene il codice oggetto, 0 e 1.
PHP e Python e Ruby e Perla e altri
sono diversi tipi di lingue che non li compila.
Non si va da codice sorgente a 0 e 1.
Basta eseguire il codice sorgente, e si esegue il codice sorgente
scrivendo in un file di testo normale, che termina in. php in questo caso
invece di. c, e cosa fa il programma sul vostro computer
si interpreta letteralmente il codice riga per riga per riga.
>> In altre parole, piuttosto che scrivere un programma ed eseguire il programma
direttamente a voi invece che scrivere un programma con un file con estensione. php.
Poi si esegue un programma vero e proprio chiamato php.exe, se siete su Windows,
PHP o semplicemente se siete su Mac OS o Linux,
e di fornire come input al programma PHP il codice sorgente propria,
e il suo scopo nella vita è quello di leggere il codice in alto verso il basso, da sinistra a destra,
e non quello che hai detto di fare.
>> Vediamo cosa sta a significare sintatticamente.
In PHP ci sono le condizioni.
Questa diapositiva è identico a quello che avete visto indietro in settimana 1
perché sintatticamente condizioni, se e se e gli altri e la penale in PHP
esattamente come questo.
Quando si tratta di espressioni booleane che stanno andando a guardare esattamente come questo.
Quando si tratta di Anding cose insieme come booleana sta andando a guardare esattamente come questo.
Passa lo stesso aspetto, e si ottiene l'ulteriore vantaggio in PHP
che gli interruttori in C non poteva che accendere un char o int.
Non si poteva accendere un valore di stringa.
In PHP si può effettivamente avere un'espressione
che è una variabile il cui contenuto è una stringa,
e si può effettivamente fare il confronto tra stringhe in modo reale intuitivo,
non confronto puntatore, al fine di decidere se fare caso i o j o qualcosa d'altro.
Vedremo che potenzialmente non molto.
>> Loops troppo meravigliosamente sono gli stessi.
Per avere un loop di inizializzazione, una condizione, e un certo numero di aggiornamenti.
Mentre cicli esistono anche in PHP.
Sei cicli while esistono anche in PHP,
e gli array esistono in PHP, ma è qui che inizia la sintassi per ottenere un po 'diverso,
ma i concetti sono gli stessi, ed i concetti sono veramente gli stessi
come lo erano in 0 Settimana con Scratch.
In primo luogo è il simbolo $.
Questa è stata una decisione di progettazione in PHP in cui ogni variabile
in PHP di progettazione inizia con $ segno.
C'è di più senza X, Y, Z. E 'ora $ X, $ Y, Z $ solo perché.
E 'una cosa da tenere a mente, e ora sul lato destro
questo è simile a una matrice,
ma stiamo utilizzando le parentesi quadre qui.
In PHP e in JavaScript, come vedremo finalmente vedere,
per dichiarare un array si aprono parentesi quadra e chiusa parentesi quadra,
e poi si dispone di un elenco separato da virgole di valori, sia interi
o stringhe o caratteri, tutto quello che vuoi, all'interno di quella espressione lì.
>> Ora, come abbiamo fatto qualcosa di simile in C?
Qual è stata la sintassi per dichiarare staticamente una matrice di numeri conosciute?
E 'stato tra parentesi graffe, così piccola differenza qui, ma in entrambi PHP
e alla fine JavaScript usa solo tra parentesi quadre, in modo davvero
l'unico dettaglio interessante è il simbolo $ per il nome della variabile
e anche le parentesi quadre, e c'è una cosa curiosa
che è stato omesso e sulla sinistra del segno =.
Ciò che manca che stiamo richiedendo da settimane? Gia '.
[Risposta degli studenti incomprensibile]
La dimensione, quindi non c'è alcuna menzione della dimensione della matrice.
Francamente, non c'è alcuna menzione di parentesi quadre sul lato sinistro
del segno =, e che altro non è presente nella linea?
Si '. >> [Risposta degli studenti incomprensibile]
Il tipo, per cui ciò che è interessante, in particolare, su PHP
è che non è un linguaggio fortemente tipizzato come è C,
e che è fortemente tipizzati, nel senso che si deve dire char,
devi dire int, float devi dire.
>> Ogni volta che si desidera una variabile si deve dire Clang qual è il suo tipo è.
PHP è un po 'pigri.
E 'debolmente tipizzato nel senso che
si può avere carri e caratteri e le stringhe
e int e così via, ma la stessa lingua
in realtà non importa ciò che si mette all'interno di una variabile.
Non c'è bisogno di informare in anticipo il tipo di dati
sta andando in una variabile.
E 'interamente a voi, quindi questo è bello
nel senso che non ci si deve preoccupare tanto di dati digitando
e preoccupante ciò che i tuoi argomenti sono e così via.
Questo significa anche, infine, le funzioni in PHP saranno in grado di tornare
sia un maggior int del tempo, e forse tanto
faranno restituire un bool, un valore booleano falso, ad esempio, per significare che qualcosa è andato storto.
Questo ci dà alcuni aspetti positivi, ma anche ci renderà sorta di base alla progettazione
un po 'più pigri quando si tratta di digitazione dei dati.
>> Che altro c'è da tenere a mente?
Variabili sembrano abbastanza come questo, quindi $ s = "ciao, mondo".
Questo è forse desumibile dall'esempio precedente,
e abbiamo un altro tipo di ciclo.
Questo quello che troveremo a vedere di tanto in tanto dal momento che è molto utile,
un costrutto foreach.
In questo caso, il ciclo foreach porta all'interno delle sue parentesi 3 parole tipicamente,
$ Qualcosa prima, che è quello di matrice vuoi scorrere i membri di,
poi letteralmente la parola chiave come, e poi, infine,
un altro nome di variabile che si arriva a scegliere.
Può essere foo, bar, o elemento,
e ciò che questo costrutto fa
è se l'array $ contiene 10 elementi
ad ogni iterazione di questa matrice-dispiace, ad ogni iterazione di questo ciclo
l'elemento variabile chiamata sta per essere aggiornato
di essere il primo elemento della matrice, quindi il secondo elemento nella matrice,
poi il terzo elemento della matrice, ovviando così alla necessità
per fare la notazione un po 'fastidioso parentesi quadra e
$ I, al fine di indice in un array.
PHP fa tutto il lavoro per voi e per ogni iterazione
passa per te l'elemento successivo dalla matrice
senza dover conoscere o preoccupate per il suo posizione di indice numerico.
>> E poi, infine, per il momento, c'è un altra caratteristica di PHP
che sta per essere estremamente utile, soprattutto quando si inizia la programmazione sul web,
e che è conosciuto come un array associativo.
Gli array che conosciamo finora in 20 secondi fa
e per le ultime 8 settimane sono numericamente array indicizzati,
sorta di array tradizionali in cui gli indici sono interi,
0, 1, 2, tutto il senso in su.
Gli array associativi sono molto più potente.
Essi consentono di avere chiavi arbitrarie,
indici arbitrari e valori arbitrari.
Mentre in un array tradizionale è 0, 1, 2,
in un array associativo è possibile avere un indice
o una chiave di foo il cui valore è il bar.
È quindi possibile avere un altro tasto che si chiama Baz e il cui valore è Qux.
>> Anche in questo caso, stupidi informatica denominazioni generiche variabili qui,
ma il punto è che l'array non ha supporto 0 o staffa 1.
E 'invece avrà foo staffa e la staffa baz.
Questo è molto più versatile che ci sta andando ad essere in grado di associare
parole con altre parole, le chiavi con valori completamente arbitrariamente,
e ci sta andando ad essere in grado di ottenere quei valori indietro nel tempo costante
perché sotto la cappa ciò che un array associativo
in realtà è una tabella hash.
Ricordiamo che una tabella di hash consente di mettere in alcuni input
come nella parola di David, se si desidera inserire David in una sorta di dizionario,
e poi si torna un po 'di valore in genere.
Nel caso di correttore ortografico, vero o falso.
David o qualunque parola è o non è presente nel dizionario.
Un array associativo è in realtà solo una tabella di hash,
ma è un'incarnazione molto più user friendly di esso.
Come vedremo, sta andando per permetterci di fare alcune cose
molto, molto facilmente.
>> Diamo uno sguardo ad alcune di base di PHP
esempi e vedere cosa si può fare con questa lingua.
Lasciatemi andare avanti e aprire nella nostra directory di origine di oggi
un file chiamato hello1.php.
Questo file è più un commento di quello che è il codice vero e proprio,
per cui vorrei effettivamente rimuovere tutti i commenti dal file
e presenti a voi forse il più semplice programma PHP proprio qui.
5 righe, e alcuni di questi sono spazi vuoti,
così notare alcune differenze fondamentali qui.
Il file è denominato hello1.php.
La prima riga, però, è <? Php.
Simile nello spirito di HTML,
sequenza di caratteri che indica al computer
"Ehi, computer, ecco un programma che siamo in in PHP."
Si fa in modo che non è confuso che si tratta di qualche altra lingua.
La linea 2 è uno spazio interessante bianco.
La linea 3 è il nostro vecchio amico printf,
questa volta nel contesto di PHP.
PHP ha la sua versione di printf che si comporta esattamente lo stesso,
quindi questo è solo andare a stampare "ciao, mondo".
E poi, di fronte a questo tag qui,>, significa che è per il mio codice PHP.
>> Vediamo come eseguire questo.
Ho intenzione di tornare alla mia finestra di terminale qui.
Ho intenzione di andare nella mia cartella di PHP.
Si noti che abbiamo un intero gruppo di file, il primo dei quali è hello.php.
Lasciami andare avanti ed eseguire questo, hello1.php, immettere.
Autorizzazione negata. Va bene.
Come abbiamo risolto le cose come in passato?
Che cosa? >> [Risposta degli studenti incomprensibile]
Abbiamo bisogno di leggere e scrivere, ma mi permetta di fare ls-l.
Ricordate questa uscita un po 'criptico per cui Hello1
sembra essere leggibile e scrivibile da me
ma leggibile da tutti gli altri.
E 'venuto fuori questo in realtà non è un passo nella giusta direzione.
La differenza, ancora una volta, con un linguaggio interpretato
è non si esegue direttamente il programma.
È invece eseguire un interprete e consegnarla il codice
che hai scritto in modo che possa interpretare riga per riga.
In questo caso, l'interprete o il programma che in realtà desidera eseguire
è letteralmente chiamato PHP.
>> Da qualche parte su questo disco rigido della macchina c'è un programma
qualcun altro ha scritto chiamato PHP, o su Windows php.exe.
Che cosa ho intenzione di fare è ho intenzione di eseguire effettivamente PHP
ma dare come argomento della riga di comando il codice che ho scritto,
e poi me ne diminuire e premi invio.
Funziona il mio programma per me, dall'alto in basso, da sinistra a destra.
Lasciatemi andare avanti e aprire una piccola differenza di questo.
In nota hello2.php che anche questo
è per lo più commenti, così mi permetta di sbarazzarsi di quelle come una distrazione,
e ciò che è chiaramente diverso, ora su questo file?
C'è questa nuova linea, un po 'criptico in alto.
In linea 1 è #! / Bin / php.
Bin è una convenzione su Linux e Mac OS per i binari,
così / bin significa che questo è una cartella contenente una serie di binari
che è programmato, uno dei quali è PHP.
Il #! è soprannominato baracca,
che è il modo rapido di dirlo, e che cosa questo significa
è che quando si esegue questo programma ora c'è un accenno nella parte superiore del file
che dice al computer cosa interprete da usare.
>> Si diventa un po 'fastidioso se si dovesse dire ai tuoi utenti e dei vostri clienti
"Ehi, abbiamo scritto questo programma chiamato hello1.php."
Tutto quello che dovete fare è eseguire il programma PHP per sempre e quindi il nome di questo programma.
Francamente, sarebbe solo più bello da eseguire hello1.php,
e in effetti, ci sarebbe la possibilità effettuare le seguenti operazioni.
Lasciatemi andare avanti e fare ls-l, e avviso nella hello2 è ancora appena letto scrittura
e poi leggere leggere, quindi non posso ancora farlo, hello2.php.
Ma abbiamo introdotto questo mai così brevemente l'ultima volta, il comando chmod.
Se faccio chmod a + x, il che significa che tutte le più eseguibilità,
e poi hello2.php e poi fare ls-l di nuovo notare che cosa è cambiato.
Uno, Linux mi sta mostrando il nome del file in verde per trasmettere l'idea
che sia eseguibile, ma soprattutto, sul lato sinistro
notare che il bit che rappresenta x per file eseguibile è stato impostato.
Che cosa questo significa è che ora è possibile eseguire ./hello2.php come al solito,
premi invio, e per la baracca in cima del file
questo è un suggerimento, ancora una volta, a Linux che dice
utilizzare questo interprete per eseguire il file.
Non preoccuparti per costringere l'utente a digitare in realtà.
>> E ciò che è bello è ora è una specie di irrilevante ai miei clienti o amici
che lingua ho scritto questo programma, in modo da poter andare avanti con mv
e rinominare questa cosa hello2, per esempio.
E ora se lo faccio ./hello2
e diminuire il mio programma continua a funzionare.
Queste estensioni di file sono una convenzione umana che è necessario
per qualcosa come Clang e Fai che cercano per loro.
Ma per PHP, avrei potuto chiamarlo in qualsiasi estensione di file che voglio.
Ho potuto ingannare il mondo a pensare che io sono veramente bravo a Ruby,
e ho potuto scrivere hello2.rb e quindi eseguire questo,
e voilà, ora ho la versione di Ruby, che è una bugia completa.
Ma le estensioni dei file sono privi di significato
se il file è eseguibile e ha questo suggerimento speciale nella parte superiore del file.
>> Ora, da parte, lascia che ti mostri velocemente versione 3,
che è una sorta di trucco utile conoscere.
In hello3 Ho fatto qualcosa di leggermente sbagliato
che io aggiornare online il codice sorgente.
Nella versione 3 si scopre che la maggior parte dei computer Linux
c'è un programma chiamato env per l'ambiente,
e cosa si può fare qui è se non avete idea di dove PHP
è installato sul disco rigido locale, perché in effetti potrebbe variare in base al computer
che qualcuno sta usando, env dice basta eseguire env,
che si trova sulla maggior parte dei sistemi, e capire dove PHP è.
Solo un trucco comune in modo da non dovete preoccuparvi di scoprire dove un programma è.
Ma se ti interessa per scoprire dove il programma è e non si è curato finora
è possibile utilizzare il comando which.
>> Vorrei diminuire ed il tipo php,
e notare mi dice che in realtà è in usr / bin / php.
E 'una specie di bugia. E 'anche in bin.
E 'solo che mi mostra il primo colpo.
Se siete mai chiesti dove è Clang, che Clang, che è in usr / bin / clang,
che fanno, usr / bin / make, e che cosa significa tutto questo tempo
si sarebbe potuto digitare usr / bin / clang INVIO per eseguire Clang,
ma è una specie di noioso per farlo, per cui alcune cartelle
come usr / bin e bin sono assunti come valori predefiniti
in modo che il computer sa a cercare in loro per voi.
Hai domande sulla scrittura di un super, super semplice programma Ciao Mondo
in PHP e poi in esecuzione?
Perché ora inizieremo a introdurre sintassi più convincente.
Va bene, ci siamo.
Questi programmi che abbiamo visto, in realtà tutti prima.
>> Se mi apro, per esempio, facciamo beer1.php,
non passerà attraverso diverse versioni di questo, ma quello che ho fatto
stavo seduto e la versò o convertiti
il mio codice C al codice PHP qui.
La maggior parte della parte superiore del file è osservazioni qui.
Sembra che vi è una nuova funzione abbiamo bisogno chiamato readline.
GetString, richiamo, dalla Settimana 0 in poi era una cosa CS50.
PHP viene fornito con il proprio user-friendly funzione chiamata readline
che prende 1 argomento che specifica il prompt
che si desidera visualizzare per l'utente, e che cosa fa readline
si restituisce tutto ciò che l'utente digita poll
In questo caso, mi dichiara una variabile denominata $ n.
Sono memorizzare in essa il valore di ritorno di readline
dopo aver chiesto l'utente con questa stringa.
Basta eseguire il backup, per l'esecuzione in realtà questa cosa, lasciami andare avanti
ed eseguire beer1.php php.
Quante bottiglie ci saranno? Diciamo solo fare 2 questa volta.
Invio. Questo è tutto.
>> Il programma è funzionalmente identico alla versione C di settimane fa.
Ma sintatticamente vediamo cosa c'è di diverso.
Dopo ho un int dalla comunicazione dell'utente che sto facendo un po 'di controllo degli errori,
e se n è minore di 1 ho smesso e ho stampare
un messaggio mi dispiace per l'utente e uscire con 1.
Anche questo è un po 'diverso.
In C quello che abbiamo fatto? In C siamo tornati 1.
In PHP si esce con 1, che francamente credo sia un po 'più intuitivo
perché si sta letteralmente uscire dal programma.
Va bene, e poi qui la canzone fastidiosa è sintatticamente identico
fatta eccezione per la variabile, in modo da qui alla riga 24 in poi
notare che il mio ciclo for è quasi la stessa,
ma ho $ di fronte i e n,
e ciò che è inoltre, non linea 26 che abbiamo avuto in passato
quando si dichiara una variabile i?
Non c'è nessun tipo.
Non è corretto in PHP per dire int.
Semplicemente non c'è bisogno di farlo.
Il computer, l'interprete PHP è abbastanza intelligente per capire
che se si mette un numero in $ mi verrà trattato
come un numero per voi.
E poi qui ci collegare $ i, $ i, $ i - 1.
Tutto ciò è lo stesso, e poi qui facciamo un "Wow, questo è fastidioso" printf
e poi l'uscita (0).
>> Anche in questo caso, l'asporto è che, anche se stiamo andando a spendere relativamente
po 'di tempo su PHP, sicuramente rispetto a quello che abbiamo fatto in C,
è quasi la stessa cosa, e così quello che faremo oggi e la prossima settimana
e al di là è concentrarsi realmente su alcune delle nuove idee.
Solo per vedere che una cosa si traduce dall'esercizio C,
questo era un programma super semplice che abbiamo fatto in settimana 1
o 2 che al cubo un valore.
Ma la cosa più interessante, al momento di questo programma è che esso
introdotto la nozione di una funzione personalizzata scritto che abbiamo scritto.
La sintassi di PHP è quasi la stessa.
Ecco il mio programma sulla parte superiore.
Notare ancora assente è qualsiasi nozione di principale.
Mi metto a scrivere il codice, e questo è quello che sta succedendo per essere eseguito dall'interprete.
Ho stampare x ora è 2, presumibilmente.
Poi mi sostengono cubatura ...
Poi chiamo la funzione cubo e passare in $ x
e assegnare il valore restituito a $ x.
Poi io sostengo che è a cubetti, e poi lo dico, che si spera
dirà x è ora 8.
La sintassi per la funzione in PHP è sempre leggermente diverso.
Anche in questo caso manca è il tipo restituito.
Anche in questo caso manca è il tipo di ritorno e anche ciò che manca è un altro tipo?
[Risposta degli studenti incomprensibile]
Beh, va bene, va bene. Torniamo a quella in un secondo.
>> Non abbiamo, per esempio, int qui.
Noi non, per esempio, hanno int qui perché, ancora una volta, in PHP
semplicemente non è necessario e non deve farlo,
ma c'è questa nuova parola chiave chiamata funzione.
In PHP è quasi un po 'più chiaro perché quando si desidera che una funzione
letteralmente dice funzione, si dà un nome e poi un elenco separato da virgole
se uno dei suoi argomenti.
Non c'è bisogno di dire nulla o qualcosa di simile, e poi il ritorno è la stessa,
$ A * $ a * $ a.
Manca inoltre? Sammy fatto notare qui.
Nella parte superiore del file completamente assenti in PHP è anche un prototipo.
Anche questo è in base alla progettazione.
Lingue e interpreti come PHP sono più intelligenti di C sia mai stato
nei compilatori come Clang.
>> Ricordiamo che Clang, se non l'ha detto che esiste cubo,
se non l'hai detto che esiste printf come con un prototipo
o con un # include, beh, che stava per urlare contro di voi e non anche compilare il codice.
PHP e altre lingue moderne sono molto più intelligenti, quando si tratta di questo.
Essi si incaricano di leggere tutto il codice
e poi urlare a voi solo se lo trova da nessuna parte cubo.
Non importa se cubo è in basso o in alto o anche in qualche file separato.
Linguaggi PHP e simili sono ormai abbastanza intelligente per guardare avanti
a tutto prima ritenendo che per aver fatto un errore.
Dove ci porta?
>> Facciamo un ultimo esempio qui in condizioni,
e se apro preavviso conditions2.php troppo
sintassi qui è quasi la stessa.
Sto utilizzando readline invece di GetString, ma che la linea è la stessa di prima,
"Mi piacerebbe un numero intero per favore."
Poi ho una condizione if, un altro se, e poi un altro,
ma funzionalmente questo programma è anche identico a quello che abbiamo fatto settimane fa,
quindi se ho eseguito questa cosa, php di conditions2,
e Ho dato un numero come 23 -
Ho scelto un numero positivo. Se dare -1 Ho scelto un numero negativo.
Se dare 0 infatti scelto 0.
Quindi, chi se ne frega di tutto questo?
Beh, uno del tipo di esercizi divertimento qui
almeno per me è stato quello di tornare indietro e vedere quanto velocemente ho potuto implementare pset 5,
il pset errori ortografici.
Ricordo che c'era questo file chiamato speller.c,
e c'era un file chiamato dictionary.c.
Quello che ho fatto io era una sorta di passato qualche minuto e mi sono convertito il codice C
di codice PHP, e non spendere molto tempo su speller
perché, proprio come in pset 5 non hai realmente bisogno di
passano molto tempo sul correttore ortografico se stesso perché l'attenzione era su dizionario.
>> Basti dire che, se si legge con correttore ortografico,
questo file qui, è più o meno equivalente al codice C
vi abbiamo dato per pset 5.
Ho appena aggiunto un po 'di $ in alcuni punti.
Ho cambiato i nomi delle funzioni determinate, se non esistessero in PHP.
C'è una cosa in più qui, preg_match,
che è il modo un po 'più elaborata di fare qualcosa, ma torneremo a che alla fine.
Ma in breve, correttore ortografico è quasi identico, e se si guarda in fondo
quello che sputa fuori alla fine è questo qui,
le parole errate, parole in dizionario, parole nel testo.
Va bene, allora ciò che è interessante ora è la seguente.
Nella parte superiore del mio file che sto richiedendo dictionary.php.
Proprio come C è # include PHP ha una funzione speciale chiamata richiedono
che più o meno fa la stessa cosa, richiedono un file chiamato dictionary.php.
Come posso fare per l'attuazione pset 5?
Lasciatemi andare avanti e aprire un file qui.
Permettetemi di fare un po 'di riferimento qui.
E lasciate che creare un nuovo file e avviare la chiamata a questo dictionary.php.
Mettiamola in un'altra cartella in modo che possiamo farlo vivere.
E ora io Immagine
Sto per iniziare il mio file PHP con supporto php aperta chiusa parentesi.
E poi qui ci sono alcune funzioni sono necessarie per l'attuazione di pset 5,
così mi permetta di avviare l'attuazione di alcuni di questi,
così controllo funzionale, che ha dovuto prendere una parola come argomento.
Lo faremo e tornare ad essa in un momento.
>> C'era funzione del carico, che ha avuto in quella che come argomento?
Dizionario, in modo che il file che volevo realmente da caricare.
C'era dimensioni funzione, che non richiede alcun argomento
e c'era la funzione, che cosa era l'altro?
Unload, che non richiede alcun argomento sia.
Queste sono le 4 funzioni che avrei bisogno di attuare ora in PHP,
e quello che ho intenzione di fare è andare avanti e farlo.
Molti di voi utilizzato una tabella hash in pset 5,
così mi permetta di andare avanti e creare una tabella hash in PHP.
Fatto.
Questo mi dà una tabella di hash. Beh, perche '?
Uno, la variabile si chiama $ tabella, solo per evocare l'idea di una tabella di hash.
Le parentesi quadre, però, ricordare, rappresentano ciò?
Un array, ma in array PHP non c'è bisogno di essere indicizzato numericamente.
Essi possono essere anche gli array associativi,
il che significa che si può avere chiavi arbitrarie e valori.
>> Molto simile a pset 5, quelli di voi che ha fatto implementazioni tabella hash
probabilmente inserita la parola e poi inserito in una catena di liste collegate,
o è stato memorizzato il valore di qualche vero o qualcosa in tal senso.
È in qualche modo ricordare il fatto che la parola era lì.
Per ora, che sta per essere la mia tabella di hash,
e così ora fare per attuare la funzione di controllo
Ho solo bisogno di guardare dentro di detta tabella di hash
e vedere se una parola è lì.
Che cosa ho intenzione di fare è che sto per dire se-
diciamo isset, che è una funzione PHP che letteralmente significa semplicemente che è il set di chiavi,
così isset ($ table [$ parola],
e in tal caso restituire true.
Tutto qui. Questo è pset 5 in PHP.
Beh, in tutta onestà, va bene.
Else return false, in modo che non ci sia.
Che cosa sta realmente succedendo?
Beh, se la tabella di tabella o hash qui più in generale-
è un array associativo che significa che è in grado di indicizzare in esso
con una parola come "parola", e si deve tornare un certo valore.
>> Siamo un po 'sempre un passo avanti a noi stessi.
Sarebbe sorta di bello se effettivamente caricato il primo file,
così carico non è così semplice, ma vorrei andare avanti e montare
una implementazione molto veloce del carico.
Lasciatemi andare avanti e dire parole ottiene dizionario file.
La funzione di file in PHP apre un file
e ritorna a voi una vasta gamma di tutte le parole in quel file,
passa solo a voi.
E 'stato un dolore troppo grande, non è vero?
Ora foreach, questo è il nostro nuovo costrutto, foreach ($ parole da $ parola).
Questo ciclo sta per iniziare l'iterazione sulle parole di matrice
e assegnare alla variabile $ parola ogni parola nel file
dal primo al secondo al terzo al quarto fino
quindi non c'è bisogno di fare il fastidioso [i] notazione e simili.
E quello che sto semplicemente andando a fare per ognuna di queste parole
è conservarlo nella mia tabella per l'indicizzazione nella tabella
e poi facendo vero perché da ricordare
che una parola è nel mio dizionario tutto quello che veramente hanno a che fare
è una specie di girare un po 'e dire questa parola nella mia tabella di hash è lì, vero.
E se non c'è, non c'è bisogno di mettere esplicitamente false,
altrimenti avrei dovuto mettere false per tutte le parole possibili nell'universo.
>> E 'sufficiente per me solo per impostare un valore di indice
true se una parola è in realtà nella mia tabella di hash.
Ora, io sto tagliando un paio di curve qui che mi agito le mani per ora,
ma ora la funzione di caricamento è fatto.
A caricare tutte le parole dal file in un array.
Ho iterazioni su tale matrice, e per ogni parola nella matrice
L'ho presa nella mia tabella hash con 1 riga di codice.
Questo è divertente. Sai come possiamo implementare dimensioni ora?
Beh, la dimensione è sempre abbastanza facile, in tutta onestà.
Qui possiamo solo fare tornare conte di tabella.
Questo è abbastanza facile anche contare il numero di cose nella tabella.
Questo è in realtà una specie di non più efficienti.
Probabilmente dovrei avere una dimensione variabile chiamata in modo che possiamo fare
in tempo costante, ma questo è abbastanza facile.
Oh, e poi scaricare, se vogliamo davvero essere anale qui
si può dire che è come si scarica qualcosa.
Basta impostare la variabile pari ad un array vuoto,
e si libera di tutto quello che c'era.
Non c'è bisogno di chiamare gratis.
>> Ancora una volta, ho tagliato alcune curve, e mi scuso per il set problema assegnando 5
forse in C, ma se ora andare avanti ed eseguire questo,
Io vado a correre in realtà la versione che ho scritto in anticipo
solo in modo che non ho commesso errori sintattici di sorta.
Lasciami andare avanti ed eseguire speller. L'uso è lo stesso.
Ecco un file di dizionario che contiene solo la parola foo.
Ecco un file di testo che contiene solo foo bar.
Diamo il controllo ortografico questo, quindi correttore ortografico, utilizzando il file dizionario in questo file di testo.
C'è una parola errata, bar, e voilà.
Fatto con pset 5.
Facciamo una pausa di 5 minuti qui, e ci torneremo e molto altro su PHP.
Va bene, siamo tornati.
Facciamo mi fai-odio per un po '.
Vediamo ora realmente vedere se questo non è stato positivo
in realtà l'applicazione del presente cosa in PHP.
Certo, ci sono voluti 45 secondi per l'attuazione.
>> Ma andiamo avanti ora e correre le cose.
Lasciami andare avanti ed eseguire una versione C
di speller, e noi lo eseguito su una delle più grandi file,
che è la Bibbia di Re Giacomo.
Ed è qui, in-andiamo nella nostra cartella C,
speller su King James il 5.
Un sacco di errori di ortografia.
Va bene, in modo che l'output probabilmente ottenuto, anche se i tempi sono un po 'diverso,
se hai tutto funziona correttamente, e quindi il tempo in totale per il controllo ortografico
la Bibbia di Re Giacomo è 0,38 secondi, in modo abbastanza buono con tale implementazione.
Ora lasciatemi andare in versione di PHP, che abbiamo appena scritto.
Vorrei eseguire il correttore ortografico di Re Giacomo.
Ops, ignorare questo errore. Sono nella directory sbagliata.
Speller su King James il 5.
Quasi fatto.
>> Ok, l'attento osservatore si renderà conto che era più di 3 secondi lì.
Che è il tempo di esecuzione vera.
Si scopre che ci vuole tempo per sputare fuori un sacco di testo
a causa di problemi di buffer, ma per farla breve,
che era 3,15 secondi di tempo macchina, tempo di CPU,
rispetto a quello che è stato un momento fa?
Come 0,3.
Voglio dire, e 'un ordine di grandezza più lento, quindi dove è che
rallentamento ridicolo provenienti da?
Beh, come è stato il caso con la maggior parte qualsiasi decisione di progettazione che abbiamo fatto
nella classe nel corso degli ultimi 9 settimane non ci sono quasi sempre questo compromesso.
A volte tra poco spazio, a volte tra spazio e tempo,
spazio, tempo e sforzo di sviluppo, e in effetti qui, anche se
abbiamo risparmiato una quantità enorme di tempo, forse potenzialmente 10-20-30 ore
del tempo di sviluppo di applicazione il controllo ortografico
da montare in su in soli 45 secondi con questa lingua
il prezzo da pagare è che è un ordine di grandezza più lento di conseguenza,
e questo è generalmente il caso con la maggior parte qualsiasi linguaggio interpretato,
PHP, Python, Ruby, Pearl o altri cioè se
se avete intenzione di eseguirlo tramite un interprete e lo hanno letto il tuo codice
riga per riga, dall'alto in basso, da sinistra a destra,
intermediario che sta andando a prendere un po 'di tempo a sé stante,
e quello che sentivi qui in 3 secondi invece di 0,3 secondi
è il fatto che non vi è questo intermediario che deve interpretare letteralmente nostro codice
riga per riga, e Dio non voglia, se sei all'interno di un ciclo
con un file enorme che contiene centinaia di migliaia di parole.
>> Quella testa sta per aggiungere e aggiungere e aggiungere e aggiungere fino.
Per uno strumento come questo non è probabilmente la migliore lingua da utilizzare per l'attuazione
un correttore ortografico se immediatezza è di interesse per gli utenti e per voi.
Ma il lusso che abbiamo in un momento è che se si
usare un linguaggio come PHP o un sacco di linguaggi interpretati
nel contesto del Web, del resto, si ha il vantaggio
che Internet è molto più lento rispetto maggior parte dei computer.
Hai una CPU GHz nel computer, 2 GHz, forse anche più in questi giorni.
Ma la realtà è su internet vi è una quantità elevata di latenza
in base al quale per un browser per parlare con un server, anche se abbiamo visto la scorsa settimana
che questo è abbastanza veloce, mezzo millisecondo o giù di lì,
che aggiunge troppo, e se si sta scaricando le cose come un'immagine
o una foto su Facebook o ricevendo messaggi istantanei su Facebook chiacchiere,
Gchat o simili, tutti questi tempi di andata e ritorno
tra il browser e il server di avvio a sommare,
il che rende la scelta particolare del linguaggio, in molti casi
non tutto ciò che pertinenti, in modo che stai bene con un linguaggio leggermente più lento
come PHP o Python o Ruby
ma per i quali non ci sono aspetti positivi enormi a voi ed i vostri colleghi
ei tuoi amici, perché è possibile implementare le cose così, molto più veloce.
E per di più, si ha molto meno rischio di falle di sicurezza determinati.
Non ci sono indicazioni in PHP.
Non ci sono errori seg che si può facilmente indurre
allo stesso modo si potrebbe in C.
Con C si è super vicino all'hardware.
Con i linguaggi PHP e simili sei specie di alto livello, per così dire,
con un sacco di difese tra voi e quello che sta realmente accadendo
all'interno della macchina, ed è solo un compromesso.
>> Abbiamo arrivati ​​al punto di avere questi più moderni linguaggi di alto livello
come PHP per le lezioni apprese in linguaggi come PHP in C.
Ma se non si capisce cosa sta succedendo sotto il cofano per tutto questo tempo
non si può certo prendere le giuste decisioni,
e sicuramente quando si tratta di lavorare in un posto come Facebook o Google
o uno di questi luoghi, che sono sempre più a giocare con grandi quantità di dati
anche se si va indietro e si PREMED e stiamo lavorando con alcuni MD
su alcuni dati di grandi dimensioni impostare coinvolgendo pazienti e medici
e come usare gli strumenti giusti è estremamente interessante
perché altrimenti la vostra analisi di un insieme di dati potrebbe richiedere secondi,
oppure potrebbe letteralmente ore.
Questo è solo un esempio, non vanificare voi con fatica quanto più
era in C, ma per aiutarvi a capire che quando si fa qualcosa di implementare in C
davvero capire, o in teoria, capisco
come tutto ciò che è o dovrebbe essere al lavoro, e si ha il controllo quasi completo
su ciò che sta succedendo sotto il cofano, e con questi linguaggi di livello superiore
si deve cedere un maggiore controllo per le persone che li ha inventati
e sono soggetti più per le loro decisioni di progettazione del tuo.
Ma se diamo per scontato che le prestazioni
non è così importante sul Web a causa di queste altre questioni,
a velocità di rete sono un po 'più lento di velocità della CPU in ogni caso,
in modo da poter ordinare di permettersi di usare un linguaggio leggermente più lento
se gli aspetti positivi siamo in grado di sviluppare le cose 10 volte più velocemente o anche di più.
>> Vediamo come possiamo usare questo.
Lasciami andare in una cartella
Tra gli esempi di oggi chiamato frosh.ims,
e questo è stato effettivamente personalmente motivata dal fatto che la prima cosa
Ho scritto per il Web di anni fa dopo aver preso CS50 e CS51
era un sito web per il programma Frosh GI, sport matricola intramurali,
che all'epoca questo era abbastanza anni fa, che al momento
non c'era nessun sito web per il programma, anche se c'era un Web,
e invece c'è stato un procuratore in Wigglesworth per cui se si voleva
di registrarsi per la pallavolo o il calcio o qualsiasi altra cosa si compila un foglio di carta.
Si potrebbe poi a piedi attraverso il cortile.
Si potrebbe poi bussare alla loro porta e far scorrere nella loro porta a mano o al sorvegliante
un pezzo di carta con il tuo nome su di esso, se si vuole essere un capitano della squadra,
quale sport si voleva fare, e che cosa dormitorio eri trovi
E 'stata una specie di modo vecchia scuola di fare le cose, e questo è stato un primo
possibilità di automatizzare un sacco di questo processo.
Basta andare sul sito. Si digita qualcosa trovi
È possibile ottenere una conferma via email, e boom, il gioco è fatto.
>> Questa è stata la prima cosa che ho fatto, anche se in un linguaggio chiamato Pearl,
ma è relativamente facile da fare in PHP, e questo è una sorta di rappresentante
dei problemi che si può cominciare a risolvere quando si può esprimersi
di programmazione e non dover fare affidamento su cose come siti di Google
o Excel o strumenti che vengono consegnati a voi.
Voi ragazzi hanno ora la possibilità di fare le cose in questo modo.
Questa è una versione super brutto di una forma,
ma facciamo solo usarlo per l'inizio della conversazione in cui questo è
grosso modo ciò che la forma sembrava anni fa per noi
per consentire alle persone sul Web a firmare per Frosh IM.
Abbiamo chiesto un nome, una casella di controllo per se o non volevano essere capitano,
maschio o femmina, e allora che cosa erano in dormitorio,
e poi avrebbe presentato questo modulo.
Diamo una prima occhiata sotto il cofano il codice HTML che rappresenta questa pagina web.
Lasciami andare in froshims0,
e per inciso, per pset 7 Io sto dando per scontato
le directory e le cartelle che sto mettendo le cose trovi
Ti guiderà attraverso cose esattamente dove deve andare in macchina,
quali comandi mod devi correre, quindi non preoccuparti di tutte le
dettagli stupidi sincronizzazione in dal get-go qui.
>> Va bene, ecco froshims0.php.
Vorrei scorrere verso il basso, e ciò che è curioso qui,
questo è un file PHP, ma quello che c'è dentro di essa, in modo chiaro?
E 'un bel po' di HTML, PHP, e in effetti le sue origini
erano davvero per essere un web-centrica lingua.
Poco fa abbiamo usato per implementare l'esempio della birra,
le condizioni di esempio, l'esempio ciao, e questo è bene.
È possibile utilizzare PHP come linguaggio di scripting
dove uno script è in realtà solo la nomenclatura data a un programma rapido e sporco
o qualcosa che si scrive in un script o più in generale un linguaggio interpretato.
PHP è super utile per questo, perché avete visto quanto velocemente
relativamente si può improvvisare programmi in PHP.
Ma è mai stato progettato per essere utilizzato per il Web,
e progettato per il Web nel senso che notare qui all'inizio del file
Comincio con <? Php.
Poi ho un sacco di commenti inutili, concesse, ma poi chiudo la modalità PHP.
Ma poi cadere in modalità HTML.
>> La cosa interessante di PHP è anche se il file termina con. Php
è generalmente destinata ad essere co-mescolato con HTML,
un po 'di codice PHP, un po' di HTML.
E vedremo alla fine che si può iniziare a prendere in giro quelli a parte
e mantenere il nostro HTML separato dal nostro PHP del tutto,
ma le origini di PHP fossero davvero di darvi questa flessibilità,
che se si vuole un po 'di HTML basta scrivere, e che sarà
sputare identico al browser.
Ma se avete bisogno di un po 'di tecnica di programmazione,
un po 'di codice di programmazione, si può anche mettere nello stesso file esatto, come si vedrà presto.
Ecco il mio codice HTML.
Ho un titolo di questo per Frosh IM.
Ho un tag body che ha un po 'di CSS su di esso a tutto centro in mezzo,
e poi qui ho una forma che a quanto pare sta per essere presentato
in un nuovo file chiamato register0.php, quindi vedremo che in un momento.
Si sta utilizzando un metodo chiamato post, che torneremo a pure.
Poi ho qualche input di form, un nome chiamato, il cui tipo è un testo,
uno il cui nome è il capitano, il cui tipo è casella di controllo,
e questo, non lo abbiamo visto prima, ma fa esattamente quello che dice.
Si otterrà una casella di controllo, invece di una casella di testo.
Quaggiù si dispone di un pulsante di opzione, che è uno di questi pulsanti circolari
che si può scegliere questo o quello.
>> Si noti che sia intenzionale che ho dato entrambi i pulsanti di opzione il nome del genere.
Questo è il modo per ottenere la mutua esclusione in base al quale è necessario fare clic
o questo o quello, e cliccando l'altro
si deseleziona l'altra, in modo da dare loro lo stesso nome
se si vuole che escludersi a vicenda così.
E poi per il dormitorio, non credo che abbiamo visto ancora, ma si tratta di un menu di selezione, un menu a discesa.
Il tag per questo è selezionato.
Quindi dare il menu a discesa un nome,
e poi ci sono un sacco di queste opzioni.
Il primo, solo per l'estetica, è una stringa vuota.
Volevo solo il menu a discesa per essere vuota per impostazione predefinita,
e poi c'è Apley, Canaday, Grays, e così via.
E notare la dicotomia qui.
L'opzione nei menu a discesa è un valore,
ma ha un umano-friendly nome, che in questo esempio
è identico, ma se volevamo essere anale potremmo avere
il valore di questo menu a tendina essere solo la versione corta,
Grays, ma possiamo davvero dire Grays Sala che l'uomo vede in realtà,
ma non è tutto così interessante, così ho tenuto semplice e li ha resi uguali.
Poi giù in fondo abbiamo un pulsante di invio
che abbiamo visto prima, a meno di notare l'ho appena dato una parola diversa.
Invece di CS50 ricerca ho dato l'etichetta di "Registra".
>> Il risultato finale è il sito qui, e ancora una volta,
da dove viene questo vengono presentate?
Viene sottoposto a qualche file, il valore dell'attributo action,
che era register0.php.
Vediamo cosa accade in realtà qui.
Lasciatemi andare avanti e compilare questo modulo, per esempio David,
maschio, Matthews, e poi dirò registrati.
Vorrei diminuire e fare clic su registrati.
Ok, quindi praticamente inutile, ma cerchiamo di vedere cosa sta realmente succedendo.
Si noti che l'URL è stato modificato per essere register0.php.
Che cosa è curiosamente assente dal URL, però, anche se abbiamo appena presentato un modulo?
[Risposta degli studenti incomprensibile]
Ok, questo è solo l'uso Chrome essere amichevole in questi giorni.
Questo è effettivamente. Hanno appena lo nasconde per risparmiare spazio.
Ma buon pensiero, buon pensiero.
Verso l'altra estremità del URL, però, cosa manca? Gia '.
[Studente] La stringa di query.
La stringa di query, in modo da richiamare dai nostri semplici esempi di ricerca di Google.
Non appena si fa clic sul pulsante di invio dell'URL
mi ha portato a Google, ma poi c'è stato? q = informatica o qualsiasi altra cosa che avevo digitato trovi
Questo perché abbiamo utilizzato il metodo get con l'esempio di ricerca.
>> Questa volta stiamo utilizzando quello che invece il metodo?
Posta, e una delle distinzioni immediate
tra GET e POST è che il post non mette l'input dell'utente nell'URL.
Esso si nasconde. Si invia ancora.
In realtà, quello che stiamo vedendo nel browser qui, come ci rivelano in un momento
cercando in register0, è sto solo vedendo il contenuto
della matrice che sono stati inviati dal browser al server.
Ma l'URL non ha un?, Non ha parole chiave
o valori in esso, e perché?
Beh, post consente di inviare ancora i dati dal modulo su un server,
ma non metterlo in URL, in modo che tipo di informazioni è post
particolarmente indicato per forse quando si chiede all'utente di
immettere in ingresso ad un modulo?
Qualcosa di simile a una password, qualcosa di simile a ciò che altro?
Numeri di carte di credito.
Tutto ciò che è leggermente sensibile che probabilmente non si vuole finire nella URL
se non altro perché significa che il tuo compagno di stanza o un familiare può semplicemente troll attraverso
la cronologia di internet e poi letteralmente vedere le password,
letteralmente vedere i numeri della carta di credito perché la maggior parte dei browser
Ricordo nella storia qualsiasi URL che sono stato a,
quindi se non altro perché sarebbe una cattiva idea.
Utilizzando nasconde postali di dettaglio da parte dell'utente.
>> Inoltre, come si fa a caricare una foto su Facebook?
Beh, gli unici 2 meccanismi si può davvero usare,
anche se ci sono un paio di quelle altre più arcani, è get e post.
Come si fa eventualmente carica una foto tramite un URL?
Si può effettivamente farlo.
Si può prendere un file JPEG o GIF o bitmap e si può rappresentare in esadecimale
o qualcosa del genere chiama base 64.
Invece di base 16 si utilizza base 64, che si presenta essenzialmente come
Caratteri ASCII, e si può effettivamente carica una foto tramite un URL
dopo un punto di domanda, ma ci sono in genere i limiti di dimensione.
La maggior parte dei browser URL forza di essere non più di 1.000 caratteri,
forse 2.000 caratteri o simili, quindi non è possibile caricare
un MB 10 foto di Facebook.
Per questo si utilizza postale e, quindi per ora si mette i parametri nell'URL,
che è bello e utile a volte, ma per nulla sensibili o grandi
post è la strada da percorrere.
Cosa sta register0 effettivamente facendo qui?
Beh, se apro register0 notare che questa è una pagina super semplice,
ma è dimostrazione il fatto che io possa co-mescolarsi, nel bene e nel male,
HTML con PHP.
Questo file, eccezion fatta per i commenti in alto, sono HTML
tranne che per questo ragazzo qui.
>> Si noti nel bel mezzo del mio codice PHP,
nel bel mezzo del mio HTML, ho una sorta di temporanea
entrato in modalità PHP.
Sto chiamando una funzione detta stampa r.
Significa stampa ricorsiva, e ciò che fa è la stampa in modo ricorsivo
qualunque variabile si passi, punto e virgola, uscire dalla modalità PHP.
E il tag pre offre testo pre-formattato,
spazio testo mono in modo che ogni spazio che lo vedremo.
Esso non scompare. Che cosa è post?
Beh, la cosa interessante e coinvolgente su PHP
è che ogni volta che si invia un modulo con GET o POST
tutto ciò che è presentato a lei da un browser
PHP stesso capisce quali siano tali coppie di valori chiave sono,
figure fuori se non c'è segno di uguale, figure fuori se c'è un punto di domanda.
Si fa tutto il lavoro duro per voi, e poi si passa un array associativo
contenente tutto ciò che l'utente ha digitato nel modulo.
Beh, quali campi ha questa forma hanno?
>> Aveva 4 campi.
Uno era un campo di testo Nome.
Uno era una casella chiamata capitano.
Uno era un pulsante di chiamata genere,
e uno era un menu a discesa chiamato dormitorio,
così notare quando si stampa ricorsivamente
il contenuto di questa variabile speciale.
Questa è una variabile globale speciale chiamato letteralmente $ _POST, in tutte le protezioni.
Questa è una variabile speciale globale che PHP crea per te
e le mani a voi in modo da poter accedere a tutto
che è stato inviato tramite un modulo da un utente.
E chiamando r stampa su di esso, non sarebbe farlo in una normale applicazione.
Stiamo facendo questo per vedere all'interno di questa variabile,
e ciò che è dentro di, bene, 4 tasti,
4 parametri http, per così dire,
nome, il capitano, il sesso, dormitorio, e quindi i valori che l'utente
digitato con una sola eccezione.
Ho fatto tipo D-A-V-I-D.
Ho controllato la scatola, anche se, per i maschi, che a quanto pare ha presentato un valore
di soli m di essere conciso.
>> Quando ho selezionato Matthews che è il valore che e 'stato selezionato,
e questo è un po 'stupido, ma è la convenzione.
Quando ho controllato la scatola, un valore on ", a," ha presentato per la casella di controllo.
Se non l'avessi controllato, nessun valore sarebbe stato inviato sorta.
Questo è solo ci dà intuizioni in quello che c'è dentro di questa variabile globale speciale,
ed è così speciale che si chiama una variabile super-globale.
Esiste in tutto il mondo per voi entro il codice in modo che si può effettivamente accedere.
Questo non è che convincente, quindi cerchiamo di utilizzare effettivamente il super globale
e in realtà provare a registrare qualcuno.
In froshims1 ho intenzione di fare un cambiamento.
Sto cambiando il ricorso sia register1.php,
e sto facendo un'altra cosa.
Ero un po 'imbarazzato dalla qualità della mia pagina web lì.
E 'abbastanza orribile, onestamente, così si scopre
che è possibile utilizzare molto facilmente sul Web
JavaScript altrui codice CSS di altre persone
che hanno scritto e open source e rese disponibili una biblioteca,
per così dire, e, per esempio, qui sto usando una libreria liberamente disponibile,
un po 'di codice che qualcun altro ha scritto.
>> Twitter è successo a scrivere questo codice, e si chiama la libreria di bootstrap,
ed è solo un mucchio di fogli di stile CSS, un mazzo di. file css
che qualcun altro ha scritto e capito come ottenere tutto bello e abbastanza
modo che la gente come noi può preoccupare un po 'meno di estetica e concentrarsi molto di più
sulla logica e la programmazione vera e propria.
Collegando in con quel tag, che è lo stesso tag che ho usato per il ricordo styles3.css in precedenza,
Ora ho accesso a un file chiamato bootstrap.min.css.
Min significa semplicemente l'hanno minified e hanno deciso di eliminare tutto lo spazio bianco e così via
solo per assicurarsi che non mi mandano più byte di quanto effettivamente bisogno.
Ma c'è un sacco di CSS, quindi se ora aprire la versione 1 del Frosh IM
notare che il mio file è sicuramente più bella.
Ora è ancora solo in bianco e nero, a meno di notare che, usando solo il loro foglio di stile
e l'utilizzo di alcune funzioni di esso con il mio modulo non è sorprendente,
ma è sicuramente più pulito di quanto non fosse prima, e il proiettore non sta facendo giustizia.
Ci sono piccole linee grigie attorno ai pulsanti e in tutto il campo di testo proprio qui,
ma è sicuramente più pulito di quanto non fosse prima.
>> Ora, in tutta onestà, io ho dovuto cambiare il mio codice un po '.
Questa è la versione 1, e notare che ho usato alcuni tag nuovi,
e onestamente, non avevo idea di come fare questo fino a quando ho letto la documentazione
bootstrap per la biblioteca di Twitter, e mi hanno detto che se si desidera utilizzare la nostra biblioteca
utilizzare un elemento fieldset all'interno del modulo,
mettere la parola che si desidera visualizzare accanto a un campo all'interno di un tag label,
poi dare il tuo contributo un nome, proprio come prima,
e poi per la casella di controllo, non solo si avvolgerlo in un elemento label,
si utilizza una cosa chiamata una classe, quindi non abbiamo visto prima,
ma vedrete in uno dei corti di pset 7.
Una classe in CSS permette di fare qualcosa di molto simile alla ID,
ma prima, quando abbiamo avuto un ID con il simbolo #
che era per uno ed un solo elemento.
Il bello di una classe è che più elementi possono avere la stessa classe
o la stessa roba CSS applicato.
>> Ma ancora una volta, più su quelli a breve, e il resto di questo è solo copiare e incollare
da loro documentazione in cui ho aggiunto una etichetta qui e là.
E alla fine, perché ho incluso il tag link in alto,
tutto sembra più bello automaticamente
semplicemente aver segnato la mia pagina in un modo che
Twitter previsto, e ci sono così tanti modi diversi
di fare questo, e questo è davvero molto appropriato.
A questo punto nel semestre, come si vedrà nelle specifiche pset 7 è,
Googling intorno, leggendo su librerie, usando i CSS di altre persone
e JavaScript per risolvere i problemi ausiliari
al set problema si è certamente favorito ed è il modo
il Web è costruito in questi giorni, in piedi sulle spalle di altre persone
in modo che si può veramente concentrarsi sui problemi nuovi e interessanti.
Ma veniamo ora concentrarsi su, ancora una volta, la logica.
>> E 'stata una piccola deviazione di estetica solo per indicare la direzione in cui si può andare.
Ho intenzione di tornare al più brutta per ora solo perché
non ci sono distrazioni con roba Twitter, e lasciami andare avanti e aprire
froshims2, che, di nuovo, si differenzia solo nel register2.php azione,,
e diamo un'occhiata a ciò che l'effetto è qui.
Lasciatemi andare avanti e digitare David.
Non sarò il capitano questa volta.
Dirò maschio, Matthews, registro.
Dannazione. Ok, e 'una vite sulla parte mia.
Stand by.
Register2, riga 22, se vuoto o-mi dispiace.
Facciamo ricaricare.
Ok, su questo modulo cosa è successo?
Ho digitato in David, controllato maschio, cliccato Matthews, registro.
Si sono registrati. (Beh, non proprio.)
Questo è chiaramente un passo oltre la semplice stampare il contenuto di una variabile,
ma ciò che è effettivamente facendo questo file?
In register2.php
notare che ho qualche nuovo codice.
All'interno del mio tag body ho essenzialmente un costrutto if else,
ma perché io sono co-mescolanza questo con un po 'di HTML
Devo entrare e uscire dalla modalità PHP avanti e indietro, quindi cerchiamo di vedere quello che sto facendo.
>> Nella prima riga qui sto dicendo che se è il caso
che il posto super-globale è vuoto per la chiave del nome,
In altre parole, se l'utente non mi ha dato un valore per nome nella forma,
quindi svuotare sta per tornare vero perché il valore è vuoto.
Or-notare le barre verticali, se il genere è vuoto
all'interno di questo speciale super globale, che, di nuovo, rappresenta il contenuto del modulo,
o il dormitorio è vuoto, allora ho intenzione di andare avanti e urlare contro l'operatore.
Come? Beh, si noti che sto per dire è necessario fornire il proprio nome, il sesso, e dormitorio.
Facciamo effettivamente indurre questo errore.
Lasciatemi tornare al mio modulo. Vorrei ricaricare per cancellarlo.
E sto solo andando a dare loro David, e non hanno bisogno di sapere dove vivo.
Registrati. A quanto pare ho bisogno di dire loro dove vivo.
È necessario fornire il proprio nome, il sesso e il dormitorio. Torna indietro.
>> E potrei fare clic per tornare a quella forma, ma perché?
Beh, in questo caso il nome non era vuota, ma tra i sessi era, e dormitorio era,
così questa espressione tutta valutata a true, e anche se la sintassi è un po 'nuovo,
ancora una volta, si entra in modalità PHP, familiare se dichiarazione,
ma la parte nuova qui è proprio questo colon, e avevo fatto un casino omettendo una parentesi
per caso, a meno di notare i due punti, e questo significa
anche se stiamo uscendo tutto modalità PHP
che segue deve essere sputare letteralmente al browser
fino a vedere un blocco else, come facciamo qui,
nel qual caso si dovrebbe invece sputare questo fuori
fino a visualizzare il endif, in modo un po 'un po' nuova sintassi
che mi permette di passare da HTML e PHP.
Siamo in grado di pulire questo alla fine, ma per ora,
è una specie di un modo convincente di controllo degli errori del modulo.
>> Ora, io dico che non sei veramente registrato perché ovviamente abbiamo fatto niente, ma i dati,
quindi diamo effettivamente provare a fare qualcosa di fresco.
In froshims3 l'unica differenza è che io ho intenzione di presentare al register3,
così l'HTML è la stessa.
In register3 notare questo.
Questo è una specie di sexy.
In cima sto usando un'istruzione require, quindi questo è come # include.
Questa volta non è stdio.h o qualcosa di simile.
Si tratta di una libreria PHP, e questo si chiama PHPMailer.
Come facevo a sapere di includere proprio questa stringa tra virgolette?
L'ho letto nella documentazione, così quando mi hanno detto di mettere questo nella parte superiore del file
se si desidera utilizzare una libreria speciale chiamato PHPMailer che fa quello che dice.
Esso consente di inviare e-mail tramite PHP.
Ora scorrere verso il basso ulteriormente.
>> Avviso per cominciare sono in modalità PHP per tutto questo tempo,
così ora notare qui dopo l'importazione quella libreria,
per così dire, sto facendo alcuni controlli di integrità.
Se è il caso che il nome non è vuoto
e il sesso non è vuoto, notare i punti esclamativi-
dormitorio e non è vuoto, allora l'utente ha logicamente compilato il modulo, almeno abbastanza.
Non mi interessa se sono il capitano o no. Ho solo bisogno del loro nome, il sesso, e dormitorio.
Se hanno riempito quelle in modo che nessuno di questi campi sono vuoti
questo è un po 'nuova sintassi.
PHP, per inciso, è un linguaggio di programmazione orientata agli oggetti
che alcuni di voi ricorderanno dalla APCS o simili.
Per ora, se non familiare, è sufficiente sapere che per usare questa libreria
devi scrivere una riga di codice come questa la nuova parola chiave,
letteralmente una nuova parola chiave chiamata nuova.
Ma oltre a questo, abbiamo un po 'di sintassi familiare.
E 'un operatore freccia, che è simile a quello che abbiamo usato per le strutture nel contesto di puntatori.
Per oggi PHP non ha puntatori,
ma sappiamo per ora che all'interno della variabile posta
è essenzialmente una specie di puntatore a una raccolta speciale
che qualcun altro ha scritto, e se voglio accedere alle funzionalità specifiche
all'interno di quella biblioteca che faccio, come in C, utilizzare l'operatore freccia,
anche se questi non sono in realtà puntatori.
È una specie di versione di PHP stesso.
Questo significa andare in biblioteca e chiamare la funzione IsSMTP.
SMTP, richiamo, dai nostri Guerrieri della Rete si riferisce alla posta elettronica,
e questo significa che basta usare un server di e-mail per questo IM Frosh registrazione.
>> Che accoglienza si desidera utilizzare?
Beh, Harvard, se Google in giro, ha un server di posta elettronica chiamato smtp.fas.harvard.edu.
Se stai giocando insieme a casa o si vive in una rete Comcast
potrebbe essere qualcosa di simile a smtp.comcast.net.
Dipende tutto da dove si vive e chi è il tuo ISP è.
Dopo di che ho intenzione di impostare la mia dall'indirizzo arbitrariamente essere jharvard@cs50.net.
Ho poi andare per impostare il di affrontare per essere jharvard@cs50.net.
L'unico modo sapevo che queste funzioni sono state chiamate SetFrom e AddAddress
è, ancora una volta, ho letto la documentazione.
Questa non è una sorta di magicamente noto a tutti i programmatori.
Poi ho impostato un oggetto di "registrazione".
E ora questa linea è un po 'brutto perché ciò che fa l'operatore punto significa in PHP?
Qualcuno sa?
Concatenare.
In C si tratta di un dolore al collo per concatenare due stringhe.
Hai a che fare con malloc o realloc o di tutta quella roba
solo per estendere la lunghezza di una stringa.
In PHP, in JavaScript e altri linguaggi
di solito si può fare questo con un singolo carattere.
In questo caso, punto significa prendere questa stringa qui
e aggiungere ad essa questa stringa.
>> Oh, e dal modo, aggiungere ad essa questa stringa,
che risulta essere una variabile all'interno di quel super-globale.
Poi aggiungere ad essa una nuova linea, in modo che tutti questi punti significa solo
continuare a fare una stringa più grande e sempre più grande,
e non c'è bisogno di prendersi cura affatto di malloc o simili in un linguaggio come questo,
e ci sono altri modi per fare questo, ma questo è uno dei più veloci
modi per gettare fuori.
Cosa sta facendo questo?
E 'la creazione di un corpo del messaggio che sta per dire il nome: Capitano: Sesso: Dorm:
tutti su linee separate, e poi infine,
una riga di codice, e ho intenzione di ignorare questo per ora.
Se false == significa solo se qualcosa è andato storto,
ma la magia che accade qui.
Invio della posta significa inviare questa email.
Vediamo cosa il risultato netto è.
Nella parte inferiore del file, è andare a dire che sono registrati veramente
se arrivare così lontano.
Se, però, l'utente viti fino, si noti che abbiamo iniziato questa
se la condizione qui, se non è vuoto e non vuoto
e non svuotare inviamo la posta.
In caso contrario, abbiamo intenzione di inviare questa riga di codice,
che sta per avere l'effetto, come si vedrà in pset 7, di redirigere l'utente
tornare da dove sono venuti, froshims3.php.
>> Incrociamo le dita, altrimenti questa sarà la demo più deludente oggi.
Ci siamo.
Vorrei aprire la mia casella di posta e-mail per jharvard in Gmail.
Nessuna e-mail al momento. Bene.
Ora vorrei aprire froshims3, che è il terzo e ultimo esempio vedremo qui.
Ok, ci siamo.
Nate, lui sarà il capitano, uomo, da, diciamo, Apley.
Registrati. Va bene, si sono registrati veramente.
Ora, se ho scorrere oltre alla mia email, oh, mio ​​Dio.
Ho appena inviato una e-mail in modo dinamico sul web.
>> Lasciamo su questa nota.
Un video è imminente per la lezione che abbiamo perso. Ci vediamo la settimana prossima.
[CS50.TV]