DOUG LLOYD: Així que hem fet un munt de treball en C, i C és una molt cool idioma perquè et dóna la capacitat de submergir-realment baix nivell en els seus programes. Tenim l'oportunitat de fer les coses com Realment minuts com manipular bytes individuals de la memòria. Recordem que realment punters ens permetrà que la flexibilitat. Però és el que sempre s'ha de tenir aquest nivell de gra fi dels detalls en els nostres programes? Probablement no, oi? I si tindrem un equilibri entre ser capaç de fer molt, molt coses i promocions, realment, realment grans coses que nosaltres no hem de pensar aproximadament, que no hem de posar en pràctica aquests realment grans idees si que ja estan construïdes en per a nosaltres, en general, per a la construcció de grans programes o projectes grans, probablement anem a errar pel costat d'haver-hi més coses llenguatge construït en per a nosaltres, en lloc de tenir les coses de baix nivell. I aquí és on realment ve en PHP. Ara, una de les raons que ensenyem PHP en CS50 és que està fortament inspirat en C. I, de fet, al meu entendre, Realment hi ha dos idiomes progenitores que són molt comuns avui en dia. C i LISP. I són llengües progenitores perquè tots els altres de programació modern llenguatge que s'ha desenvolupat des de llavors s'inspira per un o altre sintàcticament. PHP és molt similar sintàcticament a C, mentre que llengües com l'Esquema, per exemple, que vostè pot haver sentit parlar, està fortament inspirat en una llengua anomenat LISP, que és una llengua més antiga. Així que la raó per la qual ensenyem PHP en CS50 és que, coneixent C com fonamentalment com ho fa en aquest punt, recollint PHP, el que li dóna la capacitat de fer les coses molt més alts de nivell que C ho fa, no és que gran part d'un obstacle, perquè ja té la idea bàsica de la sintaxi. C ha existit per gairebé 45 anys en aquest punt. PHP ha estat del voltant d'uns 20 anys. I el fet que 25 anys Al mig, els programadors determinat que ho farien molt més Prefereixo tenir habilitats de nivell superior, i els errors i lluites dels 20 anys en el medi dut a PHP i altres llenguatges moderns. De PHP una gran varietat de idioma per programari que allow-- per programari que-- on necessita fer coses que en C són realment complicat. Així, per exemple, treballant amb cadenes en C és molt complicat, perquè com sabem, les cadenes en C són en realitat conjunts de caràcters. No és un tipus de dades incorporat. O potser és més important, cosa que ni tan sols cobrim en C, ¿I si el que necessites fer algunes xarxes d'ordinadors? Tot bé? C té la capacitat de fer-ho, però és tan arcà i tan difícil de fer realitat. ¿No seria bo si el llengua tenia una manera fàcil incorporat per implementar xarxes? I PHP és un llenguatge que fa que, o facilita que, una mica més. Com ja he dit, PHP és molt fortament inspirat de C. La sintaxi és molt similar. I pel que ha d'esperar que el transició d'una a l'altra una mica més suau que alguns altres idiomes podrien ser. Per començar a escriure PHP, simplement obrir un arxiu amb l'extensió d'arxiu .php. Tècnicament això no és en realitat cal, però si vols coses com la sintaxi destacant en l'IDE, de manera que aquest tipus noms o noms de variables, funcions, vostè sap, les paraules clau del llenguatge es destaquen en un color específic, generalment, voler nomenar els seus arxius amb una extensió de fitxer en particular. Així que hem cridat a la nostra arxiu amb un .php extensió, però després també amb PHP, tot el codi PHP que escrivim en aquest arxiu ha d'estar tancat en aquests PHP delimitadors que veiem aquí a la pantalla. Suport angular? Php per començar. Llavors escrivim tot el nostre PHP codi que volem en el medi. I llavors ? suport en angle per tancar. Si no fem això, llavors el que va a passar? No va a estavellar-se. No va a realment arruïnar el nostre programa. Però no va a tenir l'efecte que volem. Què passarà, en realitat, és que quan tractem d'executar aquest programa, tot el que no entre aquests delimitadors va ser imprès textualment. No va a en realitat executar el codi, que va a acaba imprimir textualment. Ara per què és així? Així C és el que es coneix com un llenguatge compilat. Probablement vostè està familiaritzat amb el pas de fer els seus programes, convertir els arxius .c i arxius .h en un sol executable amb maquillatge, en particular, l'ús de Clang com el nostre compilador. PHP, però, ¿no tenir aquesta equivalent. PHP és el que s'anomena un llenguatge interpretat. ¿I què vol dir això? Bé, això vol dir que no hem de convertir nostre codi font de zeros i uns per endavant. Més aviat, hi ha un programa, que també es diu PHP, que entén PHP i pot espècie de fer-ho sobre la marxa. Això no és realment exactament precisa, però és una molt bona analogia del que està passant. És la interpretació dels zeros i uns sobre la marxa. I pel que si no ho sap com processar alguna cosa, si no sap com PHP procés, és probable que volgut un text per a allà, oi? Probablement volia posar el codi allà, encara que no és entre PHP-- els delimitadors de PHP. Però- per la qual cosa no va eliminar per vostè, que només va a bàsicament descartar-ho. Així que va a imprimir fora de la pantalla. Això sembla que és una mala cosa, però en realitat és serà una realitat bo, com veurem veure quan parlem de Desenvolupament web PHP, perquè significa que podem intercalar PHP i HTML. Podem utilitzar-los junts per crear una pàgina web més dinàmica. Però més sobre això en el vídeo en el desenvolupament web PHP. Llavors, quin és la sintaxi de PHP? Això és el que aquest vídeo es tracta. Anem a parlar-ne. Així que per començar, les variables. Hi ha variables de PHP. Hi ha només dos grans diferències de C. La primera és que no hi ha sense especificador tipus. No hem de dir int, char, float, totes aquestes coses. No hem de fer això. PHP és un llenguatge modern. Es pot esbrinar el que ets tractant de fer o fer una millor Suposo que el que estem tractant de fer. Així que això és bastant agradable. L'altra cosa és que tota la variable noms han de començar amb un signe de dòlar. Això és una cosa d'acostumar. És una mica estrany, perquè és perquè PHP pot entendre el que és una variable i el que no ho és. Així que cada nom de variable comença amb un signe de dòlar. Així que en C podríem dir alguna cosa així, int x = 54. No hem de fer això en PHP. Només podem dir que $ x = 54. I podríem dir, per exemple, en C, si haguéssim inclòs per lliura el .h CS50 arxiu de capçalera, podríem dir frase cadena = "Aquesta és CS50." No hem de fer això en PHP, però. Només podem dir $ frase = "Aquesta és CS50." I de fet, és ara string un tipus de dades incorporat en PHP, o més aviat PHP entén el que una cadena és. És separat d'una matriu de personatges com és en C. Tot el seu favorit sentències condicionals de C encara estan disponibles per al seu ús. Així que no és gran transició allà. Podem dir-- podem tenir si les declaracions d'aquest tipus. si $ i 43, o $ z = 15. Així que això és bastant senzill. Podem tenir if i else. Podem tenir if i else if. I notar alguna cosa molt agradable aquí, i això és una espècie d'un dels avantatges de PHP enfront de C, previ avís quina funció no estem fent servir aquí? Estem fent servir == per comparar un variable $ nom, en una cadena. No podíem fer que en C, oi? Vam haver de fer servir una funció anomenada StrComp o StrEndComp o qualsevol dels seus cosins relacionats. I així ja veiem aquests avantatges. No hem de fer alguna cosa tan ximple o potser poc intuïtiu com cridar a una funció anomenada StrComp si només vull provar si un valor és igual a una cadena. Jo només podia fer servir iguals iguals, com si pogués fer res més. Així que hi ha un avantatge. A vegades, per cert, és possible que veure més si com una sola paraula, elseif. I això està bé en PHP també. Així que de vegades és possible que vegi això. No és un error tipogràfic. PHP realment entén elseif. No sé per què decidit implementar que, però com hem vist moltes vegades mitjançant la nostra vídeos fins al moment, que els programadors encanta si que podem fer les coses ràpidament, així que desfer-se d'aquest espai aparentment és un gran avantatge. Així que això és sempre i elseif. També comptem amb l'operador ternari, record signe d'interrogació de còlon, de forma molt breu, si altra cosa o ramificació condicional. I pel que sembla, en aquest, el que estem tractant de fer aquí es assignar la variable $ Carta ja sigui vertadera o falsa, depenent de si $ var és un caràcter alfabètic. Així que això és bastant similar a isalpha que estem familiaritzats amb d'C. Aquesta és una espècie d'equivalent en PHP. La funció és aparentment anomenada ctype_alpha, però així és com ho fem en PHP. Així que tot això va a ser és, si $ Var és una carta, $ carta és cert. Si $ var no és una carta, $ Carta és falsa. També tenim sentències switch encara. Recordem els de C també. A la part superior hi ha, això és el que fem alguna cosa així com aconseguir int o aconseguir cadena. Així que PHP ha de construir a. No necessitem la biblioteca CS50 més. Només podem utilitzar la funció readline. El que va a fer és imprimir el missatge: "El seu estat, per favor ", i després parpelleja ràpida esperant que l'usuari introdueixi alguna informació. Ara fixeu-vos què més que podem fer amb interruptor. Si vostè ha utilitzat abans, es recordarà que l'interruptor es limita pràcticament a sencers i personatges, però ara podem utilitzar cadenes. I de fet, la sentència switch en PHP és una mica més flexible que el seu cosí de C. Bucles. Igual que els condicionals, tots seus vells favorits encara hi són. Hem mentre bucles que compten a partir d'1 a 100 en aquest cas. Hem fer mentre bucles que compten d'1 a 100, i tenim els bucles que compten d'1 a 100. Així que no és gran salt allà. La sintaxi és bastant molt exactament el mateix, excepte que ara estem utilitzant variable de signe de dòlar en comptes de declarar variables senceres o una cosa així per als nostres comptadors. Aquí és on les coses es posen una molt millor que C, però. Arrays. Així recordem quan érem parlant de C, per tal per créixer i encongir conjunts d'informació, que necessitàvem per ordenar per defecte a aquesta idea d'una llista enllaçada, perquè les matrius C es van fixar en grandària. No hem pogut reduir la seva grandària. No hem pogut créixer. Vam haver de reassignar la memòria i faràs tota aquesta bogeria o utilitzar llistes enllaçades, que prendre un bon espai de poc més. Però en PHP, les matrius són no es fixa en la mida més. Poden créixer i poden encongir-se. Així que de nou, aquests 20 anys que existia entre la primera versió de C i la primera versió de PHP, hem decidit que, ja saps, seria realment gran si poguéssim fer això. I així hem implementat això. Així arrays PHP no són fixos en mida, i perquè PHP en realitat no tenir programador que donava al capdavant nocions de tipus, podem barrejar tipus de dades en els nostres arrays, també. Així que ni tan sols hem de fer servir tota sencers o tots els punts flotants, podem tenir una barreja de tot diferents tipus en una sola matriu. Declarant una matriu és bastant senzill. És com qualsevol altra variable. nums $ = array (1, 2, 3, 4), sent una funció array que es construeix en PHP que crearà una matriu per a vostè. Això crea una matriu de quatre valors, nombres en aquest cas, van cridar $ nums. I hi ha més d'una manera de fer-ho. I anem a veure això molt en PHP. PHP ha estat desenvolupat per molts diferents persones i creix i creix i creix. En general hi ha no només dos o tres maneres de fer alguna cosa en PHP, en general hi ha com 10 o 20. Això és només un altre comú forma de declarar una matriu. $ Nums = quadrats del suport 1, 2, 3, 4. Així que això és una mena de semblant a l'angle de C br-- notació claudàtor, més bé. $ - o seria int nums quadrat claudàtors és igual clau d'1, 2, 3, 4. En PHP és $ nums = quadrat suports 1, 2, 3, 4. Però aquests dos exemples aquí em donen una matriu de quatre en aquest cas els nombres enters. Què passa si vull virar alguna cosa ara? Bé, jo només puc dir $ nums 4, que de nou, encara estem explicant des de 0 aquí en PHP, seria el cinquè element de la matriu. Jo només puc dir això. Jo no vaig a patir un seg queixar, perquè la meva matriu és simplement creixerà per donar cabuda a això. Això és molt bonic, oi? I, de fet, jo ni tan sols necessito especificar on vull posar-ho. Jo només puc dir això i just virar a la dreta en el final, O podria fins i tot només dir $ nums 20 o 1000. En realitat no importa. Està sent només va a virar a la dreta en el final. Així que puc créixer, i com-- estem no va a cobrir aquí, però puc empalmar o tira elements fora de la matriu, així, i el conjunt es reduirà per acomodar que ara falta o l'espai buit. Hi ha una altra manera de virar alguna cosa en una matriu, que és una funció anomenada array_push. Així que de nou, només per aquesta idea de ser capaç de fer coses de moltes maneres diferents. Així que hem vist tres maneres diferents ara per virar un altre element en una matriu. Així que això afegeix un altre element fins al final de la matriu $ nums. I podem barrejar els nostres tipus de dades. Així que podria tenir una matriu de no 1, 2, 3, 4, però 1, és cert, 3, 4, on la veritable és un booleà, i després si vull afegir un altre element a aquesta matriu, potser una cadena, la cadena "cinc" Jo podria fer això. I ara el meu arsenal faria ser 1, veritable, 3, 4, 5. La paraula de cinc, no el nombre sencer maig. Així que molta flexibilitat allà. La flexibilitat aconsegueix millor encara, però, pel fet que PHP té suport per a alguna cosa anomenada una matriu associativa. I una mena de vaga parlat matrius sobre associatives en C en el context de les taules hash, perquè el matrius associatives són realment tot sobre estan fent clau parell de valors assignacions. I en aquest cas, la keys-- si estem familiaritzats amb els arrays de C, les tecles són nombres d'índex. 0, 1, 2, 3. I els valors són el que ens trobem que array 0, array 1, array 2, i així successivament. Així que les claus són índexs, i els valors són el que està en aquesta ubicació matriu, especificat per aquest índex. Però en PHP, no hem de fer això noció de matriu 0, array 1, sèrie 2 més. Ara podem usar paraules reals per assignar claus als valors. I perquè jo pogués dir alguna cosa com això. Jo podria crear una matriu usant el plaça sintaxi suport de la següent manera. $ Pizzes = claudàtor "formatge" i després aquest tipus de notació de doble fletxa, 8.99 ", pepperoni," fletxa 10.99-- 9,99, etcètera. I així, què està passant aquí? Què estic fent en realitat? Estic creant Les assignacions de parells de valor. Així que en lloc de dir, per exemple, pizzes 0, peces 1, 2 pizzes, Ara puc dir pizzes formatge, pizzes de pepperoni, i es refereixen als valors associat amb ells. Així que aquí estan les claus en verd. Formatge, pepperoni, verdures, pollastre búfal. Aquí està la fletxa que fa aquesta clau d'assignació parell de valors. I llavors aquí són els valors en aquesta ubicació fallida. Així que és com dir gamma 0 és igual a 8.99. La clau és 0. El valor és 8,99. Ara puc dir formatge matriu, o en aquest cas pizzes de formatge, el formatge és la clau, i el que trobo a formatge pizzes és 8,99. Aquest és el valor que hi trobava. Així que puc dir coses com. formatge de pizza $ = 7,99. Diguem que estic tenint una venda. Vull dis-- vull caure el preu de la pizza de formatge. O puc fer servir el vegetal pizza com a part d'una condició, o puc afegir un nou element al meu matriu, de la mateixa manera que jo podia fer abans. Puc afegir un nou element a aquest matriu associativa amb el "cansalada" clau i el valor de 13.49. Però aquest tipus de introdueix un problema, si vostè pensa en això per un segon. Com podríem iterar a través d'aquesta sèrie? Oi? En C, ens acaba de tenir un per al bucle, en general, que aniria des de 0 fins al mida de la matriu almenys 1. La matriu té n elements en el índexs vàlids són del 0 al n almenys 1. Així que podríem fer servir un bucle for per pas a través de cada element individual. Però això no és realment el cas més, no? Ara on tenim parell de valors clau assignacions on les claus són les paraules, ¿Com podem iterar sobre totes les paraules? Bé, afortunadament, PHP té una manera de bregar amb això també, i el que anem a saltar de nou als bucles per a un segon introduir un quart tipus de bucle que existeix en PHP anomenat un bucle foreach. I el que és un bucle foreach fa és és bàsicament la mateixa idea. Es pot utilitzar per a qualsevol tipus d'arranjament. Però és bàsicament el mateixa idea que un bucle for, excepte que en lloc d'utilitzar nombres índexs, només té aquesta sintaxi estranya, on es diu a cada element un nom per als fins d'aquest bucle. Així doncs, en aquest cas, foreach ($ array com $ clau). Bàsicament, el que les notes de comentari, dins d'aquest bucle foreach, que va anar sobre cada element de l'array $, que és típicament serà un array associatiu, però en realitat pot ser qualsevol tipus de matriu que desitja en PHP. I cada vegada que, en un bucle for que podria han dit claudàtors $ array $ I, només vaig poder dir $ clau. Així que $ clau es converteix en un àlies per a cada índex de la seva PHP matriu associativa, i perquè pugui usar-lo així. Així, per exemple, tenim Ara aconseguim la nostra gamma pizzes. He tipus de vaig ficar a la cantonada hi pel que podem usar-lo per fer un exemple ràpid. Si dic foreach ($ pizzes com $ Pizza), bé, ¿què està passant? Bé, vaig a recórrer tots els sol element de la matriu $ pizzes, i en fer-ho, vaig a trucar a cada element, quan estic a l'interior del cos d'aquest bucle, $ pizza. Així que això és una mena de suplent, recordar, que la pizza $ és un substitut per dir $ Pizzes claudàtors $ i si estàvem usant un bucle for, on podria anar des de $ i = 0 a, en aquest cas, $ I = 3. Si no tinguéssim parells de valors clau aquí, això seria element 0, 1, 2, 3, i ens agradaria utilitzar un bucle per anar $ 0 pizzes, pizzes $ 1, $ 2 pizzes, $ 3 pizzes. Així que ara només $ pizzes està substituint per aquesta tecla individual. Llavors, què és això va a imprimir? Estic imprimint $ pizza. Què vaig a trobar at-- si imprimeixo $ pizzes, $ i? Oi? Si vaig a imprimir l'element i de pizzes, ho vaig a imprimir? Vaig a imprimir el valors en aquest lloc, oi? Igual que si fèiem això en el context de C, no solem utilitzar el nostre Iterador variable int i = 0, i és menor que 3, i ++, per imprimir 0, 1, 2, 3. Estem imprimint sèrie 0, matriu 1, matriu 2, sèrie 3. I així el que això imprimeix és això. És el llistat de preus. 8.99, 9.99, 10.99, 11.99. Ara una nota ràpida aquí. Un bucle foreach no necessàriament imprimir les coses en ordre. No està garantit. En general ho fa. En general, està basat en l'ordre en elements que s'afegeixen a la matriu, així que tenir això en compte. Potser no és la fi. Però un bucle foreach iterará a través de cada element de la matriu en qüestió. En aquest cas, de nou, aquesta matriu és de $ pizzes. Puc canviar la sintaxi, però, si Vull la clau i el valor. En lloc de dir $ pizzes com $ pizza, puc dir això. I si ens fixem en el que he ressaltat en verd aquí, es veu com una assignació de tecles parell de valors. I pel que si usted-- encara que no està tot segur del que va a fer, Probablement es pot endevinar que $ farcit va a ser la clau en aquest cas i $ Preu serà el valor. Així que estic substituint ara cada element de $ pizzes com un parell de valors clau, i ara puc fer referència a la clau i el valor, que podria molt bé, per exemple, com segueix. "Un conjunt" - es tracta d'una gran quantitat de impressió passant aquí-- "en el seu conjunt" superant "pizza costa $" preu, i després Imprimeixo un període i una barra invertida n. Així que ara, l'avís de nou em té accés a 1 clau, $ topping, i un valor, $ preu. Així que es pot endevinar el que això es va a imprimir? Hi ha una gran quantitat de declaracions d'impressió, però només hi ha una barra invertida n, així que va a imprimir alguna cosa en 1 entire-- en una sola línia de codi. Si puc fer referència a la clau i el valor, llavors ara, en lloc de només ser capaç per imprimir els preus, Puc imprimir alguna cosa com això. "Tota una pizza de formatge costa 8,99 $." I ara que estic fent servir tot el keys-- formatge, pepperoni, vegetal, búfal chicken-- i els valors. 8.99, 9.99, 10.99, 11.99 Així això és només una manera diferent fer un bucle foreach que en lloc de simplement li dóna accés als valors, només dóna usted-- et dóna l'accés a les claus i els valors. Així imprimir informació. Jo ja he fet un parell de diferents maneres, t'hauràs adonat. Les dues funcions que hem principalment vist són d'impressió i ressò. I per pràcticament tots els intents i propòsits, són exactament el mateix. They're-- hi ha una molt subtil diferència que no és tan sols val la pena ficant, però bàsicament tot arreu pot utilitzar la impressió és probable que pugui utilitzar ressò també. I això no és l'únic 02:00. PHP té una gran quantitat de diferents formes d'imprimir les coses, i també té formes d'integrar variables en el mitjà de la cadena. Així que recordi de C, oi recordar el que la funció que podem utilitzar per substituir les variables en les coses que volem imprimir? És probable que utilitzi aquest funcionar bastant. printf, oi? Així que això és el que teníem abans a l'interior del context del nostre bucle foreach. Vam tenir aquests cinc declaracions d'impressió independents, perquè aquesta era l'única manera que realment sabia en el moment com imprimir missatges. Jo no sabia com integrar la variable $ superant en el meu codi PHP. Bé, si m'acaba de prendre una conjectura salvatge, printf, que en realitat hauria funcionat. printf és una funció que pugui utilitzar en PHP, igual que ho puc fer servir en C. I així alguna cosa com això, printf, de nou, estem familiaritzats amb això. El primer% s se substitueix amb el valor de $ topping. El segon% s es substitueix amb el valor de $ preu. I pel que estic interpel·lant, que és només una forma elegant de dir que estic pegant el variables en aquest lloc. Així que estic endollant $ superant on el vermella% s és i $ preu on el% s blau és, i després em anava a aconseguir el missatge, "Tota una pizza de formatge costa 8,99 $." No és l'única manera que puc fer-ho, però. Potser m'agradaria utilitzar aquest mètode. Això és en realitat el que és més comunament anomenada interpel·lació variable. Puc utilitzar un ressò. Em vindria bé una impressió també, com veurem. Però, què està passant aquí? En primer lloc, he de escapar de la mostra de dòlar. Perquè recordeu, quan estàvem en realitat impressió dels preus de les pizzes, Jo estava en realitat donar-los format com xifres monetàries amb un signe de dòlar. Però estem fent servir signes de dòlar també per representar els noms de variables en PHP, i en particular quan estic l'ús d'aquest mètode de la arrissat variable de reforç mètode de la interpel·lació, necessito per escapar de la meva signe del dòlar en el que no ho fa Crec que estic parlant d'una variable. Va a realitat, literalment imprimir un signe de dòlar. Així espècie de analogize a el que es veu al final allà. No ho fa realitat print barra invertida n, oi? S'imprimeix un caràcter de nova línia. Aquesta és-- no va a print signe de dòlar barra invertida, que va a imprimir només un caràcter de signe de dòlar. La mateixa idea. Les seqüències d'escapament, el que aquestes coses es diuen. Però noto que no estic fent qualsevol tipus de substitucions% s, Estic literalment endollar en aquestes variables. I així, en esto-- el que succeiria aquí és que el valor de $ topping-- de nou, només mantenir amb el que hem estat parlant de formatge tan far-- obtindria endollat ​​allà. I $ preu seria qualsevol valor és en pizzes, entre claudàtors, el formatge, que era 8,99. I així això també imprimir "Tota una pizza de formatge costa 8,99 $." I com he dit, em vindria bé imprimir aquí en comptes d'eco, i la funcionalitat sigui gairebé exactament el mateix. Seria imprimir la mateixa cosa. Hi ha una altra manera de fer-ho, i això és un altre avantatge de PHP treballar amb cadenes. Podem fer la concatenació de cadenes. Podríem fer això en C, també, usant una funció anomenada strcat, però una vegada més, vam haver de cridar a funcions separades. Va ser tot aquest embolic que fer. Vam haver lliura incloure string.h. Va ser una producció, no? Però ara puc simplement usar aquest operador punt per concatenar cadenes junts. Així que estic concatenant "en el seu conjunt" i a continuació, qualsevol que sigui el valor de $ desmoche és, i després un altre cadena, "pizza costa $" i després concatenant el el valor de $ preu és, i després al final estic virades en període barra invertida n. I el que també faria imprimir "en el seu conjunt" - de nou, si estem parlant de la primera element d'aquesta array-- pizzes "Tota una pizza de formatge costa 8,99 $." Període, barra invertida n, una altra vegada, amb el desmoche $ i $ preu substitució pel que havíem especificat en la nostra foreach bucle com la clau d'assignació parell de valors. PHP pot gestionar funcions. Funcions eren una mena de integrant de C, com hem vist. Igual que les variables, no necessitem a especifiqui el tipus de retorn de la funció, perquè en realitat no importa. I no especifiquem la tipus de dades dels paràmetres, perquè en realitat no matèria, com hem vist en PHP. Cada funció s'introdueix amb la paraula clau funció. Així és com ho vam indicar a PHP que el que estem parlant és d'una funció. I nosaltres no hem de davant principal en absolut, pel fet que l'intèrpret, el PHP intèrpret, funciona de dalt a baix, independentment. Si veu vostè pot fer una trucada de funció, que va anar a buscar a la crida de funció, fins i tot si es tracta més endavant. Però va a llegir de dalt part inferior, de manera que no necessitem especificar, aquí és on vostè comença. Vostè comença en la línia 1 del seu PHP i treballar des d'allà. Així que aquí és com crearíem una funció anomenada hard_square. Pel que sembla, es necessita un paràmetre, que estic trucant $ x. Aquesta funció es complica només per il·lustrar diverses coses. Encara tenim valors de retorn. Estic usant un bucle for aquí. Però és bàsicament, el que això ascendeix a està a només $ x $ x vegades. El que en realitat estic fent és simplement afegint x 0 x vegades o $ X a zero $ x vegades. Però és efectivament exactament el mateix que multiplicar $ x vegades $ x. Encara puc tornar un valor, en aquest cas $ resultat, i he fet una funció en PHP. Heus aquí com vostè pot utilitzar-lo en el seu context. Així que potser estic dins d'algun arxiu PHP. Fixeu-vos en blau cal He fet servir les meves delimitadors PHP, claudàtor angular signe d'interrogació php. Entre els que es troben tots el PHP que vull escriure. Així que estic pel que sembla va a get-- Vaig a demanar a l'usuari que em donés un nombre, botiga que variables, botiga a la variable $ x, el que em van donar. Llavors em vaig a repetir hard_square d'aquest valor, i pel que sembla va per virar en una nova línia també, i més tard vaig a definir la funció de manera hard_square que quan faig la trucar a hard_square, que sap del que estic parlant. Ara, jo també podia fer alguna cosa com això. Aquesta xifra és lleugerament diferent. És gairebé exactament el mateix que el que hem vist abans, excepte que en lloc de dir simplement $ x allí com el paràmetre per hard_square, Estic dient $ x = 10. Així que aquest és un exemple de programació defensiva, guarda els teus programes contra els usuaris maliciosos. Aquesta és una manera de fer una mica d'error la comprovació que no hem fet realment tenen com a opció en C. Mai vaig poder especificar el valor per defecte d'alguna cosa. Sempre havíem de comprovar si el, per exemple, si fem una crida a GetString, era més adequada si immediatament després que comprovat que, ens vam registrar si la cadena que l'usuari ens va donar no és igual a null, perquè no volem començar treballar amb una cadena nul·la. Aquí, aquesta és una manera per protegir-se contra això. Si l'usuari no ens proporciona una mica d'alguna manera, ¿què farem? Bé, només haurem de dir el que sigui que no ens proporcionen, només anem a connectar 10 al seu lloc. Així que si no ens donen un valor, només ha d'utilitzar 10 per defecte. Així que aquí, Noto que estic fent Una crida a hard_square, però no hi ha ràpida per a l'usuari, oi? Només estic fent una trucada buida. Però la meva funció hard_square s'espera un paràmetre. Què és això va a imprimir? Es va a imprimir 100, oi? A causa de que l'usuari no ho va fer donar-me res. I així que només vaig a assumir que 10-- 10 és el valor per omissió. I pel que aquest seria imprimir el 100 en la seva pròpia línia. Arxius PHP no han de ser només un únic arxiu. Es poden combinar diversos arxius junts, de la mateixa manera que es pot en C. La forma ho vam fer en C era típicament per fer un #include per obtenir arxius de capçalera tirats a. Nosaltres no fem això en PHP. Fem una cosa anomenada require_once. I després hi ha aquest tot cosa, què és això __dir__? Això és només un especial variable o constant especial, realment, que s'especifica el seu directori actual. I pel que va a veure en el directori actual un arxiu anomenat cs50.php en aquest exemple aquí, i que seguirà aquest arxiu a la part superior del seu programa PHP, assumint que vostè posa la requereixen una vegada que la línia a la part superior del seu arxiu PHP. Així que PHP és útil sobretot, però no d'ús exclusiu, com un llenguatge per a la programació basada en la web. Això és realment la forma en què va arribar a ser. Però és un complet idioma, com hem vist. Hem vist gairebé totes les coses que pot fer que són similars a C, i es pot fer una diables d' molt més que això. Però perquè és un llenguatge complet i ens pot fer la programació de línia d'ordres en el mateix. Podem executar programes de línia d'ordres. Tot el que es requereix per executar una ordre programa de línia que està escrit en PHP és que vostè té un intèrpret de PHP. Així que és una espècie d'anàleg a tenir un compilador en el seu sistema si vols compilar el codi C per convertir-lo en arxius executables. Vostè necessita tenir un intèrpret de PHP el que existeix en el seu sistema perquè pugui interpretar els arxius PHP. Suposant que vostè fa, i en general aquest intèrpret es diu PHP, i és en general inclou amb la majoria descàrrega o instal lació de PHP que es pot obtenir en línia, i, certament, el nom de l'intèrpret PHP tenim en CS50, IDE. Tot el que fem és arxiu php tipus. I el que el seu programa de farem és que és va executar a través de l'intèrpret, és va ignorar tot el que és no en qüestió entre mark-- o, angle del suport signe d'interrogació php, els delimitadors PHP, i imprimir-lo, i va a interpretar i executar el codi dins de les seves delimitadors PHP. Així que anem a pop a IDE CS50 i fer una ullada a un parell d'arxius de PHP, corrent un parell d'arxius de PHP, en interfície de línia d'ordres de CS50 IDE. Així que aquí estem en IDE CS50, i m'he pres la llibertat d'obrir un arxiu anomenat hello1.php. I pel que sembla, el contingut d'aquest arxius són només els delimitadors PHP allà, i en el medi, echo ("hola, món"). Aquest és un programa PHP bastant simple. Jo només vaig a desplaçar-se cap avall a la meva finestra de terminal aquí, i jo vaig a escriure php hello1.php, prem enter. Hola món. Això és probablement el que vam ser esperant que ho faci, oi? Anem a pujar i prendre Una altra mirada a un programa. hello2.php. Més o menys el mateix, No hi ha molt a fer aquí. Aquest cop, però, vaig a incitar l'usuari per donar-me els seus noms. Estic usant aquesta funció readline nou. $ Name = readline. Aquest és el missatge "Quin és el seu nom?" Pel que sembla sóc la impressió que en la seva pròpia línia. I llavors, de manera que la línia de sota que serà el símbol on l'usuari pot introduir el seu nom. I llavors jo estic fent servir una mica de interpel·lació variable d'aquí a la línia 3 imprimir "Hola" i qualsevol que sigui l'usuari. Així que això és anàleg a dir, Hola, coma,% s si estàvem usant printf en C. Així que anirem i interpretar aquest programa. Així que de nou, vaig a desplaceu-vos cap avall a la meva finestra de terminal. hello2.php php. Quin és el teu nom? Doug. Hola, Doug. També tinc un altre arxiu anomenat hello3.php. Vaig a netejar el meu pantalla amb control L, i jo vaig a executar aquesta. Quin és el teu nom? Doug. Hola, Doug. Així que el comportament és idèntic al hello2.php, però per què és hello3.php? Bé, aquí està la diferència. En aquest cas, l'avís que en la línia 1 aquí, Tinc una cosa que no és entre els delimitadors de PHP. Només estic imprimint fora-- o jo acaba d'escriure, "Quin és el seu nom?" Quan l'intèrpret PHP veu això, no té idea de com interpretar-ho com PHP, i així que en comptes de fallar, que només va a escopir. Així que notar en la línia 3, la meva crida a readline, no hi ha símbol més. Estic realment va A-- quan l'intèrpret PHP veu això, que va a imprimir "Quin és el teu nom?" Llavors es veu, oh, bé, here's-- tota la resta serà interpretat com PHP, de manera que és per això que això funciona. Jo no tinc que demanarà necessàriament el A-- usuari dins de readline, Jo només puc tenir fora dels delimitadors de PHP i permetre que l'intèrpret simplement imprimir per a mi. Així que en realitat no és suficient tenir un conjunt de delimitadors de PHP en el seu programa. En realitat pot tenir diversos d'ells, obrir i tancar segons sigui necessari. Així que anem a fer una ullada en un parell de programes en IDE CS50 on il·lustrar aquesta idea de tenir diversos conjunts de PHP delimitat. OK, així que m'he obert un fitxer aquí es diu add1.php. I adonar-se del que està passant aquí. Igual que abans, tinc un només PHP conjunt de delimitadors. Vaig a imprimir el missatge: "Si us plau, dóna'm un nombre." Llavors em vaig a llegir una línia i emmagatzemar-lo en el $ num1 variable. Llavors em vaig a imprimir. Dóna'm un segon número. Llegir una línia des de l'usuari, emmagatzemar el que escriuen en a $ num2. Afegir junts i emmagatzemar aquesta resultar en una variable anomenada $ suma, i després imprimir, "El suma d'aquests dos nombres és, "i després interpel·lar allí la suma $ variable. Així que anem a executar aquest a través de l'intèrpret per confirmar que això és el que esperem. add1.php php. Si us plau, dóna'm un nombre, 3. Si us plau, dóna'm un segon número, 4. La suma d'aquests dos nombres és 7. Això és 3 més 4. D'ACORD? Així que res terriblement luxós allà. I ara anem a obrir add2.php. Aquí, tinc un parell de PHP delimitat conjunts allà, oi? Línies 1, 3-- línies 1 i 3 no tenen delimitadors de PHP. Així que quan l'intèrpret els veu, és només va escopir exactament el que he escrit allà. Així que aquí és on sóc fent tota la meva preguntar. En les línies 2 i 4, veiem el mateix $ Familiar? Php tipus de delimitadors, per la qual cosa aquestes dues línies són va a executar com PHP. I després a la línia 5, tinc aquest L'estrany aquí, oi? Aquest suport angular signe d'interrogació signe igual. Jo fins i tot el zoom una mica més lluny. Es pot veure que això és el que sóc parlant d'aquí, aquests $? =. Resulta que és tan comú que la raó per la qual obrim un conjunt de PHP delimitadors és imprimir un valor. I això és tot el que farem. Però hi ha fins i tot taquigrafia per això. $? = És la taquigrafia PHP per dir alguna cosa així com $? php echo la suma de num1 i num2. Així que això és només una altra taquigrafia per això. Així que si va executar aquest programa, php add2.php. Vaig zoom cap avall una mica. Si us plau, dóna'm un nombre 4. Si us plau, dóna'm un segon número. I com jo no em preocupo per tipus de dades en PHP, puc dir 4.8. La suma d'aquests dos nombres és 8,8. Aquesta funció es comporta més o menys exactament la mateixa que s'esperaria, tant be. I jo en tinc un més obert aquí anomenat dice.php. Prova aquest nou. Tinc un més anomenat aquí dice1.php, que també, veure, té aquesta pregunta parèntesi angular marcar la notació signe igual en aquest país, però noto que en aquest cas estic cridant a la funció rand, que com vostès podria esperar que genera un nombre aleatori. "Vostè rodar una", i que va calcular un nombre aleatori, mod 6 + 1. Així que em donarà el nombre en el rang d'1 a 6. Recordeu que mod 6 em donaria un nombre en l'interval de 0 a 5, però si estic simulant tirades de daus, que és el que estic fent aquí, No vull que aquests donats per passar de 0 a 5, vull daus que van d'1 a 6. I el que aquesta és una manera d'aconseguir em en el rang d'1 a 6. Estic fent això dues vegades. Així que pel que sembla estic rodant dos daus en aquest programa. Així que vaig a esborrar la meva pantalla, i faré php dice1.php. Vostè va rodar abril 1 i un 2. I si se m'acaba el programa de nou, vostè va rodar maig 1 i un 5. Així que cada vegada que s'executi el programa, M'estic posant diferents números, perquè cada vegada que ho faig Així que és començar de nou. Es generarà una nova un conjunt de nombres aleatoris per a mi. Així que si estem acostumats a executar programes de C, estem acostumats a escriure ./ la nom d'un programa, no? Això és el que hem fet tot dels nostres programes en C fins al moment. Podem fer això en PHP, així mitjançant l'addició d'una cosa que es diu un tinglado al cim del nostre arxiu PHP. Sé que és una mica una paraula ximple. És l'abreviatura d'explosió hash. Aquests són els dos primers caràcters allà. Recordeu que anomenem signe d'exclamació amb freqüència una explosió en la informàtica. També podria ser d'explosió agut. Hi ha un parell de maneres d'interpretar la mateixa. Però és bàsicament un tipus especial d'ordenar que l'intèrpret PHP entén com, oh, vull que permet executar aquest programa, que aparentment és / user / bin / php, que és en realitat on l'intèrpret PHP viu específicament en el nostre sistema. Així és-- el que passa aquí és l'intèrpret entén, oh, Pel que sembla, se suposa que he d'utilitzar en aquest programa s'executi aquest arxiu. I pel que li permet saltar-se el pas d'haver de dir php something.php. Hi ha una altra captura aquí, que és que si volem que els nostres programes a funcionarà com s'espera, es cal fer alguna cosa que es diu un canvi de permisos de fitxers. I anem a vaya-- i parlem una mica poc més canvis de permisos sobre arxius en el nostre vídeo en MVC, però n'hi ha prou amb dir que això és el que cal fer per tal de fer la seva arxius .php executable. Així que donem una ullada a això com nostre últim exemple més en CS50 IDE. Així que aquí a IDE Tinc dos arxius d'aquesta Directori de PHP que no sembla ser anomenada .php. Tinc una funció anomenada add-- Tinc un arxiu anomenat add3 i un arxiu anomenat dice2. Així que donem un ràpid buscar i obrir add3. I com es pot veure, al principi del meu arxiu tinc aquest tinglado, oi? Aquest punt de hash signe d'exclamació. Ara, vostè també pot ser que notar que per alguna raó, Jo no tinc cap sintaxi destacant més, i això és el que he al·ludit abans, que era que si no dic el meu arxiu .php, no tinc el benefici de ressaltat de sintaxi ja. Aquest fitxer només es diu add3. Perquè jo pugui executar més tard amb ./ add3 i no ./ add3.php. Així que la reason-- encara bé, segueix sent vàlida PHP, però no és la sintaxi ressaltada, perquè aquest arxiu no es diu something.php. Aquesta és l'única diferència real aquí, més el tinglado. Així que anem a veure el que passa quan Tracte d'executar aquest programa. ./ Add3, igual que ho faria amb C. Bash. ./ Permís add3 negar. Això és el que vas per veure si s'oblida utilitzar la comanda chmod per canviar els permisos de l'arxiu. Doncs resulta que, PHP regulars arxius no poden simplement ser executats. Ells poden ser interpretats, però estem fer alguna cosa una mica diferent aquí. Estem executar-lo. I així que he de afegir el permís de l'execució, chmod a + x per add3. Llavors puc dir ./ add3. Si us plau, dóna'm un nombre. 5, 6. La suma d'aquests dos nombres és 11. De la mateixa manera, ja he chmod dice2, de manera que només pot escriure ./ dice2, vostè va rodar un 1 i un 1, que laminat en un 5 i un 4, i així successivament. Així que això és més o menys la idea d'una sintaxi de PHP, oi? Hi ha molt per aconseguir a través, ho sé. Però és d'esperar que hi hagi vist ara que PHP en realitat no és tan diferent de C i realment ens dóna la capacitat prendre les coses a un nivell superior o dos. Nosaltres realment no hem de preocupar massa sobre-- no ho fem de veritat ha de preocupar massa sobre els detalls de baix nivell que nosaltres havia de preocupar amb C, oi? Podem centrar-nos en la més alta coses de nivell que PHP ens permet fer i donem per fet que va a treballar per a nosaltres. Pel que ens dóna la possibilitat ara, la transició de C a PHP, perquè els programes que són molt més complexa i potser molt més robust. Així que espero que es diverteixin de treball amb PHP, i estic Doug Lloyd. Això és CS50.