DOUG LLOYD: Dus we hebben veel gedaan van het werk in C, en C is een echt cool taal, want het geeft je de mogelijkheid om echt te duiken lage niveau in uw programma's. We krijgen om dingen te doen als echt minuut als het manipuleren individuele bytes van het geheugen. Bedenk dat echt pointers laat ons dat flexibiliteit. Maar moeten we altijd hebben dat fijnkorrelig niveau van detail in onze programma's? Waarschijnlijk niet, toch? En als we gaan te hebben een trade-off tussen het zijn in staat om echt te doen, echt minute dingen en echt, echt grote dingen die we niet hoeven te denken over, we hebben niet te implementeren deze echt grote ideeën als ze zijn al ingebouwd voor ons, algemeen voor het bouwen van grote programma's of grote projecten, we waarschijnlijk gaan om het zekere voor het van het hebben van meer taal dingen gebouwd in voor ons, in plaats van de low-level stuff. En dat is waar PHP komt echt in. Nu, een van de redenen dat we leren PHP in CS50 is dat het zwaar geïnspireerd door C. En in feite, naar mijn mening, Er zijn eigenlijk twee voorlopercellen talen die zijn zeer vaak tegenwoordig. C en LISP. En ze zijn voorlopercellen talen omdat elke andere moderne programmering taal die heeft ontwikkeld sindsdien is geïnspireerd één of ander syntactisch. PHP is zeer vergelijkbaar syntactisch C, terwijl talen zoals Scheme, bijvoorbeeld, dat Je hebt misschien gehoord van, is zwaar geïnspireerd door een taal genaamd LISP, dat is een oudere taal. Dus de reden dat we leren PHP in CS50 is dat, door te weten C als fundamenteel als jij op dit punt, oppakken van PHP, die u geeft vermogen om veel hogere dingen dan C doet, is niet dat veel van een hindernis, omdat je al de basisidee van de syntax. C is al bijna 45 jaar op dit punt. PHP is al ongeveer 20 jaar. En in die 25 jaar ertussen, programmeurs vastgesteld dat ze zou veel liever hoger niveau vaardigheden, en de fouten en de strijd van de 20 tussenliggende jaren leidde tot PHP en andere moderne talen. PHP is een grote keuze aan taal voor software dat allow-- voor software dat-- waar u nodig hebt om dingen te doen die in C zijn eigenlijk ingewikkeld. Dus bijvoorbeeld, werken met strijkers in C is zeer gecompliceerd, omdat zoals we weten, strings in C zijn eigenlijk alleen maar arrays van karakters. Het is niet een ingebouwd type data. Of misschien meer fundamenteel, iets wat we niet eens dekken in C, wat als je moet doen sommige computernetwerken? Prima? C heeft de mogelijkheid om het te doen, maar het is zo geheimzinnige en zo moeilijk om daadwerkelijk te doen. Zou het niet mooi zijn als de taal had een ingebouwde, eenvoudige manier te implementeren netwerken? En PHP is een taal die die maakt, of vergemakkelijkt dat, heel wat meer. Zoals ik al zei, PHP is zeer zwaar geïnspireerd door C. De syntax is zeer vergelijkbaar. En dus moet het hopelijk de overgang van de ene naar de andere een beetje zachter dan sommige andere talen kunnen zijn. Om te beginnen met het schrijven van PHP, gewoon open te stellen een bestand met de .php extensie. Technisch is dit niet daadwerkelijk benodigde, maar als je dingen als syntax wil markeren in IDE, zodat het type namen, of variabele namen, functies, je weet wel, de sleutelwoorden van de taal worden gemarkeerd in een specifieke kleur, je over het algemeen wilt u uw bestanden met een naam een bepaald bestand extensie. Dus hebben we onze bestand met de naam met een .php uitbreiding, maar dan ook met PHP, alle PHP-code die we schrijven in dat bestand moet worden ingesloten in deze PHP afbakeningen die we zien hier op het scherm. Hoekijzer? Php te beginnen. Dan schrijven we al onze PHP code die we willen in tussen. En dan ? hoekijzer te sluiten. Als we dit niet doen, dan wat gaat er gebeuren? Het gaat niet om te crashen. Het gaat niet aan echt verpesten ons programma. Maar het is niet van plan te hebben het effect dat we willen. Wat er gaat gebeuren, echt, is dat wanneer wij proberen en draaien dit programma, niet alles tussen deze scheidingstekens zal letterlijk worden afgedrukt. Het gaat niet aan de code daadwerkelijk uit te voeren, het gaat gewoon print het letterlijk uit. Waarom is het geval? Dus C is wat bekend als een gecompileerde taal. Je bent waarschijnlijk bekend met de stap van het maken van uw programma's, het draaien van de .c bestanden en .h bestanden in een enkel uitvoerbaar met make, met name het gebruik Clang als onze compiler. PHP, hoewel, niet hebben dit equivalent. PHP is wat een heet geïnterpreteerde taal. En wat betekent dat? Nou, het betekent dat we niet hoeven te zetten onze broncode van nullen en enen vooraf. Integendeel, er is een programma, die ook wel PHP, dat PHP en begrijpt kan soort van maken op de vlieg. Dat is niet echt precies klopt, maar het is een vrij goede analogie van wat er gebeurt. Het is de interpretatie van die nullen en enen op de vlieg. En dus als het niet weet hoe iets te verwerken, als het niet weet hoe proces PHP, je waarschijnlijk wilde dat de tekst daar te zetten, toch? Je wilde waarschijnlijk om de code in te zetten daar, zelfs als het niet tussen PHP-- de PHP scheidingstekens. Maar-- dus gaat het niet om het voor u te verwijderen, het is gewoon om in principe gooi hem weg. Dus het gaat om af te drukken het uit aan het scherm. Dit lijkt het een slecht ding, maar eigenlijk is het gaan een echt goede zaak, want we zullen zien als we praten over PHP web development, omdat het betekent dat we kunnen tussenwerpen PHP en HTML. We kunnen ze samen gebruiken om het creëren van een meer dynamische webpagina. Maar meer daarover in de video op PHP web development. Dus wat is de syntax van PHP? Dat is wat deze video is alles over. Laten we erover praten. Dus om te beginnen, variabelen. PHP variabelen bestaan. Er zijn slechts twee grote verschillen C. De eerste is dat er geen soort specificatie. We hoeven niet te zeggen int, char, vlotter, al dat spul. We hoeven niet dat niet meer te doen. PHP is een moderne taal. Het kan uitzoeken wat je bent proberen te doen of een beste raden naar wat je probeert te doen. Dus dat is vrij aardig. Het andere ding is dat alle variabele namen moeten beginnen met een dollarteken. Dat is gewoon iets om te wennen aan. Het is een beetje raar, omdat het is zo dat PHP kan begrijpen wat een variabele is en wat niet. Dus elke variabele begint met een dollarteken. Dus in C kunnen we iets te zeggen als dit, int x = 54. We hoeven niet meer te doen in PHP. We kunnen alleen maar zeggen dat $ x = 54. En we kunnen zeggen, bijvoorbeeld in C, als we hadden pond inbegrepen de CS50 .h header-bestand, zouden we kunnen zeggen snaar zin = "Dit is CS50." We hoeven niet om dat te doen in PHP, dat wel. We kunnen alleen maar zeggen $ zin = "Dit is CS50." En inderdaad, koord nu een ingebouwde data type in PHP, of liever PHP begrijpt wat een string is. Het is gescheiden van een matrix tekens zoals het is in C. Al uw favoriete voorwaardelijke verklaringen van C zijn nog beschikbaar voor u om te gebruiken. Dus geen grote overgang daar. We kunnen say-- we kunnen hebben Als uitspraken als deze. Als $ y 43, of $ z = 15. Dus dat is vrij eenvoudig. We kunnen hebben indien en anders. We kunnen indien en anders als te hebben. En merk iets hier vrij aardig, en dit is een soort van een van die voordelen van PHP versus C, bericht welke functie we hier niet gebruiken? We gebruiken == om te vergelijken een variabele $ naam, naar een string. We konden dat niet doen in C, toch? We moesten een functie genaamd gebruiken StrComp of StrEndComp of van verwante neven. En zo al zien we deze voordelen. We hoeven niet om iets te doen zo dom of misschien wel intuïtief als bel een functie genaamd StrComp als ik wil gewoon om te testen of een waarde gelijk aan een string. Ik kon gewoon gebruik maken van gelijk gelijken, alsof ik kon niets anders doen. Dus er is een voordeel. Soms, door de manier, zou je zie anders als één woord, elseif. En dat is OK in PHP ook. Dus soms zie je misschien dat. Het is geen typfout. PHP begrijpt eigenlijk elseif. Ik weet niet waarom ze besloten om dat, maar zoals we al vele malen gezien gedurende onze video's tot nu toe, we programmeurs vinden het geweldig als We kunnen dingen snel te doen, dus het wegwerken van die ruimte is blijkbaar een groot voordeel. Dus dat is indien en elseif. We hebben ook de ternaire operator, recall vraagteken colon, voor heel korte vorm als anders of voorwaardelijke vertakking. En blijkbaar deze, wat we proberen te doen hier is toe te wijzen aan de variabele $ brief waar of onwaar, naargelang $ var is een alfabetisch teken. Dus dit is redelijk vergelijkbaar met isAlpha dat we kennen van C. Dit is een soort van het equivalent in PHP. De functie is blijkbaar genaamd ctype_alpha, maar dat is hoe we het doen in PHP. Dus dit alles gaat worden is, indien $ var is een brief, $ brief is waar. Als $ var is niet een brief, $ brief is vals. We hebben ook een switch statements nog steeds. We herinneren die uit C ook. Op de top is er, dat is hoe we het doen iets als get int of je string. Zodat PHP heeft die ingebouwd. We niet de CS50 bibliotheek meer nodig. We kunnen gewoon gebruik maken van de functie readline. Wat dat gaat doen is druk de boodschap: "Uw staat, alsjeblieft, "en dan knipperen prompt wachten tot de gebruiker invoeren wat informatie. Let nu op wat anders we kunnen doen met schakelaar. Als je het al eerder hebt gebruikt, je kan die schakelaar herinneren is vrij veel beperkt tot gehele getallen en karakters, maar nu kunnen we strings gebruiken. En in feite is de switch statement in PHP is een stuk flexibeler dan zijn neef van C. Loops. Net als voorwaardelijke, al je oude favorieten zijn er nog steeds. We hebben tijdens lussen die tellen vanaf 1 tot 100 in dit geval. We hebben doen terwijl loops die tellen 1-100, en we hebben voor lussen die tellen 1-100. Dus geen grote sprong daar. De syntax is vrij veel precies hetzelfde, behalve wij nu gebruiken dollarteken variabele plaats verklaren integer variabelen of zoiets voor onze balies. Hier is waar dingen een veel beter dan C, dat wel. Arrays. Zo herinner toen we over C, teneinde voor ons om te groeien en krimpen sets van de informatie, we nodig hadden om te sorteren van wanbetaling dit idee van een gekoppelde lijst, omdat C arrays werden vastgesteld in grootte. We konden ze niet krimpen. We kunnen ze niet groeien. We moesten geheugen herverdelen en al deze waanzin of gebruik maken van gelinkte lijsten, die nemen heel wat meer ruimte. Maar in PHP, arrays zijn niet meer in omvang vast. Ze kunnen groeien en kunnen krimpen. Dus nogmaals, deze 20 jaar die bestonden tussen de eerste release van C en de eerste release van PHP, hebben we besloten dat, weet je, Het zou echt geweldig zijn als we konden doen. En dus hebben we geïmplementeerd dit. Dus PHP arrays zijn niet vastgesteld grootte, en omdat PHP niet echt hebben programmeur front-facing noties van soorten, kunnen we data types te mengen in onze arrays, ook. Dus we hebben niet eens alle gebruiken integers of alle zwevende punten, kunnen we een combinatie van allemaal verschillende soorten in een matrix. Het uitroepen van een array is vrij eenvoudig. Het is net als elke andere variabele. $ nums = array (1, 2, 3, 4), array een functie die is ingebouwd in PHP dat zal een reeks voor u maken. Hierdoor ontstaat een serie van vier waarden, getallen in dit geval heet $ nums. En er is meer dan één manier om het te doen. En we gaan zien dit veel in PHP. PHP is ontwikkeld door verschillende mensen en groeit en groeit en groeit. Er is meestal niet slechts twee of drie manieren om iets te doen in PHP, er is meestal als 10 of 20. Hier is gewoon een andere gemeenschappelijke manier om een ​​array te verklaren. $ nums = square bracket 1, 2, 3, 4. Dus dit soort vergelijkbaar C's angle br-- accolade notatie plaats. $ - of het zou int nums vierkant haakjes geeft accolade 1, 2, 3, 4. In PHP is het $ nums = square beugels 1, 2, 3, 4. Maar beide voorbeelden geef me een reeks van vier in dit geval integers. Wat als ik iets wil overstag op dit moment? Nou ik kan alleen maar zeggen $ nums 4, die nogmaals, we nog steeds rekenen vanaf 0 hier in PHP, zou de vijfde zijn element van de array. Ik kan alleen maar zeggen. Ik ga niet naar een seg lijden fout, omdat mijn array is gewoon gaan groeien om tegemoet dat. Dat is erg mooi, toch? En in feite, ik weet niet eens nodig om aangeven waar ik wil om het te zetten. Ik kan dit en gewoon maar zeggen tack het juist op tot het einde, of ik kon zelfs alleen zeggen $ nums 20 of 1000. Het maakt eigenlijk niet uit. Het is nog steeds gewoon om tack het juist op tot het einde. Dus ik kan groeien, en as-- we zijn niet van plan om het te bedekken hier, maar ik kan splitsen of strippen elementen uit de serie zo goed, en de serie zal krimpen om tegemoet die nu ontbrekende of lege ruimte. Er is een andere manier om overstag iets op een matrix, die een functie genaamd array_push. Dus nogmaals, alleen dit idee van in staat om dingen te doen veel verschillende manieren. Dus we hebben gezien op drie verschillende manieren nu een ander element tack op een array. Dus dit voegt een ander element aan het einde van de $ nums array. En we kunnen mengen onze data types. Dus kon ik een array van niet 1, 2, 3, 4, maar 1, waar, 3, 4, waar de ware is een Boolean, en dan als ik wil Tack op een ander element die matrix, misschien een koord, de string "vijf," Ik kon dat doen. En nu is mijn serie zou 1 zijn, waar, 3, 4, vijf. Het woord vijf, niet het gehele getal 5. Dus veel flexibiliteit daar. De flexibiliteit krijgt nog beter, hoewel, omdat PHP heeft ondersteuning voor iets riep een associatieve array. En wij soort van vaag gepraat ongeveer associatieve arrays in C in de context van hash tabellen, omdat wat associatieve arrays zijn echt allemaal over het maken van belangrijke waarde paar mappings. En in dit geval, indien de keys-- We zijn bekend met arrays uit C, de toetsen zijn kengetallen. 0, 1, 2, 3. En de waarden wat we zien dat matrix 0, matrix 1, array 2, enzovoort. Dus de toetsen indexen, en de waarden wat er in die array locatie, gespecificeerd door die index. Maar in PHP, hoeven we niet om dit te doen notie van de array 0, 1-array, array 2 meer. We kunnen nu gebruik maken van de werkelijke woorden om sleutels in kaart waarden. En dus kon ik zoiets zeggen. Ik kon een array maken met de square bracket syntax als volgt. $ pizza = vierkant haakje "kaas" en dan dit soort dubbele pijl notatie, 8,99, "pepperoni," pijl 10.99-- 9,99, enzovoort. En dus wat is hier aan de hand? Wat ben ik eigenlijk mee bezig? Ik ben het creëren van belangrijke waarde paar mappings. Dus in plaats van te zeggen, bijvoorbeeld, pizza's 0, 1 pieces, pizza's 2, Ik kan nu zeggen pizza kaas, pepperoni pizza, en verwijzen naar de waarden in verband met hen. Dus hier zijn onze sleutels in het groen. Kaas, pepperoni, groente, buffalo kip. Hier is de pijl die maakt Deze toets waardepaar mapping. En dan zijn hier de waarden op die array locatie. Dus het is als zeggen scala 0 is gelijk aan 8,99. De sleutel is 0. De waarde is 8,99. Ik kan nu zeggen scala kaas, of in dit geval pizza kaas, kaas is de sleutel, en wat ik vind op pizza kaas is 8,99. Dat is de waarde die ik daar te vinden. Dus ik kan zeggen dingen willen. $ pizza kaas = 7,99. Zeggen dat ik met een verkoop. Ik wil dis-- ik wil laten vallen de prijs van de kaas pizza. Of ik kan de groente gebruiken pizza als onderdeel van een aandoening, of ik kan een nieuw element toe te voegen aan mijn array, net zoals ik eerder kunnen doen. Ik kan een nieuw element toe te voegen aan deze associatieve array met de sleutel "bacon" en de waarde 13,49. Maar dit soort wordt een probleem, Als je erover nadenkt voor een tweede. Hoe zouden we doorlopen deze serie? Rechts? In C, zouden we gewoon een lus, kenmerkend, dat zou lopen van 0 tot de grootte van de matrix minus 1. De array heeft n elementen in op de geldige indexen n 0 tot 1 min. Dus we konden gebruik maken van een lus aan stap door elk element. Maar dat is niet echt meer het geval, toch? Nu waar we belangrijke waarde paar mappings wanneer de toetsen woorden, hoe kunnen we itereren over alle woorden? Nou, gelukkig, PHP heeft een manier om te gaan met deze, en dus zullen we terug te springen met lussen voor een tweede een vierde soort lus te introduceren die bestaat in PHP heet een foreach lus. En wat een foreach lus doet is het is eigenlijk hetzelfde idee. Je kunt het gebruiken voor elk soort array. Maar het is eigenlijk de hetzelfde idee als een lus, behalve in plaats van kengetallen, je gewoon hebben deze vreemde syntax, waar je elk element noemen een naam voor de doeleinden van deze lus. Dus in dit geval, foreach ($ array $ key). Kortom, als die opmerking notities, binnenkant van dat foreach loop, het zal gaan over elke element van $ array, die typisch naar een associatieve array, maar kan echt elke vorm van array die u in PHP. En elke keer dat er in een lus je misschien hebben gezegd $ scala vierkante haakjes $ i, kon je gewoon zeggen $ sleutel. Zodat $ sleutel wordt een alias voor elke index van uw PHP associatieve array, en zo kun je het gebruiken als dat. Dus bijvoorbeeld, we hebben nu hebben onze pizza's array. Ik heb soort stopte het in de hoek zodat we het kunnen gebruiken om snel een voorbeeld te doen. Als ik zeg foreach ($ pizza's $ pizza), goed, wat gebeurt er? Nou, ik ga doorlopen elke enkel element van de array $ pizza, en door dat te doen, ik ga om te bellen elk element, als ik binnen van het lichaam van die lus, $ pizza. Dus dat is een soort van een stand-in, herinneren, dat $ pizza is een stand-in voor het zeggen $ pizza vierkante haken $ i als we met behulp van een lus, waar we kunnen gaan van $ i = 0, in dit geval, $ i = 3. Als we geen belangrijke waarde paren hadden Hier, zou dit element 0, 1, 2, 3 zijn, en we zouden gebruik maken van een lus om te gaan $ 0 pizza, pizza's $ 1, $ 2 pizza's, $ 3 pizza's. Dus nu maar $ pizza is het vervangen voor die persoon sleutel. Dus wat gaat dit uit te printen? Ik ben het afdrukken van $ pizza. Wat ga ik at-- vinden als ik uitprinten $ pizza, $ i? Rechts? Als ik ga om uit te printen het ide element van pizza, wat ga ik om af te drukken? Ik ga uitprinten waarden op die locatie, toch? Alsof we deden dit in de context van C, we meestal niet gebruiken onze iterator variabele int i = 0, i kleiner is dan 3, i ++, uitprinten 0, 1, 2, 3. We printen serie 0, serie 1, serie 2, array 3. En dus wat dit drukt is dit. Het is de lijst van de prijzen. 8.99, 9.99, 10.99, 11.99. Nu een snelle nota hier. Een foreach lus niet noodzakelijkerwijs printen dingen in orde. Het is niet gegarandeerd. Het doet meestal. Het is meestal gebaseerd op de volgorde welke elementen worden toegevoegd aan de matrix, dus gewoon rekening mee houden. Het is misschien niet in orde. Maar een foreach lus zal herhalen over elk element van de matrix betrokken. In dit geval weer, dat array $ pizza's. Ik kan de syntax veranderen, hoewel, als Ik wil zowel de sleutel en de waarde. In plaats van te zeggen $ pizza als $ pizza, kan ik dit zeggen. En als je kijkt naar wat ik heb in het groen hier, het ziet eruit als een belangrijke waarde paar mapping. En dus als u-- zelfs als je niet helemaal zeker wat het gaat doen, U kunt wel raden dat $ topping gaat de sleutel in dit geval en $ prijs gaat naar de waarde. Dus ik ben te vervangen nu elk element van $ pizza als sleutelwaarde paren, en nu kan ik verwijzen naar de sleutel en de waarde, die zou goed van pas, bijvoorbeeld, als volgt. "Geheel" - dit is een veel afdrukken gaande hier-- "Een hele" topping "pizza kost $" prijs, en vervolgens Print ik een periode en een backslash n. Dus nu, bericht ik weer toegang hebben tot een sleutel, $ topping, en een waarde, $ prijs. Dus je kunt raden wat dit gaat uit te printen? Er is veel druk verklaringen, maar er is slechts één backslash n, dus het gaat om iets op te drukken een entire-- op een enkele regel code. Als ik kan verwijzen naar de sleutel en de waarde dan nu, in plaats van alleen te kunnen uitprinten van de prijzen, Ik kan uitprinten iets als dit. "Een hele kaas pizza kost $ 8,99." En nu ben ik met behulp van alle van de keys-- kaas, pepperoni, groente, buffels chicken-- en de waarden. 8.99, 9.99, 10.99, 11.99 So dat is gewoon een andere manier een foreach lus doen dat in plaats van alleen het geven u toegang tot de waarden, het geeft gewoon u-- het geeft toegang tot de sleutels en de waarden. Dus het afdrukken van informatie. Ik heb het al gedaan een paar verschillende manieren, zou u zijn opgevallen. De twee functies we hebben in de eerste plaats gezien zijn print en echo. En voor vrijwel alle opzichten doeleinden, ze zijn precies hetzelfde. They're-- er is een zeer subtiele het verschil is dat niet eens de moeite waard krijgen in, maar in principe overal u kunt afdrukken gebruiken kunt u waarschijnlijk gebruik maken van echo ook. En dat is niet de enige twee. PHP heeft veel verschillende manieren om dingen uit te printen, en het heeft ook manieren integreren variabelen in het midden van de string. Zo herinneren van C, heb je herinneren welke functie we kunnen gebruiken om variabelen te vervangen in de dingen die we willen om uit te printen? U gebruikt waarschijnlijk deze functioneert heel veel. printf, toch? Dus dit is wat we eerder binnen hadden de context van onze foreach lus. We hadden deze vijf aparte afdrukken verklaringen, want dat was de enige zoals ik echt wist op het moment hoe te printen berichten. Ik wist niet hoe het te integreren variabele $ topping in mijn PHP-code. Nou, als ik een wilde gok net genomen, printf, het zou eigenlijk hebben gewerkt. printf is een functie die ik kan gebruiken in PHP, net zoals ik het kan gebruiken in C. En zo iets als dit, printf, nogmaals, we zijn vertrouwd met dat. De eerste% s wordt vervangen de waarde van $ topping. De tweede% s wordt vervangen met de waarde van $ prijs. En dus ik ben interpellating, dat is gewoon een mooie manier te zeggen dat ik het steken van de variabelen in die locatie. Dus ik ben het aansluiten van $ topping waar de rood% s is en $ prijs waar de blauwe% s is, en dan zou ik de boodschap, "Een hele kaas pizza kost $ 8,99." Niet de enige manier waarop ik het kan doen, dat wel. Misschien zou ik deze methode gebruiken. Dit is eigenlijk wat het meest voorkomende genaamd variabele interpellatie. Ik kan gebruik maken van een echo. Ik kon een afdruk te gebruiken, zoals we zullen zien. Maar wat is hier aan de hand? Allereerst moet ik ontsnappen aan de dollarteken. Want vergeet niet, toen we eigenlijk waren afdrukken van de prijzen van de pizza's, Ik was hen daadwerkelijk formatteren als monetaire cijfers met een dollarteken. Maar we gebruiken dollartekens ook variabele namen vertegenwoordigen in PHP, en in het bijzonder als ik ben deze methode van het gekrulde brace variabele interpellatie methode, moet ik mijn dollarteken ontsnappen, zodat het niet denk dat ik heb het over een variabele. Het gaat eigenlijk, letterlijk afdrukken van een dollarteken. Dus soort analogize aan wat je ziet op het einde daar. Het maakt eigenlijk niet afdrukken backslash n, toch? Het drukt een nieuwe lijn karakter. Dit is-- het is niet van plan om afdruk backslash dollarteken, het gaat gewoon uit te printen een dollarteken karakter. Hetzelfde idee. Escape sequences, wat deze dingen worden genoemd. Maar merken dat ik niet te doen een soort van% s substituties, Ik ben gewoon letterlijk inpluggen in deze variabelen. En zo in dit-- wat hier zou gebeuren is dat de waarde van $ topping-- weer, gewoon houden met wat we geweest over dus far-- kaas zou krijgen ingeplugd daar. En $ prijs zou zijn wat de waarde is op pizza's, haken, kaas, die was 8,99. En dus zou dit ook uit te printen "Een hele kaas pizza kost $ 8,99." En zoals ik al zei, kon ik gebruik printen hier in plaats van echo, en de functionaliteit vrijwel precies hetzelfde. Het zou hetzelfde uitprinten. Er is een andere manier om het te doen, en dit is een ander voordeel van PHP werken met strijkers. We kunnen tekenreekssamenvoegingsoperator doen. We kunnen dit in C, ook met behulp van een functie genaamd strcat, maar nogmaals, we hadden noemen gescheiden functies. Het was deze hele rotzooi te doen. We moesten pound-onder string.h. Het was een productie, toch? Maar nu kan ik gewoon gebruik maken van deze puntoperator strings samen aaneen te schakelen. Dus ik ben het aaneenschakelen "Een hele" en dan is ongeacht de waarde van $ topping is, en dan nog een tekenreeks "pizza kost $" en dan aaneenschakelen wat de waarde van $ prijs is, en dan aan het einde ben ik overstag gaan op periode backslash n. En dus zou dit ook print "Een hele" - nogmaals, Als we praten over de eerste element van die pizza array-- "Een hele kaas pizza kost $ 8,99." Periode backslash n, opnieuw, met de $ topping en $ prijs vervangende voor wat we in onze foreach had opgegeven lus als de belangrijkste waarde paar mapping. PHP kan functies uit te voeren. Functies waren soort integraal onderdeel C, zoals we zagen. Zoals variabelen, hoeven we niet te geef de return type van de functie, want het maakt eigenlijk niet uit. En we niet opgeeft de data types van parameters, omdat ze niet echt materie, zoals we hebben gezien in PHP. Elke functie wordt ingebracht met de functie trefwoord. Dat is hoe we aangeven dat PHP waar we het over hebben is een functie. En we hoeven niet te omgaan met de belangrijkste helemaal niet, omdat de tolk, de PHP tolk, werken van boven naar beneden, ongeacht. Als het ziet je kunt maken een functie-oproep, het zal gaan de functie oproep vinden, zelfs als het komt later. Maar het gaat om te lezen van boven naar onderkant, dus we hoeven niet aan te geven, hier is waar je begint. Je begint op lijn 1 van uw PHP en werken van daar. Dus hier is hoe we zouden creëren een functie genaamd hard_square. Het duurt blijkbaar een parameter, die ik bel $ x. Deze functie is gewoon ingewikkeld naar verschillende dingen te illustreren. We hebben nog steeds de terugkeer waarden. Ik ben met behulp van een lus hier. Maar het is eigenlijk gewoon, wat dit bedraagt ​​slechts $ x maal $ x. Wat ik eigenlijk aan het doen is gewoon toe te voegen x 0 x keer of $ x nul $ x maal. Maar het is precies effectief hetzelfde als $ x maal $ x vermenigvuldigen. Ik kan nog steeds een waarde terug, in dit geval $ result, en ik heb een functie in PHP gemaakt. Hier is hoe je het zou kunnen gebruiken in de context. Dus misschien ben ik de binnenkant van een aantal PHP-bestand. Bericht in blauw daar dat Ik heb mijn PHP scheidingstekens gebruikt, hoekijzer vraagteken php. Daartussen zijn allemaal PHP, dat ik wil schrijven. Dus ik ben blijkbaar ga get-- Ik ga naar de gebruiker gevraagd om me een nummer, winkel die variabele, op te slaan in de variabele $ x, wat ze me gaf. Dan ga ik echo hard_square van die waarde, en blijkbaar gaan overstag op een nieuwe regel als goed, en dan later zal ik definiëren de functie zo hard_square dat wanneer ik de bellen om hard_square, het weet wat ik het over heb. Nu, ik zou ook kunnen doen iets zoals dit. Dit is iets anders. Het is precies de bijna hetzelfde als wat we eerder zagen, behalve in plaats van te zeggen slechts $ x er als parameter om hard_square, Ik zeg $ x = 10. Dit is dus een voorbeeld van defensief programmeren, bewaken van uw programma's tegen kwaadwillende gebruikers. Dit is een manier om een ​​fout te doen controleren dat we niet echt hebben als een optie in C. We kunnen nooit geef de standaard waarde van iets. We hadden altijd te controleren of de, bijvoorbeeld, Als we een oproep om GetString, het was meest geschikte als onmiddellijk nadat we gecontroleerd dat, we ingecheckt of het koord dat de gebruiker gaf ons is niet gelijk aan nul, omdat we niet willen beginnen werken met een null string. Hier is dit een manier om te waken tegen. Als de gebruiker geen ons iets een of andere manier, wat gaan we doen? Nou, we zullen gewoon zeggen wat ze niet geven ons, we gaan gewoon aan te sluiten op de 10 plaats. Dus als ze niet geven ons een waarde, gewoon gebruik maken van 10 standaard. En dus even, merken dat ik maak een oproep tot hard_square, maar er is geen prompt aan de gebruiker, toch? Ik ben gewoon het maken van een lege oproep. Maar mijn functie hard_square verwacht een parameter. Wat gaat dit uit te printen? Het gaat om afdrukken 100, toch? Doordat de gebruiker niet geef me iets. En dus ben ik gewoon te veronderstellen dat 10-- 10 is de standaard waarde. En dus dit zou printen uit 100 op zijn eigen lijn. PHP-bestanden niet hoeft te zijn slechts een enkel bestand. U kunt meerdere bestanden combineren, net zoals je kunt in C. De manier We deden dat in C was typisch voor een te doen # include om header-bestanden getrokken. We doen dat niet in PHP. Wij doen iets genaamd require_once. En dan is er dit hele ding, wat is dit __dir__? Dat is gewoon een speciale variabele of speciale constant, echt, die aangeeft wat je huidige directory is. En dus het gaat om te kijken in je huidige directory naar een bestand genaamd cs50.php Hier in dit voorbeeld en het gaat om dat bestand te plakken aan de bovenkant van uw PHP-programma, ervan uitgaande dat je het nodig zodra lijn aan de bovenkant van uw PHP-bestand. Dus PHP wordt voornamelijk gebruikt, maar niet uitsluitend, als een taal voor web-based programmering. Dat is echt hoe het kwam te zijn. Maar het is een volledig taal, zoals we hebben gezien. We hebben vrijwel alle dingen gezien dat kan doen lijken op C zijn, en het kan een deurklink van doen veel meer dan dat. Maar omdat het een volledige taal en we kan commandoregel programmeren in. We kunnen command line programma's te draaien. Alles wat nodig is om een ​​opdracht uit te voeren line programma dat is geschreven in PHP is dat u een PHP-interpreter. Dus het is een soort van analoog aan het hebben van een compiler op uw systeem Als u wilt uw C-code te compileren om te zetten in uitvoerbare bestanden. Je nodig hebt om een ​​PHP-tolk die bestaat op uw systeem zodat je kunt PHP-bestanden interpreteren. Ervan uitgaande dat je, en meestal Deze tolk wordt genoemd PHP, en het is meestal gebundeld met de meeste downloads of installaties van PHP die je online kunt krijgen, en zeker de naam van de PHP-tolk we hebben in CS50, IDE. Alles wat je doet is het type php bestand. En wat uw programma's gaan doen is het gaan lopen door de tolk, het is ga alles dat is te negeren niet in tussen vraag mark-- of, hoekijzer vraagteken php, de PHP afbakeningen, en print het uit, en het zal interpreteren en uitvoeren van de code binnenkant van uw PHP afbakeningen. Dus laten we pop naar CS50 IDE en eens een kijkje op een paar van de PHP-bestanden, draaien van een paar PHP bestanden, in command line interface van CS50 IDE. Dus hier zijn we in CS50 IDE, en ik heb de vrijheid genomen van het openen van een bestand genaamd hello1.php. En blijkbaar, de inhoud van deze bestand zijn gewoon de PHP scheidingstekens daar, en tussen, echo ("hello, world"). Dit is een vrij eenvoudig PHP-programma. Ik ga gewoon naar beneden scrollen hier mijn terminal venster, en ik ga php typen hello1.php, druk op enter. Hallo Wereld. Dat is waarschijnlijk wat we waren verwacht dat het doen, toch? Laten we gaan en neem een andere kijk op het programma. hello2.php. Vrijwel hetzelfde, niet veel aan de hand. Deze keer, hoewel, ik ga om te vragen de gebruiker om mij hun namen te geven. Ik gebruik dat readline functie opnieuw. $ naam = readline. Dat is de prompt: "Wat is uw naam?" Blijkbaar ben ik afdrukken het op zijn eigen lijn. En dan, zodat de regel onder dat zal de prompt waar de gebruiker kan hun naam in te voeren. En dan ben ik met behulp van een beetje variabele interpellatie hier op lijn 3 uitprinten "Hello" en wat de gebruiker typt. Dus dit is analoog aan te zeggen, Hello, komma,% s als we met behulp van printf in C. Dus laten we gaan en dit programma te interpreteren. Dus nogmaals, ik zal naar beneden scrollen mijn terminal venster. php hello2.php. Hoe heet je? Doug. Hallo, Doug. Ik heb ook een andere bestand genaamd hello3.php. Ik ga duidelijk mijn scherm met Control L, en ik ga uit te voeren die. Hoe heet je? Doug. Hallo, Doug. Dus het gedrag identiek aan hello2.php, maar waarom is het hello3.php? Nou, hier is het verschil. In dit geval, bericht die op lijn 1 hier, Ik heb iets dat niet tussen de PHP scheidingstekens. Ik ben gewoon afdrukken out-- of I alleen getypt, "Wat is uw naam?" Wanneer de PHP-interpreter ziet dit, het heeft geen idee hoe het te interpreteren als PHP, en dus in plaats van het niet, het is gewoon om het uit te spugen. Zo merkt op lijn 3 nu, mijn oproep aan Readline, is er geen aanwijzing meer. Ik ben gewoon echt gaan to-- wanneer de PHP-interpreter dit ziet, het gaat om uit te printen "Hoe heet je?" Dan ziet het, oh, OK, here's-- alles anders gaat worden geïnterpreteerd als PHP, dus dat is de reden waarom dit werkt. Ik hoef niet per se prompt de gebruiker to-- binnenkant van readline, Ik kan net buiten het hebben van de PHP begrenzers en laat de tolk gewoon print het uit voor mij. Zodat je eigenlijk niet alleen een set van PHP afbakeningen hebben in uw programma. Je kunt eigenlijk hebben een aantal van hen, openen en te sluiten indien nodig. Dus laten we eens een kijkje nemen een paar programma in CS50 IDE waar we illustreren dit idee van het hebben van meerdere sets gescheiden PHP. OK, dus ik heb een bestand geopend hier genoemd add1.php. En let op wat hier gebeurt. Net als voorheen, ik heb een enkele PHP set van afbakeningen. Ik ga uitprinten bericht "Geef me een nummer." Dan ga ik een lijn te lezen en opslaan in de variabele $ num1. Dan ga ik weer uit om af te drukken. Geef me een tweede nummer. Lees een lijn van de gebruiker, op te slaan wat ze getypt in op $ num2. Voeg ze samen en op te slaan die resulteren in een variabele genaamd $ sum, en vervolgens afdrukken, "The som van deze twee getallen is, "en dan interpelleren daar de variabele $ som. Dus laten we gewoon deze run door middel van de tolk om te bevestigen dat dit is wat we verwachten. php add1.php. Geef me een nummer 3. Geef me een tweede nummer, 4. De som van deze twee getallen is 7. Dat is 3 plus 4. OK? Dus niets vreselijk bijzonders daar. En laten we nu openstellen add2.php. Hier heb ik een paar PHP kreeg gescheiden sets daar, toch? Lijnen 1, 3-- lijnen 1 en 3 hebben geen PHP scheidingstekens. Dus toen de tolk ziet hen, het is gewoon gaat om precies uit te spugen wat ik daar heb getypt. Dus dat is waar ik ben al mijn gevraagd te doen. Op de lijnen 2 en 4 zien we de zeer vertrouwd $? php soort van afbakeningen, dus die twee lijnen zijn gaan voeren als PHP. En dan op lijn 5, heb ik dit raar ding hier, toch? Deze hoek beugel vraagteken gelijk-teken. Ik zal zelfs een beetje verder in te zoomen. U kunt zien dit is wat ik ben over daar, dit $? =. Het blijkt dat het zo gewoon dat de reden dat we het openstellen van een set van PHP scheidingstekens is het afdrukken van een waarde. En dat is alles wat we gaan doen. Maar er is zelfs steno voor. $? = Is PHP afkorting voor te zeggen iets van $? php echo de som van num1 en num2. Dus dit is gewoon een andere afkorting voor dat. Dus als ik zonder dit programma, php add2.php. Ik ga naar beneden te zoomen een beetje. Geef me een nummer, 4. Geef me een tweede nummer. En aangezien ik niet echt zorgen over datatypes in PHP, kan ik zeggen 4,8. De som van deze twee getallen is 8,8. Deze functie gedraagt ​​zich vrijwel precies hetzelfde als we verwachten, ook. En ik heb nog een geopend hier genoemd dice.php. Probeer deze weer. Ik heb nog een hier genoemd dice1.php, die ook te zien, heeft die vraag hoekijzer markeren isgelijkteken notatie daar, maar merken dat ik in dit geval ben aanroepen van de functie rand, zoals die u zou verwachten genereert een willekeurig getal. "Je rolde een," en het gaat om berekenen van een willekeurig getal, mod 6 + 1. Dus dat zal me nummer geven in het traject van 1-6. Vergeet niet dat mod 6 zou me een getal in het traject van 0 tot 5, maar als ik dobbelstenen rollen simuleren, dat is wat ik hier doe, Ik wil niet dat deze dobbelstenen te gaan van 0 tot 5, wil dobbelstenen die gaan van 1 tot 6. En dus dit is een manier om me in het bereik van 1-6. Ik doe dit twee keer te doen. Dus blijkbaar ben ik rollend twee dobbelstenen in dit programma. Dus ik zal mijn scherm te wissen, en ik zal php dice1.php doen. Je rolde een 4 en een 2. En als ik zonder het programma nogmaals, u rolde een 5 en een 5. Dus elke keer als ik het programma uitvoert, Ik krijg verschillende nummers, want elke keer als ik doe ja, het is beginnen. Het gaat om een ​​nieuwe te genereren set van willekeurige getallen voor mij. Dus als we gewend zijn lopende programma's van C, We zijn gewend aan het typen van de ./ de naam van een programma, toch? Dat is hoe we allemaal hebben gedaan van onze programma's in C zo ver. We kunnen dit doen in PHP en door iets toe te voegen genoemd een keet aan de top van onze PHP-bestand. Ik weet dat het een soort van een dom woord. Het is kort voor hash knal. Dat is de eerste twee karakters zijn. Vergeet niet dat we uitroepteken noemen vaak een knal in de informatica. Ook zou kunnen worden voor scherpe knal. Er zijn een paar manieren om het te interpreteren. Maar het is in feite een speciaal soort van bevelen dat de PHP-tolk begrijpt als, oh, ik wil u dit programma uit te voeren, die blijkbaar / user / bin / php, die is eigenlijk waar de PHP-tolk specifiek woont op ons systeem. Dus it's-- wat er hier gebeurt is de tolk begrijpt, oh, Ik ben blijkbaar de bedoeling om te gebruiken in dit programma om dit bestand uit te voeren. En zo kunt u over te slaan de stap van het hebben van php something.php zeggen. Er is nog een andere vangst Hier, namelijk dat als we willen dat onze programma's zoals verwacht, we moet iets genaamd doen bestandstoegang verandering. En we zullen gaan-- en we praten een beetje iets meer over bestand toestemming veranderingen in onze video op MVC, maar volstaat het om zeggen dat dit is wat je moet doen om uw .php bestanden uitvoerbaar. Dus laten we eens kijken naar dit als onze laatste voorbeeld dan in CS50 IDE. Dus hier in IDE Ik heb twee bestanden in deze PHP directory die niet lijken te zijn genaamd .php. Ik heb een functie genaamd add-- Ik heb een bestand genaamd ADD3 en een bestand genaamd Dice2. Dus laten we eens een snelle kijk en open ADD3. En zoals je kunt zien, in het begin van mijn bestand heb ik dit keet, toch? Dit hekje uitroepteken. Nu zult u ook misschien merkt dat andere reden, Ik heb geen syntaxis de nadruk meer, en dit is wat ik eerder gezinspeeld, dat was dat als ik niet mijn dossier te noemen php, ik heb niet het voordeel hebben van syntax highlighting meer. Dit bestand is net gebeld ADD3. Zodat ik kan het later op te voeren met ./ ADD3 en niet ./ add3.php. Dus de reason-- het is nog steeds prima, het is nog steeds geldig PHP, maar het is niet syntax gemarkeerd, omdat Dit bestand wordt niet genoemd something.php. Dat is het enige echte verschil hier, plus de keet. Dus laten we zien wat er gebeurt als Ik probeer en run dit programma. ./ ADD3, net zoals ik dat zou doen met C. Bash. ./ ADD3 toestemming geweigerd. Dit is wat je gaat om te zien als je vergeet naar het chmod commando gebruiken om te veranderen de permissies van het bestand. Zo blijkt, regelmatige PHP bestanden kunnen gewoon niet worden uitgevoerd. Ze kunnen worden geïnterpreteerd, maar we zijn iets anders hier doen. We zijn het uitvoeren van het. En dus ik moet toestemming voegen van executie, chmod a + x om ADD3. Dan kan ik ./ ADD3 zeggen. Geef me een nummer. 5, 6. De som van deze twee getallen is 11. Ook heb ik al chmoded Dice2, dus ik kan enkel type ./ Dice2, je rolde een 1 en een 1, u rolde 5 en 4, enzovoorts. Dus dat is vrij veel het idee van een PHP-syntax, toch? Er is veel om door te komen, ik weet het. Maar hopelijk heb je nu gezien dat PHP is niet echt anders C en echt geeft ons de mogelijkheid om dingen te nemen een inkeping of twee. We niet echt zorgen te maken teveel about-- we niet echt al te veel zorgen over te maken de low-level details die we moest zorgen over te maken met C, toch? We kunnen richten op het hogere level spul dat PHP stelt ons in staat om te doen en te nemen voor vanzelfsprekend dat het zal werken voor ons. Dus het geeft ons de mogelijkheid nu, de overgang van C naar PHP, programma's die veel meer zijn te maken complex en misschien veel robuuster. Dus ik hoop dat jullie veel plezier werken met PHP, en ik ben Doug Lloyd. Dit is CS50.