DOUG LLOYD: per questo abbiamo fatto un sacco di lavoro in C, e C è un davvero cool lingua perché ti dà la capacità di immergersi realmente basso livello nei vostri programmi. Si arriva a fare le cose come davvero minuto come la manipolazione singoli byte di memoria. Ricordiamo che i puntatori davvero ci permettono che la flessibilità. Ma abbiamo sempre bisogno di avere tale livello a grana fine di dettaglio nei nostri programmi? Probabilmente no, giusto? E se stiamo andando ad avere un trade-off tra l'essere in grado di fare davvero, davvero cose minuto e davvero, davvero grandi cose che noi non dobbiamo pensare su, non dobbiamo implementare queste davvero grandi idee se stanno già costruiti in per noi, in generale per la costruzione di grande programmi o grandi progetti, stiamo probabilmente andando a sbagliare sul lato di avere più roba lingua costruita nel per noi, invece di avere la roba di basso livello. Ed è qui che entra in gioco il PHP davvero. Ora, uno dei motivi che insegniamo PHP CS50 è che è fortemente ispirato C. E infatti, a mio parere, ci sono davvero due lingue progenitrici che sono molto comuni al giorno d'oggi. C e LISP. E sono lingue progenitrici perché ogni altra programmazione moderno linguaggio che ha sviluppato da allora si ispira da uno o l'altro sintatticamente. PHP è molto simile sintatticamente a C, mentre linguaggi come Scheme, per esempio, che si può avere sentito parlare, è fortemente ispirato da una lingua chiamato LISP, che è una lingua più antica. Quindi la ragione si insegna PHP CS50 è che, conoscendo C come fondamentalmente come si fa a questo punto, raccogliendo PHP, che vi dà il capacità di fare le cose livello molto più elevato di C fa, non è che gran parte di un ostacolo, perché avete già la idea di base della sintassi. C è stato intorno per quasi 45 anni a questo punto. PHP è stato in giro per circa 20 anni. E in quanto 25 anni in mezzo, programmatori stabilito che avrebbero molto piuttosto avere capacità di livello superiore, e gli errori e le lotte dei 20 anni intermedi ha portato a PHP e altri linguaggi moderni. Una grande scelta di PHP lingua per il software che allow-- per software che-- dove bisogno di fare cose che in C sono in realtà complicata. Così, per esempio, lavorando con stringhe in C è molto complicato, perché come sappiamo, stringhe in C sono davvero solo array di caratteri. Non è un tipo di dati built-in. O forse più fondamentalmente, qualcosa che non abbiamo neanche coprire in C, E se avete bisogno di fare alcuni computer in rete? Tutto ok? C ha la capacità di farlo, ma è così arcana e così difficile da fare in realtà. Non sarebbe bello se il lingua aveva un modo semplice incorporato per implementare in rete? E PHP è un linguaggio che fa si che, o facilita che, un po 'di più. Come ho detto, PHP è fortemente ispirato da C. La sintassi è molto simile. E così si spera, dovrebbe fare il passaggio da una all'altra un po 'più morbida di alcuni altre lingue potrebbe essere. Per iniziare a scrivere PHP, basta aprire un file con estensione file .php. Tecnicamente questo non è effettivamente necessari, ma se si vuole le cose come sintassi evidenziando in IDE, in modo che il tipo nomi, o nomi di variabili, funzioni, si sa, le parole chiave del linguaggio sono evidenziati in un colore specifico, in genere vogliono nominare i file con una particolare estensione di file. Così abbiamo chiamato il nostro file con .php estensione, ma poi anche con PHP, tutto il codice PHP si scrive in quel file deve essere racchiuso tra questi PHP delimitatori che vediamo qui sullo schermo. Parentesi angolare? Php per iniziare. Poi scriviamo tutto il nostro PHP codice che vogliamo in mezzo. E poi ? staffa angolare per chiudere. Se non facciamo questo, poi che cosa accadrà? Non sta andando in crash. Non sta andando a davvero rovinare il nostro programma. Ma non sta andando ad avere l'effetto che vogliamo. Che cosa sta per succedere, davvero, è che quando cerchiamo di eseguire questo programma, tutto non tra quelle delimitatori sta per essere stampato parola per parola. Non sta andando a realmente eseguire il codice, sta andando a solo stamparlo testualmente. Ora, perché è il caso? Quindi C è ciò che è noto come un linguaggio compilato. Probabilmente siete a conoscenza con la fase di realizzare i vostri programmi, girando i file .c e file .h in un unico eseguibile con make, in particolare utilizzando Clang come il nostro compilatore. PHP, però, non fa avere questo equivalente. PHP è quello che si chiama un linguaggio interpretato. E cosa vuol dire? Beh, vuol dire che non abbiamo convertire il nostro codice sorgente di zero e uno in anticipo. Piuttosto, c'è un programma, che è anche chiamato PHP, che comprende PHP e può sorta di farlo al volo. Che non è proprio esattamente preciso, ma è una buona analogia di ciò che sta accadendo. E 'l'interpretazione quelli zero e uno al volo. E quindi se non lo sa come elaborare qualcosa, se non sa come processo PHP, probabilmente voluto mettere quel testo in là, giusto? Probabilmente voleva mettere il codice in lì, anche se non è tra PHP-- i delimitatori PHP. Ma-- così non sta andando per eliminarlo per voi, è solo andare a scartare fondamentalmente. Così sta andando a stampare fuori allo schermo. Questo mi sembra che sia una cattiva cosa, ma in realtà è sarà un veramente buona cosa, come vedremo vedere quando si parla di Sviluppo web PHP, perché significa che possiamo intervallare PHP e HTML. Possiamo usarli insieme per creare una pagina web più dinamico. Ma più che nel video su sviluppo web PHP. Allora, qual è la sintassi di PHP? Questo è ciò che il video è tutto. Parliamone. Quindi, per iniziare, le variabili. Esistono variabili PHP. Ci sono solo due grandi differenze da C. La prima è che c'è nessun indicatore di tipo. Non abbiamo da dire int, char, float, tutta quella roba. Noi non dobbiamo farlo più. PHP è un linguaggio moderno. Si può capire che cosa sei cercando di fare o fare un migliore indovinare di cosa si sta cercando di fare. Ecco, questo è abbastanza piacevole. L'altra cosa è che tutte le variabili i nomi devono iniziare con il simbolo del dollaro. Questo è solo qualcosa per abituarsi. E 'un po' strano, perché è così che PHP possa capire che cosa è una variabile e che cosa non lo è. Così ogni nome di variabile inizia con il simbolo del dollaro. Quindi, in C si potrebbe dire qualcosa in questo modo, int x = 54. Non abbiamo a che fare più che in PHP. Possiamo solo dire $ x = 54. E si potrebbe dire, per esempio, in C, se avessimo libbra-incluso il .h CS50 file di intestazione, potremmo dire stringa frase = "Questo è CS50." Noi non dobbiamo fare che in PHP, però. Possiamo solo dire $ frase = "Questo è CS50." E in effetti, stringa è ora un tipo di dati incorporato in PHP, o meglio PHP capisce quello che una stringa è. E 'separata da un array di personaggi come è in C. Tutti i tuoi preferiti istruzioni condizionali da C sono ancora disponibili per l'uso. Quindi nessun grande transizione lì. Possiamo say-- possiamo avere se dichiarazioni come questo. se $ y 43, o $ z = 15. Ecco, questo è abbastanza semplice. Possiamo avere se e altro. Possiamo avere se e else if. E notare qualcosa abbastanza bello qui, e questo è una sorta di uno di quelli vantaggi di PHP vs C, avviso che funzione non stiamo usando qui? Stiamo usando == per confrontare un variabile $ nome, in una stringa. Non abbiamo potuto farlo in C, giusto? Abbiamo dovuto usare una funzione chiamata StrComp o StrEndComp o qualsiasi dei suoi cugini correlati. E così noi vediamo già questi vantaggi. Noi non dobbiamo fare qualcosa come sciocco o forse poco intuitivo come chiamare una funzione chiamata StrComp se voglio solo provare se un valore è uguale a una stringa. Potrei semplicemente usare uguali uguali, come ho potuto fare altro. Quindi c'è un vantaggio. A volte, tra l'altro, si potrebbe vedere altro se come una parola, elseif. E questo è OK in PHP pure. Così a volte si potrebbe vedere che. Non è un errore di battitura. PHP capisce realmente elseif. Io non so perché ha deciso di attuare tale, ma come abbiamo visto tante volte in tutta la nostra video finora, noi amiamo i programmatori se possiamo fare le cose in fretta, così sbarazzarsi di quello spazio è apparentemente un grande vantaggio. Ecco, questo è, se e elseif. Abbiamo anche l'operatore ternario, richiamo punto interrogativo colon, per davvero forma breve se il resto o diramazione condizionale. E a quanto pare, in questo, quello che stiamo cercando di fare qui è assegnare la variabile $ lettera sia vero o falso, a seconda che $ var è un carattere alfabetico. Quindi questo è abbastanza simile a isalpha che siamo a conoscenza da C. Questa è una sorta di equivalente in PHP. La funzione è apparentemente chiamato ctype_alpha, ma questo è come lo facciamo in PHP. Quindi tutto questo sta per essere è, se $ var è una lettera, $ lettera è vero. Se $ var non è una lettera, $ lettera è falsa. Abbiamo anche istruzioni switch ancora. Ricordiamo quelli da C pure. In cima c'è molto, ecco come facciamo qualcosa come ottenere int o ottenere stringa. Così PHP ha che ha costruito in. Non abbiamo bisogno di più la biblioteca CS50. Possiamo solo utilizzare la funzione readline. Cosa che sta per fare è la stampa il messaggio, "Il vostro Stato, per favore "e poi lampeggiante rapida attesa che l'utente di inserire alcune informazioni. Ora notate che altro possiamo fare con l'interruttore. Se hai utilizzato prima, si può ricordare che l'interruttore è limitata praticamente a numeri interi e personaggi, ma ora siamo in grado di usare le stringhe. E infatti, l'istruzione switch in PHP è un po 'più flessibile rispetto al suo cugino da C. Loops. Proprio come condizionali, tutti i tuoi vecchi preferiti sono ancora lì. Abbiamo mentre i cicli che contano da 1 a 100 in questo caso. Abbiamo fare cicli while che contano da 1 a 100, e che abbiamo per i loop che contano da 1 a 100. Quindi un grosso salto lì. La sintassi è abbastanza più esattamente, solo che adesso stiamo usando segno variabile del dollaro al posto di dichiarare variabili intere o qualcosa di simile per i nostri sportelli. Qui è dove le cose si fanno un molto meglio di C, però. Array. Così ricordare quando eravamo parlando di C, al fine per noi di crescere e ridursi serie di informazioni, abbiamo bisogno di ordinare di inadempienza a questa idea di una lista collegata, perché gli array C sono stati fissati in termini di dimensioni. Noi non potevamo ridursi. Noi non potevamo crescere. Abbiamo dovuto riallocare la memoria e fare tutta questa follia o utilizzare liste concatenate, che prendere un bel po 'di più spazio. Ma in PHP, gli array sono non fissato in termini di dimensioni più. Possono crescere e possono ridursi. Quindi, di nuovo, questi 20 anni che esisteva tra la prima versione di C e il primo rilascio di PHP, abbiamo deciso che, si sa, sarebbe davvero grande se potessimo farlo. E così abbiamo implementato questo. Quindi array PHP non sono fissi in dimensioni, e perché PHP non lo fa davvero avere programmatore front-facing nozioni di tipi, siamo in grado di mescolare i tipi di dati nel nostro array, anche. Quindi non hanno nemmeno bisogno di usare tutto interi o tutti i punti di galleggiamento, possiamo avere un mix di tutto diversi tipi in un singolo array. Dichiarazione di un array è abbastanza semplice. È proprio come qualsiasi altra variabile. $ nums = array (1, 2, 3, 4), di matrice essendo una funzione che è costruito in PHP che creerà un array per voi. Questo crea un array di quattro valori, numeri in questo caso, chiamato $ nums. E c'è più di un modo per farlo. E stiamo andando a vedere questo molto in PHP. PHP è stato sviluppato da molti diversi persone e cresce e cresce e cresce. C'è di solito non solo due o tre modi di fare qualcosa in PHP, di solito c'è come 10 o 20. Qui è solo un altro comune modo per dichiarare un array. $ nums = quadrati staffa 1, 2, 3, 4. Quindi questa è una sorta di simile all'angolo di C br-- notazione parentesi graffa, piuttosto. $ - o sarebbe int nums piazza staffe uguale parentesi graffa 1, 2, 3, 4. In PHP è $ nums = piazza staffe 1, 2, 3, 4. Ma entrambi questi esempi qui mi danno un array di quattro in questo caso interi. Che cosa devo fare per virare qualcosa adesso? Beh, posso solo dire $ nums 4, che di nuovo, stiamo ancora contando da 0 qui in PHP, sarebbe la quinta elemento della matrice. Posso solo dire che. Io non ho intenzione di subire un seg colpa, perché il mio array è solo andando a crescere per ospitare questo. Questo è abbastanza bello, giusto? E infatti, non ho nemmeno bisogno di specificare dove voglio dirla. Posso solo dire che questo e solo virare a destra fino alla fine, Oppure potrei anche solo dire $ nums 20 o 1000. Non ha molta importanza. E 'ancora solo andando a virare a destra fino alla fine. Così posso crescere, e as-- siamo Non andando a coprire in qui, ma posso impiombare o striscia elementi fuori della matrice così, e la matrice si ridurrà a ospitare che ora mancante o vuoto dello spazio. C'è un altro modo di virare qualcosa su un array, che è una funzione denominata array_push. Quindi, di nuovo, proprio questa idea di essere in grado di fare le cose molti modi diversi. Così abbiamo visto tre modi diversi ora di virare su un altro elemento di un array. Quindi questo aggiunge un altro elemento alla fine dell'array $ nums. E possiamo mescolare i nostri tipi di dati. Così ho potuto avere una serie di non 1, 2, 3, 4, ma 1, vero, 3, 4, in cui il vero è un valore booleano, e poi se voglio virare su un altro elemento a tale matrice, forse una stringa, la stringa "cinque", ho potuto farlo. E ora il mio allineamento sarebbe essere 1, vero, 3, 4, cinque. La parola di cinque, non il numero intero 5. Così un sacco di flessibilità lì. La flessibilità ottiene ancora meglio, però, perché PHP ha il supporto per qualcosa chiamato un array associativo. E noi sorta di vagamente parlato array associativi su in C nel contesto delle tabelle hash, perché quali array associativi sono davvero tutto circa stanno facendo chiave mappature coppia di valore. E in questo caso, il keys-- se siamo familiarità con gli array di C, le chiavi sono numeri indice. 0, 1, 2, 3. E i valori sono ciò che noi troviamo che matrice 0, 1 campo, di matrice 2, e così via. Così i tasti sono indici, ei valori sono ciò è in quella posizione dell'array, specificato da tale indice. Ma in PHP, non dobbiamo fare questo nozione di matrice 0, 1 campo, di matrice 2 più. Ora possiamo usare le parole reali per mappare i tasti ai valori. E così ho potuto dire qualcosa del genere. Potrei creare un array utilizzando il sintassi parentesi quadra come segue. $ pizze = parentesi quadra "formaggio" e poi questo tipo di notazione freccia a due, 8.99, "pepperoni" freccia 10.99-- 9.99, Eccetera. E così quello che sta succedendo qui? Che cosa sto facendo realmente? Sto creando chiave mappature coppia valore. Così, invece di dire, per esempio, pizze 0, pezzi 1, 2 pizze, Ora posso dire pizze formaggio, pizze ai peperoni, e si riferiscono ai valori essi associati. Così qui sono le nostre chiavi in ​​verde. Formaggio, peperoni, verdure, pollo bufala. Ecco la freccia che fa questa chiave mappatura coppia di valori. E poi qui ci sono i valori in tale posizione array. Quindi è come dire di matrice 0 equivale a 8.99. La chiave è 0. Il valore è 8,99. Ora posso dire formaggio array, o in questo caso pizze di formaggio, formaggio è la chiave, e quello che trovo in pizze formaggio è 8,99. Questo è il valore che trovo lì. Quindi posso dire cose come. $ formaggio pizza = 7.99. Dire che sto avendo una vendita. Voglio dis-- voglio cadere il prezzo della pizza di formaggio. Oppure posso usare le verdure pizza come parte di una condizione, o posso aggiungere un nuovo elemento al mio array, proprio come ho potuto fare in precedenza. Posso aggiungere un nuovo elemento a questo array associativo con il tasto "pancetta" e il valore 13.49. Ma questo tipo di introduce un problema, se ci pensate per un secondo. Come possiamo iterare questo array? Destra? In C, ci sarebbe solo una per ciclo, tipicamente, che avrebbe eseguito da 0 al dimensione dell'array meno 1. L'array ha n elementi in a, il indici validi sono 0 per n meno 1. Così abbiamo potuto utilizzare un ciclo for per passo attraverso ogni singolo elemento. Ma non è davvero il caso più, giusto? Ora dove abbiamo coppia di valori chiave mappature dove le chiavi sono parole, come possiamo iterare su tutte le parole? Beh, per fortuna, PHP ha un modo per affrontare anche questo, e così ci salto indietro a cicli per un secondo introdurre un quarto tipo di ciclo che esiste in PHP chiamato un ciclo foreach. E che un ciclo foreach fa è è fondamentalmente la stessa idea. Potete usarlo per qualsiasi tipo di matrice. Ma è fondamentalmente la stessa idea come un ciclo for, tranne che invece di utilizzare numeri indice, basta avere questa strana sintassi dove si chiama ogni singolo elemento un nome ai fini di questo ciclo. Quindi, in questo caso, foreach ($ array da $ chiave). In sostanza, come che le note di commento, all'interno di tale ciclo foreach, che sta per andare oltre ogni elemento di $ array, che è tipicamente sta per essere un array associativo, ma può realmente essere qualsiasi tipo di matrice che si desidera in PHP. E ogni volta che in un ciclo for si potrebbe hanno detto $ matrice parentesi quadre $ i, si può solo dire $ chiave. In modo che $ chiave diventa un alias per ogni indice di un array associativo PHP, e così si può usare in quel modo. Così, per esempio, abbiamo ora ottenuto la nostra gamma pizze. Ho sorta di infilai in un angolo c'è in modo che possiamo usare per fare un esempio veloce. Se dico foreach ($ pizze come $ pizza), beh, cosa sta succedendo? Beh, io vado a scorrere ogni singolo elemento dell'array $ pizze, e così facendo, ho intenzione di chiamare ogni elemento, quando sono dentro del corpo di quel ciclo for $ pizza. Ecco, questo è una sorta di controfigura, ricordo, che la pizza $ è uno stand-in per dire $ pizze parentesi quadre $ i se stessimo usando un ciclo for, dove noi potrebbe andare da $ i = 0, in questo caso, $ i = 3. Se non avessimo coppie di valori chiave qui, questo sarebbe elemento 0, 1, 2, 3, e vorremmo usare un ciclo for per andare $ 0 pizze, pizze $ 1, $ 2 pizze, $ 3 pizze. Così ora $ solo pizza sta sostituendo per quella chiave individuale. Così che cosa è questo andare a stampare? Sto stampando $ pizza. Che cosa sono io che vado a trovare at-- se stampo fuori $ pizze, $ i? Destra? Se ho intenzione di stampare l'elemento esimo di pizze, cosa devo stampare? Ho intenzione di stampare il valori in quella posizione, giusto? Come se stessimo facendo ciò nel contesto di C, di solito non utilizziamo la nostra iteratore variabile, int i = 0, i è inferiore a 3, i ++, stampare 0, 1, 2, 3. Stiamo stampare array di 0, 1 campo, di matrice 2, un array 3. E così quello che viene stampato fuori è questo. E 'l'elenco dei prezzi. 8.99, 9.99, 10.99, 11.99. Ora una breve nota qui. Un ciclo foreach non lo fa necessariamente stampare le cose in ordine. Non è garantito. Di solito fa. E 'di solito basato sull'ordine in quali elementi vengono aggiunti alla matrice, quindi basta tenere a mente. Potrebbe non essere in ordine. Ma un ciclo foreach itererà attraverso ogni singolo elemento della matrice in questione. In questo caso, ancora una volta, tale matrice è di $ pizze. Posso modificare la sintassi, però, se Voglio che sia la chiave e il valore. Invece di dire $ pizze da $ pizza, posso dire questo. E se si guarda a quello che ho evidenziato in verde qui, sembra una coppia di valori chiave di mappatura. E così, se you--, anche se non siete del tutto sicuro di quello che sta per fare, probabilmente si può intuire che $ topping sta andando essere la chiave in questo caso e $ prezzo sarà il valore. Così sto sostituendo ora ogni elemento di $ pizze come una coppia di valori chiave, e ora posso fare riferimento alla chiave e il valore che potrebbe, a portata di mano, per esempio, come segue. "Un intero" - si tratta di un sacco di stampa in corso qui-- "Un intero" topping "la pizza costa $" prezzo, e poi Stampo fuori un periodo e una barra rovesciata n. Così ora, avviso di nuovo mi hanno accesso a una chiave, $ topping, e un valore, $ prezzo. Così si può indovinare che cosa questo sta andando a stampare? C'è un sacco di dichiarazioni di stampa, ma c'è una sola barra rovesciata n, così sta andando a stampare qualcosa su un entire-- su una sola riga di codice. Se riesco a fare riferimento alla chiave e il valore, allora oggi, invece di essere solo in grado per stampare i prezzi, Posso stampare qualcosa di simile. "Un intero pizza di formaggio costa $ 8,99." E ora sto usando tutta la keys-- formaggio, peperoni, verdura, bufali chicken-- ei valori. 8.99, 9.99, 10.99, 11.99 So questo è solo un modo diverso fare un ciclo foreach che invece di solo che vi dà accesso ai valori, dà solo you-- ti dà accesso alle chiavi e valori. Quindi stampare informazioni. Ho già fatto un paio di modi diversi, potreste aver notato. Le due funzioni che abbiamo in primo luogo visto sono stampa e eco. E per quasi tutti gli effetti e scopi, sono esattamente la stessa cosa. They're-- c'è un molto sottile differenza che non è nemmeno la pena entrare, ma in fondo in tutto il mondo è possibile utilizzare la stampa probabilmente si può usare echo pure. E non è il solo due. PHP ha un sacco di diverso modi per stampare le cose, e ha anche modi per integrare variabili nel mezzo di corda. Quindi ricorda da C, si fa ricordare quale funzione possiamo utilizzare per sostituire le variabili in cose che vogliamo stampare? Probabilmente utilizzare questo funzionare un bel po '. printf, giusto? Quindi questo è quello che avevamo prima dentro del contesto della nostra ciclo foreach. Abbiamo avuto questi cinque istruzioni di stampa separate, perché era l'unico modo ciò che sapevo al momento come stampare i messaggi. Non sapevo come integrare la $ variabile topping nel mio codice PHP. Beh, se ho appena preso un ipotesi, printf, in realtà avrebbe funzionato. printf è una funzione che posso usare in PHP, proprio come posso usarlo in C. E così qualcosa di simile, printf, ancora una volta, siamo a conoscenza che. Il primo% s è sostituito con il valore di $ topping. Il secondo% s è sostituito con il valore di $ prezzo. E così sto interpellating, che è solo un modo elegante di dire sto attaccando la variabili in quella posizione. Così sto collegando $ topping dove il rosso% s è e $ prezzo in cui l'azzurro% s è, e quindi vorrei ottenere il messaggio, "Un intero pizza di formaggio costa $ 8,99." Non l'unico modo in cui posso farlo, però. Forse vorrei utilizzare questo metodo. Questo è in realtà ciò che è più comunemente chiamato interpellanza variabile. Posso usare un eco. Potrei usare una stampa troppo, come vedremo. Ma cosa sta succedendo qui? Prima di tutto, devo sfuggire il simbolo del dollaro. Perché ricordate, quando eravamo in realtà stampare i prezzi dei pizze, Mi è stato effettivamente li formattazione come cifre monetarie con il simbolo del dollaro. Ma stiamo usando il segno del dollaro anche per rappresentare i nomi delle variabili in PHP, in particolare quando sono utilizzando questo metodo di ricci variabile brace Metodo di interpellanza, ho bisogno per sfuggire il mio segno di dollaro in modo che non Penso che sto parlando di una variabile. Sta andando a realtà, letteralmente stampare il simbolo del dollaro. Quindi una sorta di analogize a quello che si vede alla fine c'è. In realtà non stampa backslash n, giusto? Esso stampa un carattere di nuova riga. Questo è-- non sta andando a stampa il simbolo del dollaro backslash, sta andando a stampare solo un personaggio simbolo del dollaro. Stessa idea. Sequenze di escape, cosa queste cose sono chiamate. Ma accorgo che non sto facendo qualsiasi tipo di sostituzioni% s, Sto solo letteralmente collegando in queste variabili. E così nel questo-- cosa sarebbe successo qui è che il valore di $ topping-- nuovo, solo linea con quello che abbiamo passato parlando di formaggio così far-- otterrebbe inserito in là. E $ prezzo sarebbe qualsiasi valore è a pizze, tra parentesi quadre, formaggio, che era 8.99. E così questo sarebbe anche stampare "Un intero pizza di formaggio costa $ 8,99." E come ho detto, potrei usare stampare qui invece di eco, e la funzionalità sia più o meno esattamente la stessa. Sarebbe stampare la stessa cosa. C'è un altro modo per farlo, e questo è un altro vantaggio PHP lavorare con le stringhe. Possiamo fare concatenazione di stringhe. Potremmo farlo in C, anche, utilizzando una funzione chiamata strcat, ma ancora una volta, abbiamo dovuto chiamare funzioni separate. E 'stato tutto questo casino per fare. Abbiamo dovuto libbra-includere string.h. E 'stata una produzione, vero? Ma ora posso solo usare questo operatore punto per concatenare le stringhe insieme. Così sto concatenare "Un intero" e quindi qualunque sia il valore di $ topping è, e poi un altro stringa, "pizza costa $" e poi concatenare qualunque il valore di $ il prezzo è, e poi alla fine sono virare su periodo backslash n. E così questo sarebbe anche stampare "Un intero" - ancora una volta, se stiamo parlando del primo elemento di tale pizze array-- "Un intero pizza di formaggio costa $ 8,99." Periodo, backslash n, ancora una volta, con il $ topping e $ prezzo sostituendo per quello che abbiamo indicato nel nostro foreach ciclo come la chiave coppia di valori di mappatura. PHP in grado di gestire le funzioni. Funzioni erano una specie di integrante C, come abbiamo visto. Come le variabili, non abbiamo bisogno di specificare il tipo di ritorno della funzione, perché non ha molta importanza. E non si specifica il tipi di dati di tutti i parametri, perché in realtà non la materia, come abbiamo visto in PHP. Viene introdotta Ogni funzione con la parola chiave function. Ecco come si indica a PHP che di cosa stiamo parlando è una funzione. E noi non dobbiamo affrontare principale affatto, perché l'interprete, il PHP interprete, lavora da cima a fondo, indipendentemente. Se vede si può fare una chiamata di funzione, sarà andare a trovare la chiamata di funzione, anche se viene successivamente. Ma sta andando a leggere da cima a fondo, quindi non abbiamo bisogno di specificare, qui è dove si inizia. Si inizia sulla linea 1 della vostra PHP e lavorare giù di lì. Quindi, ecco come si creerebbe una funzione chiamata hard_square. Ci vuole apparentemente uno parametro, che io chiamo $ x. Questa funzione è complicato solo per illustrare varie cose. Abbiamo ancora i valori di ritorno. Io sto usando un ciclo for qui. Ma è fondamentalmente solo, che cosa questo ammonta a è di soli $ x $ x volte. Quello che sto facendo è in realtà solo l'aggiunta di x 0 x volte o $ x a zero $ x volte. Ma è esattamente il modo efficace equivale a moltiplicare x volte $ $ x. Posso ancora restituire un valore, in questo caso $ risultato, e ho fatto una funzione in PHP. Ecco come si potrebbe utilizzare nel contesto. Così forse sono all'interno di alcuni file PHP. Notate in blu là che Ho usato i miei delimitatori PHP, parentesi angolare punto interrogativo php. Tra quelli sono tutti il PHP che voglio scrivere. Così sto evidentemente intenzione di get-- Ho intenzione di richiedere all'utente di darmi un numero, negozio che variabili, conservare in quella variabile $ x, qualunque cosa mi hanno dato. Poi ho intenzione di eco hard_square di tale valore, ea quanto pare andare a virare su una nuova linea come pure, e poi più tardi in poi definire la funzione hard_square così che quando faccio la chiamata a hard_square, sa di cosa sto parlando. Ora, potrei anche fare qualcosa come questo. Questo è leggermente diverso. E 'quasi esattamente la stesso di quello che abbiamo visto prima, tranne che invece di dire solo $ x lì come parametro per hard_square, Sto dicendo $ x = 10. Quindi questo è un esempio di programmazione difensiva, custodire i tuoi programmi contro utenti malintenzionati. Questo è un modo di fare qualche errore verificare che non abbiamo davvero avere come opzione in C. Si potrebbe mai specificare il valore di default di qualcosa. Abbiamo sempre dovuto controllare se il, per esempio, se abbiamo fatto una chiamata a GetString, era più adatto se subito dopo verificato che, abbiamo controllato se la stringa che l'utente ha dato non è uguale a null, perché non vogliamo iniziare lavorando con una stringa nulla. Qui, questo è un modo per premunirsi contro questo. Se l'utente non ci fornisce qualcosa in qualche modo, ciò che abbiamo intenzione di fare? Beh, ci limiteremo a dire qualunque cosa essi non hanno fornito noi, stiamo solo andando a collegare 10 invece. Quindi, se non ci hanno dato un valore, basta usare 10 per impostazione predefinita. Ed ecco, Noto che sto facendo una chiamata a hard_square, ma non c'è alcuna richiesta all'utente, giusto? Sto solo facendo una chiamata vuoto. Ma la mia funzione hard_square si aspetta un parametro. Che cosa è questa intenzione di stampare? Sta andando a stampare 100, giusto? Poiché l'utente non ha darmi nulla. E così sto solo intenzione di assumere che 10-- 10 è il valore predefinito. E così questo sarebbe stampare il 100 su una riga. File PHP non devono essere solo un singolo file. È possibile combinare più file insieme, proprio come è possibile in C. Il modo abbiamo fatto in C era tipicamente di fare un #include per ottenere file di intestazione tirato in. Noi non facciamo che in PHP. Facciamo qualcosa chiamato require_once. E poi c'è tutta questa cosa, che cosa è questo __dir__? Questo è solo uno speciale variabile o costante speciale, davvero, che specifica che cosa la directory corrente è. E così sta andando a guardare nella directory corrente un file chiamato cs50.php in questo esempio qui, e sta andando a bastone quel file nella parte superiore del vostro programma PHP, supponendo che si mette la richiedono una volta che la linea nella parte superiore del vostro file PHP. Così PHP è utilizzato principalmente, ma non esclusivamente, come un linguaggio di programmazione web-based. Questo è davvero come è venuto essere. Ma è un pieno il linguaggio, come abbiamo visto. Abbiamo visto praticamente tutte le cose che può fare che sono simili a C, e si può fare un mucchio di molto più di questo. Ma perché è un linguaggio pieno e abbiamo può fare programmazione riga di comando in esso. Siamo in grado di eseguire programmi da linea di comando. Tutto ciò che è necessario per eseguire un comando programma di linea che è scritto in PHP è che avete un interprete PHP. Quindi è una sorta di analogo a avere un compilatore sul vostro sistema se si desidera compilare il codice C per trasformarlo in file eseguibili. È necessario disporre di un interprete PHP che esiste sul vostro sistema in modo da poter interpretare i file PHP. Dando per scontato che non, e di solito questo interprete è chiamato PHP, e di solito è in bundle con la maggior parte download o installazioni di PHP che è possibile ottenere on-line, e di certo il nome dell'interprete PHP abbiamo in CS50, IDE. Tutto ciò che fai è file php tipo. E che cosa il vostro programma di intenzione di fare è che è andando a correre attraverso l'interprete, è intenzione di ignorare tutto ciò che è non tra domanda mark-- o, parentesi angolare punto interrogativo php, i delimitatori PHP, e stamparlo, e sarà interpretare ed eseguire la codice all'interno dei vostri delimitatori PHP. Quindi cerchiamo di andare su un CS50 IDE e dare un'occhiata a un paio di file PHP, l'esecuzione di un paio di file PHP, in Command Line Interface di CS50 IDE. Quindi, qui siamo in CS50 IDE, e mi sono preso la libertà di aprire un file chiamato hello1.php. E a quanto pare, i contenuti di questo File sono solo i delimitatori PHP lì, e in mezzo, echo ("ciao, mondo"). Questo è un molto semplice programma PHP. Sto solo andando a scorrere verso il basso alla mia finestra di terminale qui, e ho intenzione di scrivere php hello1.php, premere invio. Ciao mondo. Questo è probabilmente ciò che siamo stati mi aspettavo di fare, giusto? Saliamo e prendere un altro sguardo a un programma. hello2.php. Praticamente la stessa cosa, Non un sacco di cose qui. Questa volta, però, ho intenzione di richiedere l'utente di darmi i loro nomi. Sto usando ancora una volta che la funzione readline. $ name = readline. Questo è il messaggio, "Qual è il tuo nome?" A quanto pare sono stampa sulla propria linea. E poi, in modo che la linea sotto che sarà la richiesta dove l'utente può inserire il proprio nome. E poi sto usando un po 'di interpellanza variabile qui sulla linea 3 stampare "Ciao" e qualunque sia l'utente. Quindi questo è analogo a dire, Ciao, virgola,% s se stessimo usando printf in C. Così andiamo e interpretare questo programma. Così ancora una volta, farò scorrere verso il basso alla mia finestra di terminale. php hello2.php. Come ti chiami? Doug. Ciao, Doug. Ho anche un altro file chiamato hello3.php. Ho intenzione di cancellare la mia schermo con comandi L, e ho intenzione di eseguire tale. Come ti chiami? Doug. Ciao, Doug. Quindi il comportamento è identico a hello2.php, ma perché è hello3.php? Bene, ecco la differenza. In questo caso, avviso che sulla linea 1 qui, Ho qualcosa che non è tra i delimitatori PHP. Sto solo la stampa fuori-- o io appena digitato: "Come ti chiami?" Quando l'interprete PHP vede questo, ha idea di come interpretarla come PHP, e così, invece di fallire, è solo andare a sputare. Così notare sulla linea 3 ora, il mio invito a readline, non c'è più alcun messaggio. Sto solo effettivamente andando a-- quando l'interprete PHP vede questo, sta andando a stampare "Come ti chiami?" Poi vede, oh, OK, here's-- tutto il resto sarà interpretato come PHP, così ecco perché questo funziona. Non ho per richiedere necessariamente il a-- dell'utente all'interno di readline, Posso solo avere fuori dei delimitatori di PHP e consentire l'interprete stampare appena fuori per me. Quindi in realtà non hanno solo di avere un set di delimitatori di PHP nel vostro programma. Si può effettivamente avere molti di loro, apertura e chiusura secondo necessità. Quindi, diamo uno sguardo un paio di programmi in CS50 IDE dove siamo illustrare questa idea di avere più set di PHP delimitati. OK, così ho aperto un file qui chiamato add1.php. E notare quello che sta succedendo qui. Proprio come prima, ho un PHP singolo set di delimitatori. Ho intenzione di stampare il il messaggio, "Per favore, dammi un numero." Poi ho intenzione di leggere una riga e memorizzarlo nella $ num1 variabile. Poi vado a stampare di nuovo. Dammi un secondo numero. Leggere una linea da parte dell'utente, negozio quello che digitato in $ num2. Aggiungi insieme e conservare che provocare una variabile denominata $ sum, e poi stampare, "The somma di questi due numeri è ", e poi interpellare c'è il $ somma variabile. Così facciamo solo eseguire questo attraverso l'interprete per confermare che questo è quello che ci aspettiamo. php add1.php. Per favore mi dia un numero, 3. Per favore mi dia un secondo numero, 4. La somma di questi due numeri è 7. Ecco 3 più 4. ok? Quindi niente di terribilmente fantasia lì. E adesso aprono add2.php. Qui, ho un paio di PHP delimitato set lì, giusto? Linee 1, 3-- linee 1 e 3 non hanno delimitatori PHP. Così, quando l'interprete li vede, è solo andando a sputare fuori esattamente quello che ho digitato lì. Ecco dove sono facendo tutto il mio suggerimento. Sulle linee 2 e 4, vediamo il molto $ familiare? php sorta di delimitatori, così queste due linee sono andare per eseguire PHP. E poi sulla linea 5, ho questo cosa strana qui, giusto? Questa parentesi angolare punto interrogativo segno di uguale. Sarò anche lo zoom in un po 'più avanti. Si può vedere questo è quello che sto parlando proprio lì, questo $? =. Si scopre che è così comune che la ragione per cui apriamo una serie di PHP delimitatori è per stampare un valore. E questo è tutto quello che andremo a fare. Ma c'è anche una scorciatoia per questo. $? = È PHP stenografia per dire qualcosa come $? php echo la somma di num1 e num2. Quindi questo è solo un altro scorciatoia per questo. Quindi, se corro questo programma, php add2.php. Io lo zoom giù un po '. Per favore mi dia un numero, 4. Per favore mi dia un secondo numero. E siccome io non mi preoccupo tipi di dati in PHP, posso dire 4.8. La somma di questi due numeri è 8.8. Tale funzione si comporta in modo più o meno esattamente come ci si aspetterebbe, anche. E ho un altro aperto qui chiamato dice.php. Prova di nuovo. Ho un altro qui chiamato dice1.php, che anche, vedere, ha quella domanda parentesi angolare contrassegnare notazione segno di uguale in là, a meno di notare che in questo caso sono chiamando la funzione rand, che come potrebbe aspettare genera un numero casuale. "Tu rotolato a", e sta andando a calcolare alcuni numeri casuali, mod 6 + 1. In modo che mi darò numero nell'intervallo da 1 a 6. Ricorda che mod 6 mi avrebbe dato un numero compreso da 0 a 5, ma se sto simulando tiri di dado, che è quello che sto facendo qui, Non voglio questi dadi per passare da 0 a 5, voglio dadi che vanno da 1 a 6. E quindi questo è un modo per ottenere me nella gamma da 1 a 6. Lo sto facendo due volte. Quindi, apparentemente sto rotolando due dadi di questo programma. Quindi io cancellare il mio schermo, e farò php dice1.php. È rotolato un 4 e un 2. E se corro il programma ancora una volta, è rotolato un 5 e un 5. Così ogni volta che faccio funzionare il programma, Sto diventando numeri diversi, perché ogni volta che lo faccio così, sta ricominciando. Sta andando a generare una nuova set di numeri casuali per me. Quindi, se siamo abituati a l'esecuzione di programmi da C, siamo abituati a digitare il ./ il nome di un programma, giusto? È così che abbiamo fatto tutti dei nostri programmi in C finora. Possiamo farlo in PHP pure con l'aggiunta di qualcosa chiamato un shebang alla cima del nostro file PHP. So che è una specie di una parola stupida. E 'l'abbreviazione di hash botto. Ecco i primi due caratteri lì. Ricordate che noi chiamiamo punto esclamativo spesso un botto in informatica. Potrebbe anche essere per colpo secco. Ci sono un paio di modi di interpretarlo. Ma è fondamentalmente una sorta speciale di comandare che l'interprete PHP capisce come, oh, voglio di eseguire questo programma, che è evidentemente / user / bin / php, che è in realtà dove l'interprete PHP vive in particolare sul nostro sistema. Così it's-- cosa succede qui è l'interprete capisce, oh, Sono apparentemente dovrei usare in questo programma per eseguire questo file. E così ti permette per saltare il passo di dover dire php something.php. C'è un'altra cattura qui, che è che se vogliamo che i nostri programmi alle funzionare come previsto, abbiamo bisogno di fare qualcosa chiamato un cambiamento di autorizzazione file. E noi go-- e parliamo un po ' bit più modifiche di autorizzazione sui file nel nostro video su MVC, ma è sufficiente dire che questo è ciò che devi fare al fine di rendere il vostro file .php eseguibile. Quindi, diamo uno sguardo a questo come il nostro ultimo esempio sopra in CS50 IDE. Così qui in IDE ho due file in questa Directory PHP che sembrano non essere chiamato .php. Ho una funzione chiamata add-- Ho un file chiamato add3 e un file denominato dice2. Quindi facciamo un rapido cercare e aprire add3. E come si può vedere, all'inizio del mio file ho questa faccenda, giusto? Questo punto hash punto esclamativo. Ora, potrai anche forse notare che per qualche ragione, Non ho alcuna sintassi mettendo in evidenza più, e questo è quello che ho accennato in precedenza, che era che se io non nomino il mio file .php, non ho il vantaggio di evidenziazione della sintassi più. Questo file è appena chiamato add3. In modo che possa funzionare in un secondo momento con ./ add3 e non ./ add3.php. Così il reason-- è ancora bene, è ancora valida PHP, ma non è la sintassi evidenziata, perché questo file non viene chiamato something.php. Questa è l'unica vera differenza qui, oltre alla faccenda. Quindi vediamo cosa succede quando Io cerco di eseguire questo programma. ./ Add3, proprio come farebbe con C. Bash. ./ Permesso add3 negato. Questo è ciò che si sta andando per vedere se si dimentica utilizzare il comando chmod per cambiare i permessi del file. Come si è visto, PHP regolare file non possono solo essere eseguiti. Essi possono essere interpretati, ma siamo fare qualcosa di un po 'diverso qui. Stiamo eseguirlo. E così ho bisogno di aggiungere l'autorizzazione di esecuzione, chmod a + x per add3. Allora posso dire ./ add3. Per favore mi dia un numero. 5, 6. La somma di questi due numeri è 11. Allo stesso modo, ho già permessi CHMOD dice2, così posso semplicemente digitare ./ dice2, hai ottenuto un 1 e un 1, è laminati a 5 e 4, e così via. Ecco, questo è più o meno la idea di una sintassi di PHP, giusto? C'è un sacco di passare, lo so. Ma si spera che avete visto ora che il PHP non è poi così diverso da C e davvero ci dà la capacità di prendere le cose su una tacca o due. Non abbiamo davvero da preoccuparsi troppo about-- non lo facciamo davvero devono preoccuparsi troppo di i dettagli di basso livello noi ha dovuto preoccuparsi di C, giusto? Siamo in grado di concentrarsi sul più alto roba livello PHP ci permette di fare e di prendere per concesso che lavorerà per noi. Così ci dà la possibilità ora, transizione da C a PHP, per rendere i programmi che sono molto di più complessa e forse molto più robusto. Quindi spero che vi divertiate lavoro con PHP, e sono Doug Lloyd. Questo è CS50.