DOUG LLOYD: Dus het ons gedoen 'n baie werk in C, en C is 'n baie cool taal, want dit gee jou die vermoë om werklik te duik lae vlak in jou programme. Ons kry om dinge te doen soos regtig minuut manipuleer individuele grepe van die geheue. Onthou dat baie wenke ons toelaat dat buigsaamheid. Maar moet ons altyd het wat fyn graan vlak van detail in ons programme? Waarskynlik nie, reg? En as ons gaan hê 'n trade-off tussen ' kan regtig nie, regtig minuut dinge en baie, baie groot dinge wat ons nie hoef te dink oor, het ons nie te implementeer hierdie werklik groot idees as hulle reeds gebou in vir ons, algemeen vir die bou van 'n groot programme of groot projekte, ons is waarskynlik gaan om te dwaal op die kant van meer tale dinge gebou in vir ons, in plaas van om die lae-vlak dinge. En dit is waar PHP werklik kom in. Nou, een van die redes dat ons leer PHP in CS50 is dat dit swaar geïnspireer deur C. En in werklikheid, in my mening, daar eintlik twee stamvader tale wat is baie algemeen deesdae. C en LISP. En hulle is stamvader tale want elke ander moderne programmeertaal taal wat ontwikkel Sedertdien is geïnspireer deur een of die ander sintakties. PHP is baie soortgelyk sintakties C, terwyl tale soos Skema, byvoorbeeld, wat jy dalk gehoor het van, is swaar geïnspireer deur 'n taal genoem LISP, wat is 'n ouer taal. So die rede waarom ons leer PHP in CS50 is dat, deur te weet C as fundamenteel as jy doen op hierdie punt, optel PHP, waarin jy die gee vermoë om veel hoër vlak dinge te doen as C nie, is nie dat baie van 'n hindernis, want jy het reeds die basiese idee van die sintaksis. C is om vir bykans 45 jaar op hierdie punt. PHP is om vir ongeveer 20 jaar. En in dié 25 jaar tussen, programmeerders bepaal dat hulle sou veel eerder 'n hoër vlak vermoëns, en die foute en stryd van die 20 jaar tussen gelei tot PHP en ander moderne tale. PHP is 'n groot keuse van taal vir sagteware dat allow-- vir sagteware that-- waar jy nodig het om dinge te doen wat in C is eintlik ingewikkeld. So byvoorbeeld, werk met stringe in C is baie ingewikkeld, want soos ons dit ken, stringe in C is regtig net skikkings van karakters. Dit is nie 'n ingeboude datatipe. Of dalk meer fundamenteel, iets wat ons het nie eens dek in C, Wat gebeur as jy hoef te doen sommige rekenaarnetwerke? Alles reg? C het die vermoë om dit te doen nie, maar dit is so arcane en so moeilik om werklik te doen. Sou dit nie lekker wees as die taal het 'n ingeboude, maklike manier te implementeer netwerk? En PHP is 'n taal wat dit maak, of fasiliteer dat nogal 'n bietjie meer. Soos ek gesê het, PHP is baie swaar geïnspireerde deur C. Die sintaksis is baie soortgelyk. En so moet dit hopelik die oorgang van die een na die ander 'n bietjie sagter as sommige ander tale kan wees. Om te begin skryf PHP, net oop 'n lêer met die .php lêer uitbreiding. Tegnies is dit nie werklik nodig, maar as jy dinge soos sintaksis wil beklemtoon in IDE, so dat die tipe name, of veranderlike name, funksies, jy weet, die sleutelwoorde van die taal uitgelig in 'n spesifieke kleur, jy in die algemeen wil jou lêers te noem met 'n bepaalde lêer uitbreiding. So het ons ons naam met 'n lêer .php uitbreiding, maar dan ook met PHP, al die PHP-kode skryf ons in daardie lêer moet ingesluit in hierdie PHP delimiters wat ons sien hier op die skerm. Hoekhakie? Php om te begin. Dan skryf ons almal van ons PHP kode wat ons wil tussen in. En toe ? hoek bracket te sluit. As ons dit nie doen nie, dan wat gaan gebeur? Dit gaan nie te crash. Dit gaan nie om regtig ruïneer ons program. Maar dit is nie van plan om die effek wat ons wil hê. Wat gaan gebeur, regtig, is dat wanneer ons probeer en hardloop hierdie program nie alles tussen diegene delimiters gaan woordeliks uitgedruk word. Dit gaan nie om die kode eintlik voer, dit gaan net druk dit woordeliks uit. Nou hoekom is dit die geval? So C is wat bekend staan as 'n saamgestel taal. Is jy waarskynlik vertroud met die stap van die maak van jou programme, draai die .c lêers en .H lêers in 'n enkele uitvoerbare met make, in die besonder die gebruik van Klang as ons samesteller. PHP, al is, nie hierdie ekwivalent. PHP is wat 'n beroep geïnterpreteer taal. En wat beteken dit? Wel, dit beteken dat ons nie hoef te omskep ons bron-kode te nulle en ene vooraf. Inteendeel, daar is 'n program, wat ook genoem PHP, wat PHP en verstaan kan soort van dit op die vlieg. Dit is nie regtig presies akkuraat, maar dit is 'n goeie analogie van wat gebeur. Dit is die uitleg van die nulle en ene op die vlieg. En so as dit nie weet hoe om iets te verwerk, as dit nie weet hoe om proses PHP, het jy waarskynlik wou dat die teks daar te stel, reg? Jy wou waarskynlik die kode in te sit daar, selfs al is dit nie tussen PHP-- die PHP delimiters. But-- so dit gaan nie om dit vir jou te verwyder, dit is net gaan om te basies weggooi nie. So dit gaan druk dit uit die skerm. Dit lyk asof dit 'n slegte ding, maar eintlik is dit gaan 'n werklik goeie ding, soos ons sal sien wanneer ons praat oor PHP web ontwikkeling, want dit beteken ons kan deurspek PHP en HTML. Ons kan hulle saam gebruik om skep 'n meer dinamiese webblad. Maar meer oor dit in die video op PHP web ontwikkeling. So, wat is die sintaksis van PHP? Dit is wat hierdie video is alles oor. Kom ons praat oor dit. So om te begin, veranderlikes. PHP veranderlikes bestaan ​​nie. Daar is net twee groot verskille van C. Die eerste is dat daar nee-tipe specific. Ons hoef nie te int sê char, vlot, al daardie dinge. Ons hoef nie te wat meer doen nie. PHP is 'n moderne taal. Dit kan uit te vind wat jy probeer om te doen of 'n beste raai oor wat jy probeer om te doen. So dis nogal nice. Die ander ding is dat al veranderlike name moet begin met 'n dollar teken. Dit is net iets om gewoond te raak aan. Dit is 'n bietjie vreemd, want dit is so dat PHP kan verstaan Wat is 'n veranderlike is en wat nie. So elke veranderlike naam begin met 'n dollar teken. So in C ons dalk iets te sê soos hierdie, int x = 54. Ons het nie meer te doen in PHP. Ons kan net sê $ x = 54. En ons kan sê, byvoorbeeld, in C, as ons pond ingesluit die CS50 .H header lêer, kan ons sê string frase = "Dit is CS50." Ons hoef nie te doen wat in PHP, al is. Ons kan net sê $ frase = "Dit is CS50." En in die feit, string is nou 'n ingeboude datatipe in PHP, of eerder PHP verstaan wat 'n string is. Dit is apart van 'n verskeidenheid karakters soos dit is in C. Al jou gunsteling voorwaardelike verklarings van C is nog beskikbaar vir jou om te gebruik. So geen groot oorgang daar. Ons kan say-- ons kan hê indien state soos hierdie. As $ y 43 of $ z = 15. So dit is redelik eenvoudig. Ons kan indien en anders. Ons kan indien en anders as het. En let iets hier mooi mooi, en dit is 'n soort van een van daardie voordele van PHP versus C, kennisgewing Watter funksie Ons is nie hier gebruik nie? Ons gebruik == te vergelyk 'n veranderlike naam $, om 'n string. Ons kon dit nie doen nie in C, reg? Ons het 'n funksie genoem gebruik StrComp of StrEndComp of enige van sy verwante neefs. En so sien ons reeds hierdie voordele. Ons het nie 'om iets te doen as dom of dalk unintuitive as 'n funksie genoem noem StrComp as ek wil net om te toets of 'n waarde is gelyk aan 'n string. Ek kon net gebruik gelyk gelykes, soos ek kon enigiets anders te doen. So daar is 'n voordeel. Soms, by the way, kan jy sien anders as as een woord, elseif. En dit is OK in PHP as well. So soms jy kan sien. Dit is nie 'n tikfout. PHP verstaan ​​eintlik elseif. Ek weet nie hoekom hulle besluit om te implementeer dat maar soos ons het baie keer gesien in ons videos so ver, ons programmeerders is mal daaroor as ons kan dinge vinnig te doen, so om ontslae te raak van daardie ruimte is blykbaar 'n groot voordeel. So dis nou as en elseif. Ons het ook die drieledige operateur, Onthou vraagteken kolon, vir baie kort vorm indien anders of voorwaardelike vertakking. En blykbaar, in hierdie, wat ons probeer om hier te doen is toewys die veranderlike $ brief waar of vals is, afhangende van of $ var is 'n alfabetletter. So dit is redelik soortgelyk aan isalpha dat ons vertroud is met van C. Dit is 'n soort van die ekwivalent in PHP. Die funksie is blykbaar genoem ctype_alpha, maar dit is hoe ons dit doen in PHP. So dit alles gaan wees is, as $ var is 'n brief, $ brief is waar. As $ var is nie 'n brief, $ brief is onwaar. Ons het ook 'n skakelaar state steeds. Ons onthou dié van C as well. Op die heel boonste daar, dit is hoe ons dit doen iets soos get int of kry string. So PHP het dat gebou in. Ons het nie die CS50 biblioteek nodig nie. Ons kan net gebruik die funksie read line. Wat dit gaan doen is om druk uit die boodskap, "Jou staat, asseblief, "en dan flikkerende vinnige wag vir die gebruiker om insette sommige inligting. Nou sien wat anders ons kan doen met skakelaar. As jy dit het gebruik jy kan daardie skakelaar onthou is pretty much beperk tot heelgetalle en karakters, maar nou kan ons snare te gebruik. En in die feit, die skakelaar verklaring in PHP is nogal 'n bietjie meer buigsaam as sy neef van C. Loops. Net soos conditionals, al jou ou gunstelinge is nog steeds daar. Ons het terwyl loops wat tel 1-100 in hierdie geval. Ons het te doen terwyl loops wat tel 1-100, en ons het vir sirkelroetes wat tel 1-100. Sodat daar geen groot sprong daar. Die sintaksis is redelik veel presies dieselfde, behalwe ons nou met behulp van dollar teken veranderlike plaas verklaar heelgetal veranderlikes of iets soos dit vir ons tellers. Hier is waar dinge 'n baie beter as C, though. Skikkings. So onthou toe ons praat oor C, ten einde vir ons om te groei en krimp stelle van inligting, ons nodig het om te sorteer van wanbetaling om hierdie idee van 'n geskakelde lys, omdat C skikkings is vasgestel in grootte. Ons kon hulle nie krimp. Ons kon hulle nie te laat groei. Ons moes geheue hertoeken en al hierdie waansin of gebruik geskakelde lyste, wat neem nogal 'n bietjie meer ruimte. Maar in PHP, skikkings is meer nie in grootte vasgestel. Hulle kan groei en hulle kan krimp. So weer, hierdie 20 jaar wat bestaan tussen die eerste vrystelling van C en die eerste release PHP, het ons besluit dat, jy weet, Dit sou werklik groot wees as ons kan dit doen. En so het ons geïmplementeer hierdie. So PHP skikkings is nie in vaste grootte, en omdat PHP nie regtig het programmeerder front-gesig staar opvattings van tipes, kan ons datatipes meng in ons skikkings ook. Sodat ons nie eens te gebruik almal heelgetalle of al swaai punte, kan ons 'n mengsel van almal verskillende soorte in 'n enkele skikking. Verklaar 'n skikking is redelik eenvoudig. Dit is net soos enige ander veranderlike. $ nume = array (1, 2, 3, 4), verskeidenheid om 'n funksie dit is gebou in PHP dat sal 'n verskeidenheid vir jou te skep. Dit skep 'n verskeidenheid van vier waardes, getalle in hierdie geval, die sogenaamde $ nume. En daar is meer as een manier om dit te doen. En ons gaan sien dit baie in PHP. PHP is ontwikkel deur baie verskillende mense en groei en groei en groei. Daar is gewoonlik nie net twee of drie maniere om iets te doen in PHP, daar is gewoonlik soos 10 of 20. Hier is net nog 'n algemene manier om 'n skikking te verklaar. $ nume = vierkante bracket 1, 2, 3, 4. So dit is soort van soortgelyk aan C se hoek br-- krullerige brace notasie, eerder. $ - of dit sou int nume vierkant hakies gelyk krullerige brace 1, 2, 3, 4. In PHP dit is $ nume = vierkante hakies 1, 2, 3, 4. Maar beide van hierdie voorbeelde hier gee my 'n verskeidenheid van vier in hierdie geval heelgetalle. Wat gebeur as ek iets wil ryg op nou? Wel, ek kan net sê $ nume 4, wat weer, ons nog steeds tel van 0 hier in PHP, sou die vyfde wees element van die skikking. Ek kan net sê dat. Ek is nie van plan om 'n seg ly skuld, want my skikking is net gaan om te groei om te akkommodeer nie. Dit is redelik mooi, reg? En in die feit, ek weet nie eens nodig om spesifiseer waar ek wil om dit te sit. Ek kan dit en net net sê ryg dit reg op die einde, of ek kon selfs net sê $ nume 20 of 1000. Dit maak nie regtig saak nie. Dit is nog steeds net gaan om ryg dit reg op die einde. So ek kan groei, en ons is as-- gaan dit nie te dek in hier, maar ek kan Splice of strook elemente uit die skikking asook, en die skikking sal krimp om te akkommodeer wat nou ontbreek of leë ruimte. Daar is nog 'n manier om te ryg iets op 'n skikking, wat is 'n funksie genoem array_push. So weer, net die idee van ' kan doen dinge baie verskillende maniere. So het ons gesien drie verskillende maniere nou na 'n ander element ryg op 'n skikking. So dit voeg 'n ander element tot aan die einde van die $ nume skikking. En ons kan meng ons data tipes. So kon ek 'n verskeidenheid van nie 1, 2, 3, 4, maar 1, waar, 3, 4, waar ware is 'n Boole, en dan as ek wil om te ryg op 'n ander element dat die verskeidenheid, miskien 'n string, die string "vyf," Ek kon dit doen. En nou is my array sou 1, waar, 3, 4, vyf. Die woord vyf nie die heelgetal 5. So 'n baie buigsaamheid daar. Die buigsaamheid kry nog beter, al is, want PHP het ondersteuning vir iets genoem 'n assosiatiewe skikking. En ons soort van vaagweg gepraat oor assosiatiewe skikkings in C in die konteks van hash tabelle, omdat wat assosiatiewe skikkings is regtig oor maak sleutel waarde pair afbeeldings. En in hierdie geval, die keys-- as ons is vertroud met skikkings van C, die sleutels is indekssyfers. 0, 1, 2, 3. En die waardes is wat ons vind dat array 0, 1 verskeidenheid, array 2, en so aan. So het die sleutels is indekse, en die waardes is wat in daardie reeks plek, wat deur die indeks. Maar in PHP, het ons nie om dit te doen idee van array 0, 1 verskeidenheid, array 2 meer. Ons kan nou die werklike woorde om sleutels kaart waardes. En so kan ek iets soos hierdie te sê. Ek kon 'n verskeidenheid te skep met behulp van die vierkante bracket sintaksis soos volg. $ pizzas = vierkante bracket "kaas" en dan hierdie soort van dubbel pyl notasie, 8,99, "pepperoni," arrow 10.99-- 9,99, en so aan. En ja, wat gaan hier aan? Wat ek eintlik? Ek skep sleutel waarde pair afbeeldings. So in plaas van sê, byvoorbeeld, pizzas 0, stukke 1, pizzas 2, Ek kan nou sê pizzas kaas, pizzas pepperoni, en verwys na die waardes wat verband hou met hulle. So hier is ons sleutels in die groen. Kaas, pepperoni, groente, buffels hoender. Hier is die pyl wat maak hierdie sleutel waarde pair kartering. En dan hier is die waardes op daardie verskeidenheid plek. So dit is soos om te sê verskeidenheid 0 gelyk 8,99. Die sleutel is 0. Die waarde is 8,99. Ek kan nou sê verskeidenheid kaas, of in hierdie geval pizzas kaas, kaas is die sleutel, en wat ek vind op pizzas kaas is 8,99. Dit is die waarde wat ek daar vind. So ek kan sê dinge wil. $ pizza kaas = 7,99. Sê Ek het 'n verkoop. Ek wil dis-- Ek wil om te daal die prys van die kaas pizza. Of ek kan die groente te gebruik pizza as deel van 'n toestand, of ek kan 'n nuwe element te voeg aan my skikking, net soos ek voorheen kon doen nie. Ek kan 'n nuwe element te voeg tot hierdie assosiatiewe skikking met die sleutel "spek" en die waarde 13,49. Maar hierdie soort van 'n probleem stel, As jy dink oor dit vir 'n tweede. Hoe sou ons Itereer deur middel van hierdie verskeidenheid? Reg? In C, sou ons net 'n lus, tipies, wat sou loop van 0 tot die grootte van die skikking minus 1. Die skikking het n elemente by die geldig indekse is 0 tot N minus 1. Sodat ons kan gebruik om 'n lus vir die om stap vir stap deur elke enkele element. Maar dit is nie regtig die geval nie, reg? Nou waar ons sleutel waarde pair afbeeldings waar die sleutels is woorde, hoe kan ons Itereer oor al die woorde? Wel, gelukkig, PHP het 'n manier om te gaan met hierdie, en so sal ons terug spring om lusse vir 'n tweede om 'n vierde soort lus stel dat bestaan ​​in PHP genoem foreach lus. En wat 'n lus foreach doen, is dit is basies dieselfde idee. Jy kan dit gebruik vir enige soort skikking. Maar dit is basies die dieselfde idee as 'n lus, behalwe plaas van die gebruik indeks nommers, jy net het die vreemde sintaksis waar jy elke enkele element noem 'n naam vir die doeleindes van hierdie lus. So in hierdie geval, foreach ($ array as $ sleutel). Basies, as daardie kommentaar notas, binnekant van die foreach lus, dit gaan om te gaan oor elke enkele element van $ skikking, wat is tipies gaan 'n assosiatiewe skikking wees, maar kan regtig enige soort verskeidenheid wees wat jy wil in PHP. En elke keer dat 'n lus vir die jy dalk het gesê $ array vierkantige hakies $ i, kan jy net sê $ sleutel. Sodat $ sleutel word 'n alias vir elke indeks van jou PHP assosiatiewe skikking, en so kan jy dit gebruik soos dit. So byvoorbeeld, het ons nou het ons pizzas skikking. Ek het soort van ingesteek dit in die hoek is daar sodat ons dit kan gebruik om 'n vinnige voorbeeld te doen. As ek sê foreach ($ pizzas as $ pizza), wel, wat gebeur? Wel, ek gaan Itereer deur elke enkele element van die skikking $ pizzas, en sodoende, ek gaan om te bel elke element, wanneer ek binne van die liggaam van daardie lus, $ pizza. So dit is soort van 'n stand-in, onthou, dat $ pizza is 'n stand-in om te sê $ pizzas vierkantige hakies $ i as ons met behulp van 'n lus vir die, waar ons kon gaan van $ i = 0 om, in hierdie geval, $ i = 3. As ons nie die sleutel waarde pare gehad het hier, sal hierdie element 0, 1, 2, 3 wees, en ons wil 'n gebruik vir lus om te gaan $ pizzas 0, $ pizzas 1, $ 2 pizzas, $ pizzas 3. So nou net $ pizza is vervang vir die individu sleutel. So, wat gaan dit om uit te druk? Ek is uit te druk $ pizza. Wat gaan ek at-- vind as ek druk $ pizzas, $ i? Reg? As ek gaan uit te druk die ith element van pizzas, wat gaan ek om te druk? Ek gaan die druk van die waardes op die plek, reg? Soos as ons doen dit in die konteks van C, ons gewoonlik nie gebruik maak van ons Iterator veranderlike, int i = 0, i is minder as 3, i ++, uit te druk 0, 1, 2, 3. Ons druk uit array 0, array 1, 2 array, verskeidenheid 3. En ja, wat die druk uit is dit. Dit is die lys van die pryse. 8,99, 9,99, 10,99, 11,99. Nou 'n vinnige nota hier. A foreach lus nie noodwendig druk dinge in orde is. Dit is nie gewaarborg nie. Dit maak gewoonlik. Dit is gewoonlik gebaseer op die volgorde watter elemente word bygevoeg om die skikking, so net dra dit in gedagte. Dit mag dalk nie in orde is. Maar 'n foreach lus sal Itereer oor elke enkele element van die skikking in die vraag. In hierdie geval, weer, wat opgestel is $ pizzas. Ek kan die sintaksis te verander, al is, as Ek wil beide die sleutel en die waarde daarvan. In plaas van sê $ pizzas as $ pizza, kan ek sê. En as jy kyk na wat ek uitgelig in groen hier, dit lyk soos 'n sleutel waarde pair kartering. En so as you-- selfs as jy is nie heeltemal seker wat dit gaan doen, jy kan seker raai dat $ bolaag gaan om die sleutel in hierdie geval wees en $ prys gaan om die waarde te wees. So ek vervang nou elke element van $ pizzas as 'n belangrike waarde pair, en nou kan ek verwys na die sleutel en die waarde, wat kan handig te pas, byvoorbeeld soos volg. "'N hele" - dit is 'n baie druk gaan here-- "'n hele" bolaag "pizza kos $" prys, en dan Ek druk 'n tydperk en 'n backslash n. So nou, kennisgewing ek weer toegang tot 'n belangrike, $ bolaag, en 'n waarde $ prys. So kan jy dink wat dit gaan uit te druk? Daar is 'n baie druk state, maar daar is net een backslash n, so dit gaan om iets op te druk 'n entire-- op 'n enkele lyn van die kode. As ek kan verwys na die sleutel en die waarde, dan nou, in plaas van net om te kan om die druk van die pryse, Ek kan druk iets soos hierdie. "'N Hele kaas pizza kos $ 8,99." En nou is ek met al die keys-- kaas, pepperoni, groente, buffels chicken-- en die waardes. 8,99, 9,99, 10,99, 11,99 So dit is net 'n ander manier 'n foreach lus te doen dat in plaas van net gee jou toegang tot die waardes, dit gee net you-- dit gee jou toegang tot die sleutels en die waardes. So uit te druk inligting. Ek het dit reeds gedoen 'n paar verskillende maniere, kan jy opgemerk. Die twee funksies wat ons het hoofsaaklik gesien is druk en eggo. En pretty much alle praktiese doeleindes, hulle is presies dieselfde. They're-- daar is 'n baie subtiele verskil dit is nie eens die moeite werd om in nie, maar basies oral jy kan druk gebruik kan jy waarskynlik gebruik eggo as well. En dit is nie die enigste twee. PHP het 'n baie verskillende maniere om dinge uit te druk, en dit het ook maniere om te integreer veranderlikes in die middel van string. So onthou uit C, het jy onthou wat funksie ons kan gebruik om veranderlikes te vervang in die dinge wat ons wil uit te druk? Jy gebruik waarskynlik hierdie funksioneer nogal 'n baie. printf, reg? So dit is wat ons voor die binnekant het van die konteks van ons foreach lus. Ons het hierdie vyf aparte druk state, want dit was die enigste manier wat ek regtig geweet teen die tyd hoe om uit te druk boodskappe. Ek het nie geweet hoe om die integreer veranderlike $ bolaag in my PHP-kode. Wel, as ek 'n wilde raaiskoot net geneem, printf, sou dit eintlik gewerk het. printf is 'n funksie wat ek kan gebruik in PHP, net soos ek dit kan gebruik in C. En so iets soos hierdie, printf, weer, ons is vertroud met dit. Die eerste% s vervang met die waarde van $ bolaag. Die tweede% s vervang met die waarde van $ prys. En so ek interpellating, wat net 'n fancy manier sê ek steek die veranderlikes in die plek. So ek steek in $ bolaag waar die rooi% s is en $ prys waar die blou% s is, en dan sal ek die boodskap kry, "'N Hele kaas pizza kos $ 8,99." Nie die enigste manier wat ek dit kan doen, al is. Miskien sou ek wil hierdie metode te gebruik. Dit is eintlik wat is die mees algemene genoem veranderlike interpellatie. Ek kan 'n eggo gebruik. Ek kon 'n afdruk te gebruik, soos ons sal sien. Maar wat hier gebeur? Eerste van alles, moet ek ontsnap die dollar teken. Want onthou, wanneer ons eintlik was druk die pryse van die pizzas, Ek was eintlik hulle opmaak as monetêre syfers met 'n dollar teken. Maar ons gebruik dollar tekens ook veranderlike name verteenwoordig in PHP, en in die besonder wanneer ek die gebruik van hierdie metode van die krullerige brace veranderlike interpellatie metode, moet ek my dollar teken ontsnap sodat dit nie dink ek praat oor 'n veranderlike. Dit gaan eintlik, letterlik druk van 'n dollar teken. So soort van analogize dit wat jy sien aan die einde daar. Dit maak nie eintlik Druk backslash n, reg? Dit druk uit 'n nuwe lyn karakter. Dit is-- dit gaan nie om Druk backslash dollar teken dit gaan net buite te druk 'n dollar teken karakter. Dieselfde idee. Ontsnap rye, wat hierdie dinge genoem word. Maar let dat ek nie doen enige soort van% s substitusies, Ek is net letterlik steek in hierdie veranderlikes. En so in this-- wat hier sal gebeur is dat die waarde van $ topping-- weer net om met dit wat ons het is praat oor so far-- kaas sou kry ingeprop daar. En $ prys sou wees wat waarde is op pizzas, vierkantige hakies, kaas, wat was 8,99. En so sal dit ook uit te druk "'N Hele kaas pizza kos $ 8,99." En soos ek gesê het, ek kon gebruik druk hier plaas van eggo, en die funksie wees pretty much presies dieselfde. Dit sou dieselfde ding druk. Daar is nog 'n manier om dit te doen, en dit is nog 'n voordeel PHP werk met snare. Ons kan string aaneenskakellling doen. Ons kan dit doen in C ook met behulp van 'n funksie genoem strcat, maar weer, moes ons noem aparte funksies. Dit was hierdie hele gemors te doen. Ons moes pond-sluit string.h. Dit was 'n produksie, reg? Maar nou kan ek net hierdie dot operateur snare saam koppel. So ek concatenating "'n hele" en dan ongeag die waarde van $ bolaag is, en dan nog string, "pizza koste $" en dan concatenating ookal die waarde van $ prys is, en dan aan die einde Ek is rygwerk op tydperk backslash n. En so sou dit ook druk "'n hele" - weer, As ons praat oor die eerste element van daardie pizzas array-- "'N Hele kaas pizza kos $ 8,99." Tydperk, backslash N, weer, met die $ bolaag en $ prys plaasvervangende vir dit wat ons in ons foreach het gespesifiseer lus as die sleutel waarde pair kartering. PHP kan funksies kan hanteer. Funksies was soort van integrale deel C, soos ons gesien het. Soos veranderlikes, het ons nie nodig om spesifiseer die terugkeer tipe van die funksie, omdat dit nie regtig saak nie. En ons het nie spesifiseer die data tipes enige parameters, omdat hulle nie regtig saak, soos ons gesien het in PHP. Elke funksie bekendgestel met die funksie navraag. Dit is hoe ons aan te dui dat die PHP wat ons praat, is 'n funksie. En ons hoef nie te hanteer belangrikste glad omdat die tolk, die PHP tolk, werk van bo tot onder, ongeag. As dit sien jy kan maak 'n funksie oproep, sal dit gaan die funksie oproep te vind, selfs as dit later kom. Maar dit gaan om te lees van bo na bodem, sodat ons nie nodig het om te spesifiseer, hier is waar jy begin. Jy begin op die lyn 1 van jou PHP en werk af van daar af. So hier is hoe ons sou skep 'n funksie genoem hard_square. Dit neem blykbaar een parameter, wat ek vra $ x. Hierdie funksie is net ingewikkeld verskeie dinge te illustreer. Ons het nog terugkeer waardes. Ek het 'n lus vir die hier. Maar dit is basies net, wat hierdie neerkom, is net $ x keer $ x. Wat ek eintlik doen, is voeg net x 0 x keer of $ x nul $ x keer. Maar dit is presies die effektief dieselfde as $ x keer $ x vermenigvuldig. Ek kan nog steeds 'n waarde terugkeer, in hierdie geval $ gevolg, en ek het 'n funksie in PHP gemaak. Hier is hoe jy dit kan gebruik in konteks. So miskien is ek binne 'n paar van die PHP-lêer. Kennis blou daar dat Ek het my PHP delimiters gebruik, hoekhakie vraagteken PHP. In tussen diegene is al die PHP wat ek wil skryf. So ek glo gaan get-- Ek gaan die gebruiker gevra Gee my 'n nommer, winkel wat veranderlike, winkel in daardie veranderlike $ x, alles wat hulle vir my gegee het. Toe ek gaan eggo hard_square van daardie waarde, en blykbaar gaan om te ryg op 'n nuwe reël sowel, en dan later op sal ek definieer die funksie so hard_square dat wanneer ek die bel om hard_square, dit weet wat ek praat. Nou, ek kan dit ook doen iets soos hierdie. Dit is effens anders. Dit is presies die byna dieselfde as wat ons voor sien, behalwe in plaas van sê net $ x daar as die parameter om hard_square, Ek sê $ x = 10. So, dit is 'n voorbeeld van defensiewe programmeringstegnieke, bewaking van jou programme teen kwaadwillige gebruikers. Dit is een manier om 'n paar foute te doen nagaan dat ons het nie regtig het as 'n opsie in C. Ons kon nooit spesifiseer die standaard waarde van iets. Ons het altyd om te kyk of die, byvoorbeeld, As ons 'n oproep om GetString, was dit mees behoorlike as onmiddellik na ons bewys dat ons nagegaan of die string wat die gebruiker aan ons gegee het is nie gelyk aan nul omdat ons nie wil begin werk met 'n nul string. Hier is dit 'n manier om te waak teen daardie. As die gebruiker verskaf nie vir ons iets een of ander manier, wat gaan ons doen? Wel, ons sal net sê wat hulle het nie aan ons verskaf, ons net gaan om te prop in 10 plaas. So as hulle nie gee ons 'n waarde, net gebruik 10 by verstek. En so hier, sien dat ek maak 'n oproep tot hard_square, maar daar is geen vinnige aan die gebruiker, reg? Ek is net die maak van 'n leë oproep. Maar my funksie hard_square verwag 'n parameter. Wat gaan dit om uit te druk? Dit gaan om uit te druk 100, reg? Omdat die gebruiker het nie gee my nie. En so is ek net gaan om te aanvaar dat 10-- 10 is die standaard waarde. En so sou druk uit 100 op sy eie lyn. PHP lêers hoef nie net 'n enkele lêer. Jy kan veelvuldige lêers saam te kombineer, net soos wat jy kan in C. Die manier ons het dit in C was tipies 'n doen include te kry header lêers getrek in. Ons doen dit nie in PHP. Ons doen iets genoem require_once. En dan is daar die hele ding, wat is hierdie __dir__? Dit is net 'n spesiale veranderlike, of spesiale konstante, regtig, wat spesifiseer watter jou huidige gids is. En so gaan dit om te kyk in jou huidige gids vir 'n lêer genaamd cs50.php hier hierdie voorbeeld en dit gaan om die lêer te hou aan die bokant van jou PHP program, die veronderstelling dat jy die benodig keer die lyn by die top van jou PHP-lêer. So PHP word hoofsaaklik gebruik, maar nie uitsluitlik gebruik word, as 'n taal vir web-gebaseerde programme. Dit is regtig hoe dit gekom het om te wees. Maar dit is 'n volle taal, soos ons gesien het. Ons het pretty much al die dinge gesien dat dit kan doen wat soortgelyk is aan C is, en dit kan 'n heck van doen 'n baie meer as dit. Maar, want dit is 'n volle taal en ons kan command line program doen dit. Ons kan command line programme te hardloop. Al wat nodig is om 'n opdrag uit te voer line program wat geskryf in PHP is dat jy 'n PHP tolk. So dit is soort van analoog aan 'n samesteller op jou stelsel as jy wil om jou C-kode saamstel om dit te omskep in uitvoerbare lêers. Jy moet 'n PHP tolk wat bestaan ​​op jou stelsel sodat jy kan PHP lêers interpreteer. Veronderstel jy doen, en gewoonlik hierdie tolk genoem PHP, en dit is gewoonlik saam met die meeste downloads of installasies van PHP dat jy aanlyn kan kry, en beslis die naam van die PHP tolk ons het in CS50, IDE. Al wat jy doen is tik php lêer. En wat jou program se gaan doen, is dit gaan om te loop deur die tolk, dit is gaan alles wat te ignoreer nie tussen vraag mark-- of, hoek bracket vraagteken php, die PHP delimiters, en druk dit uit, en dit sal interpreteer en voer die kode binnekant van jou PHP delimiters. So laat pop aan CS50 IDE en 'n blik op 'n paar van PHP lêers, bestuur van 'n paar van die PHP lêers in command line interface van CS50 IDE. So hier is ons in CS50 IDE, en ek het die vryheid geneem van die opening van 'n lêer genaamd hello1.php. En blykbaar, die inhoud van hierdie lêer is net die PHP delimiters daar en tussen in, eggo ("hello, wêreld"). Dit is 'n redelik eenvoudige PHP program. Ek gaan net om af te beweeg hier my terminale venster, en ek gaan php tik hello1.php, druk enter. Hello Wêreld. Dit is waarskynlik wat ons was verwag om dit te doen nie, reg? Kom ons gaan en neem 'n ander kyk na 'n program. hello2.php. Pretty much dieselfde ding, nie 'n baie gaan op hier. Hierdie tyd, al is, ek gaan vinnig die gebruiker om my hul name te gee. Ek gebruik dit read line funksie weer. $ name = read line. Dit is die vinnige, "Wat is jou naam?" Blykbaar Ek is druk dit op sy eie lyn. En dan, so die lyn hieronder wat sal die vinnige wees waar die gebruiker kan hul naam in te voer. En dan Ek het 'n bietjie van veranderlike interpellatie hier op die lyn 3 om uit te druk "Hallo" en Wat ook al die gebruiker. So dit is analoog aan te sê, Hello, komma,% s as ons met behulp van printf in C. So laat ons gaan en hierdie program interpreteer. So weer, sal ek en af ​​te beweeg my terminale venster. php hello2.php. Wat is jou naam? Doug. Hello, Doug. Ek het ook 'n ander lêer genaamd hello3.php. Ek gaan my duidelik skerm met Control L, en ek gaan om uit te voer nie. Wat is jou naam? Doug. Hello, Doug. So die gedrag is identies aan hello2.php, maar hoekom is dit hello3.php? Wel, hier is die verskil. In hierdie geval, kennisgewing wat op die lyn 1 hier, Ek het iets wat nie tussen die PHP delimiters. Ek is net die druk van out-- of ek net getik, "Wat is jou naam?" Wanneer die PHP tolk sien, is dit het geen idee hoe om dit te interpreteer as PHP, en so in plaas van die versuim, dit is net gaan om dit uit te spoeg. So sien op die lyn 3 nou, my oproep om read line, daar is geen vinnige meer. Ek is net eintlik gaan aan- wanneer die PHP tolk sien dit, dit gaan om uit te druk "Wat is jou naam?" Toe sien dit, o, OK, here's-- alles anders gaan wees geïnterpreteer as PHP, so dit is hoekom dit werk. Ek hoef nie te noodwendig gevra die gebruiker aan- binnekant van read line, Ek kan net buite het dit van die PHP delimiters en laat die tolk net druk dit uit vir my. Sodat jy nie eintlik net om een ​​stel PHP delimiters het in jou program. Jy kan eintlik 'n paar van hulle, opening en sluiting van hulle as wat nodig is. So laat ons 'n blik na 'n paar van die programme in CS50 IDE waar ons illustreer hierdie idee van ' verskeie stelle van afgebaken PHP. OK, so ek het 'n lêer geopen hier genoem add1.php. En sien wat hier gebeur. Net soos voorheen, ek het 'n enkele PHP stel delimiters. Ek gaan die druk van die boodskap, "Gee my asseblief 'n nommer." Dan gaan ek 'n lyn te lees en stoor dit in die veranderlike $ num1. Dan gaan ek weer uit te druk. Gee my 'n tweede getal. Lees 'n lyn van die gebruiker, stoor wat hulle getik in in $ num2. Voeg hulle saam en bêre dit lei tot 'n veranderlike genaamd $ som, en dan uit te druk, "Die som van hierdie twee getalle is, "en dan interpelleren daar is die veranderlike $ som. So laat ons net hierdie hardloop deur die tolk om te bevestig dat dit is wat ons verwag. php add1.php. Gee my asseblief 'n nommer, 3. Gee my asseblief 'n tweede nommer, 4. Die som van hierdie twee getalle is 7. Dit is 3 plus 4. OK? So niks vreeslik fancy daar. En nou, laat se oop add2.php. Hier het ek 'n paar van PHP het afgebaken stelle daar, reg? Lyne 1, 3-- lyne 1 en 3 het geen PHP delimiters. So wanneer die tolk sien hulle, dit is net gaan presies spoeg uit wat ek daar getik het. So dit is waar ek is al my waarna doen. Op die lyne 2 en 4, sien ons die heel vertroud $? php soort delimiters, sodat diegene twee lyne gaan voer as PHP. En dan op die lyn 5, ek het hierdie weird ding reg hier, reg? Hierdie hoek bracket vraagteken gelykaanteken. Ek sal selfs in 'n bietjie verder te vergroot. Jy kan sien dit is wat ek is praat oor net daar, hierdie $? =. Dit blyk dat dit is so algemeen dat die rede dat ons maak 'n stel van PHP delimiters is om uit te druk 'n waarde. En dit is al wat ons gaan doen. Maar daar is selfs snelskrif vir daardie. $? = Is PHP snelskrif om te sê iets soos $? PHP eggo die som van num1 en num2. So dit is net nog 'n snelskrif vir daardie. So as ek hardloop hierdie program, php add2.php. Ek sal af zoom 'n bietjie. Gee my asseblief 'n nommer, 4. Gee my asseblief 'n tweede nommer. En omdat ek nie regtig omgee tipes data in PHP, kan ek sê 4,8. Die som van hierdie twee getalle is 8,8. Daardie funksie optree pretty much presies dieselfde as ons sou verwag, ook. En ek het nog een oop hier genoem dice.php. Probeer weer. Ek het nog een hier genoem dice1.php, wat ook te sien, het die vraag hoekhakie merk gelykaanteken notasie daar, maar sien dat ek in hierdie geval is roep die funksie rand, soos wat jy kan verwag genereer 'n ewekansige getal. "Jy gerol a," en dit gaan bereken paar random nommer, mod 6 + 1. Sodat my sal getal gee in die reeks van 1 tot 6. Onthou dat mod 6 sou gee my 'n aantal in die reeks van 0-5, maar as ek dice rolle simuleer, en dit is wat ek hier doen, Ek wil nie hierdie dice om te gaan van 0 5, ek wil dice wat gaan van 1 tot 6. En so dit is 'n manier om te kry my in die reeks van 1 tot 6. Ek is hierdie keer doen. So glo ek rollende twee dobbelstene in hierdie program. So ek sal my skerm skoon te maak, en ek sal php dice1.php doen. Jy gerol 'n 4 en 'n 2. En as ek die program weer, moet jy 'n 5 gerol en 'n 5. So elke keer as ek hardloop die program, Ek kry verskillende getalle, want elke keer as ek doen so is, is dit die begin van oor. Dit gaan om 'n nuwe te genereer stel van ewekansige getalle vir my. So as ons gebruik word om aktiewe programme van C, ons gebruik om te tik ./ die naam van 'n program, reg? Dit is hoe ons almal gedoen het van ons programme in C so ver. Ons kan dit doen in PHP sowel deur iets te voeg genoem 'n kaboedel die top van ons PHP lêer. Ek weet dit is soort van 'n dom woord. Dit is kort vir hash bang. Dit is die eerste twee karakters daar. Onthou ons uitroepteken noem dikwels 'n knal in rekenaarwetenskap. Dit is ook mag wees vir 'n skerp knal. Daar is 'n paar maniere om dit te interpreteer. Maar dit is basies 'n spesiale soort van beveel dat die PHP tolk verstaan ​​as, o, ek wil jy hierdie program uit te voer, wat blykbaar / gebruiker / bin / php, wat is eintlik waar die PHP tolk spesifiek lewens op ons stelsel. So it's-- wat hier gebeur is die tolk verstaan, o, Ek glo veronderstel om te gebruik in hierdie program hierdie lêer hardloop. En so het dit laat jou om oor te slaan oor die stap van om php something.php sê. Daar is 'n ander catch hier, en dit is dat as ons wil ons programme om werk soos verwag, het ons nodig het om iets te doen genoem 'n lêer toestemming verandering. En ons sal go-- en ons praat 'n bietjie bietjie meer oor lêer toestemming veranderinge in ons video op MVC, maar is dit voldoende om sê dat dit is wat jy hoef te doen ten einde te maak jou Php lêers uitvoerbare. So laat ons neem 'n blik op hierdie as ons finale voorbeeld oor in CS50 IDE. So hier in IDE Ek het twee lêers in hierdie PHP gids wat nie blyk te wees genoem .php. Ek het 'n funksie genoem add-- Ek het 'n lêer genaamd add3 en 'n lêer genaamd dice2. So laat ons neem 'n vinnige kyk en maak add3. En soos jy kan sien, aan die begin van my lêer Ek het hierdie kaboedel, reg? Dit hash merk uitroepteken. Nou, sal jy ook dalk agterkom dat een of ander rede, Ek het nie sintaksis het beklemtoon nie, en dit is wat ek vroeër verwys het, wat was dat as ek nie my lêernaam Php, ek het nie die voordeel het van accentuering nie. Hierdie lêer is net geroep add3. Sodat ek kan dit later op loop met ./ add3 en nie ./ add3.php. So die reason-- dit is nog steeds fyn, dit is nog steeds geldig PHP, maar dit is nie sintaksis uitgelig, want hierdie lêer is nie genoem something.php. Dit is die enigste werklike verskil hier, plus die kaboedel. So laat ons sien wat gebeur wanneer Ek probeer en hardloop hierdie program. ./ Add3, net soos ek sou met C. Bash. ./ Add3 toestemming geweier. Dit is wat jy gaan om te sien of jy vergeet die chmod opdrag gebruik om te verander die regte van die lêer. Soos dit blyk, gereelde PHP lêers kan net nie uitgevoer word nie. Hulle kan geïnterpreteer, maar ons is iets wat 'n bietjie anders hier. Ons uitvoering daarvan. En so het ek nodig om die toestemming te voeg van die uitvoering, chmod n + x om add3. Dan kan ek ./ add3 sê. Gee my asseblief 'n nommer. 5, 6. Die som van hierdie twee getalle is 11. Net so, het ek reeds chmoded dice2, so ek kan tik net ./ dice2, jy gerol n 1 en 'n 1, jy gerol n 5 en 'n 4, en so aan. So dit is pretty much die idee van 'n PHP sintaksis, reg? Daar is 'n baie om te kry deur, ek weet. Maar hopelik het jy nou gesien dat PHP is nie regtig wat verskil van C en regtig gee ons die vermoë om dinge te neem op 'n kerf of twee. Ons het nie regtig hoef te bekommer te veel about-- ons nie regtig het te veel bekommer oor die lae-vlak details ons moes bekommer oor met C, reg? Ons kan fokus op die hoër vlak dinge wat PHP ons toelaat om te doen en om te neem vir vanselfsprekend aanvaar dat dit sal werk vir ons. So dit gee ons die vermoë nou, oorgang van C na PHP, programme wat 'n baie meer is maak komplekse en miskien 'n baie meer robuuste. So ek hoop jy het baie pret werk met PHP, en ek is Doug Lloyd. Dit is CS50.