DOUG LLOYD: Takže máme udělal hodně práce v C, a C je opravdu v pohodě jazyka, protože vám dává schopnost se potápět skutečně nízká úroveň do vašich programů. Dostáváme se dělat věci tak, jak Opravdu minuta as manipulací Jednotlivé bajtů paměti. Připomeňme si, že opravdu na ukazatele umožnit nám, že pružnost. Ale vždy je třeba mít že úroveň jemnozrnná detailu v našich programech? Pravděpodobně ne, že jo? A pokud budeme mít kompromis mezi tím, schopný dělat opravdu, ale opravdu minute věci a opravdu, ale opravdu velké věci, které nemají myslet o, nemáme realizovat Tyto opravdu velké myšlenky pokud že jsou již postavena v roce pro nás, obecně pro budování big programy nebo velké projekty, budeme pravděpodobně bude chybovat na straně z toho, že další jazykové věci postavena v roce pro nás, místo toho, věci low-level. A to je místo, kde PHP opravdu přichází. Nyní, jeden z důvodů, proč že učíme PHP v CS50 je, že je silně inspirovaná C. A ve skutečnosti, podle mého názoru, tam jsou opravdu dvou progenitorové jazyky, které jsou velmi časté v dnešní době. C a LISP. A jsou progenitorové jazyky protože každý jiný moderní programování jazyk, který vyvinula od té doby je inspirováno jednou nebo druhou syntakticky. PHP je velmi podobný syntakticky k C, zatímco jazyků jako Scheme, například, který jste možná slyšeli o, je silně inspirován jazykem volal LISP, který je starší jazyk. Takže z toho důvodu jsme se učit PHP v CS50 je to, že, tím, že zná C jako zásadně jako vy v tomto bodě, vyzvednutí PHP, který vám dává schopnost dělat mnohem vyšší úroveň věci než C dělá, není že hodně z překážku, proto, že již máte Základní myšlenkou syntaxe. C je to asi pro téměř 45 let v tomto bodě. PHP tu byl asi 20 let. A v tom, že 25 let mezi programátory, stanoveno, že by moc spíše mají vyšší schopnosti na úrovni, a chyby a boje z 20 let v rozmezí vedl k PHP a jiných moderních jazyků. PHP velký výběr jazyka pro software že allow-- pro software that-- kde na vás je třeba dělat věci, které v C jsou ve skutečnosti komplikované. Tak například, pracovní s řetězci v C je velmi komplikované, protože jak víme, řetězce v C jsou opravdu jen pole znaků. Není to vestavěný datový typ. Nebo snad ještě podstatnější, něco, co jsme neměli ani pokrýt v C, co když musíte udělat, Některé počítačové sítě? Dobře? C má schopnost dělat to, ale je to tak tajemný a tak těžké skutečně udělat. Nebylo by hezké, kdyby Jazyk měl vestavěný a snadný způsob, implementovat sítí? A PHP je jazyk, který dělá to, nebo usnadňuje to, že trochu víc. Jak jsem již řekl, PHP je velmi silně inspirovaný C. Syntaxe je velmi podobná. A tak to má snad aby se Přechod z jednoho na druhého trochu měkčí než některé další jazyky mohou být. Chcete-li začít psát PHP, stačí otevřít soubor s příponou .php. Technicky to není skutečně zapotřebí, ale pokud chcete, věci, jako je syntaxe zvýraznění v IDE, takže tento typ názvy, nebo názvy proměnných, funkce, víte, klíčová slova z jazyka jsou zvýrazněny v specifická barva, je obvykle chtějí pojmenovat své soubory s konkrétní příponu souboru. Takže jsme pojmenován náš soubor s .php rozšíření, ale pak také s PHP, všechny PHP kód budeme psát v tom, že Soubor musí být uzavřen v těchto PHP oddělovače, které vidíme tady na obrazovce. Úhel držák? Php začít. Pak jsme se napsat všechny naše PHP kód, který chceme mezi nimi. A pak ? úhelník uzavřít. Nebudeme-li to dělat, pak co se bude dít? Nebude to k havárii. To nebude Opravdu zničit náš program. Ale je to nebude mít dopadu, který chceme. Co se stane, opravdu, je že když se snažíme a spustit tento program, vše, co není mezi těmito oddělovače se bude vytištěn doslovně. To nebude ve skutečnosti spustit kód, to bude jen vytisknout doslovně. A proč je tomu tak? Takže C je to, co je známo jako kompilované jazyk. Vy jste pravděpodobně obeznámeni s krok tvorby programy, soustružení .c souborů a .h soubory do jednoho spustitelného souboru s make, zejména s využitím Řinčení jako náš kompilátor. PHP, i když, ne mají tento ekvivalent. PHP je to, co se nazývá interpretovaný jazyk. A co to znamená? No, to znamená, že nebudeme muset převést náš zdrojový kód nul a jedniček být forhendový. Spíše, je tu program, který je také nazýván PHP, že chápe, PHP a může nějak dělat to v reálném čase. To opravdu není úplně přesné, ale je to docela dobrá analogie o tom, co se děje. Je to tlumočení ty, nuly a ty v reálném čase. A tak, pokud to neví jak zpracovat něco, pokud neví, jak se Proces PHP, budete pravděpodobně chtěl dát tento text tam, že jo? Pravděpodobně jste chtěl dát kód tam, i když to není mezi PHP-- PHP oddělovače. Ale-- takže to nebude ji smazat pro vás, to jen tak v podstatě zlikvidujte jej. Takže to bude tisknout to se na obrazovku. To vypadá, že je to špatný věc, ale ve skutečnosti je to Bude to opravdu dobrá věc, jak jsme to vidět, když hovoříme o PHP vývoj webu, protože to znamená, že můžeme promíchat PHP a HTML. Můžeme je použít společně vytvořit dynamičtější webové stránky. Ale o tom více v video na vývoj PHP webových aplikací. Takže to, co je syntaxe PHP? To je to, co toto video je vše kolem. Pojďme si o tom promluvit. Takže začít, proměnné. PHP proměnné existují. Tam jsou jen dva velké odlišnosti od C. První z nich je, že je tu č specifikátor typu. Nemusíme říkat int, char, float, všechny ty věci. Nemáme k tomu, že už ne. PHP je moderní jazyk. To může přijít na to, co jste se snaží dělat, nebo aby nejlepší hádat, jak na to, co se snažíte udělat. Tak to je docela pěkné. Druhá věc je, že všechny proměnné jména mají začít s znak dolaru. Je to prostě něco, co se zvyknout. Je to trochu divné, protože je to tak, že PHP může pochopit co je proměnné a co ne. Takže každý název proměnné začíná s znak dolaru. Takže v C bychom mohli říct něco takhle, int x = 54. Nemáme k tomu, že už v PHP. Můžeme jen říct, $ x = 54. A mohli bychom říci, například, v C, kdybychom libra-zahrnoval CS50 .h hlavičkový soubor, mohli bychom říci, string výraz = "Toto je CS50." Nemáme k tomu, že v PHP, ačkoli. Můžeme jen říci $ frázi = "Toto je CS50." A ve skutečnosti, řetězec je nyní vestavěný datový typ v PHP, nebo spíše PHP rozumí co je řetězec. Je to odděleně od pole znaků, jako je to v C. Všechny vaše oblíbené podmíněné příkazy z C jsou stále k dispozici pro vás k použití. Takže tam žádné velké přechod. Můžeme say-- můžeme mít if, jako je tento. pokud $ y 43, nebo $ z = 15. Tak to je docela jednoduché. Můžeme mít, pokud i jinde. Můžeme mít, pokud a else if. A všimněte si něco tady docela pěkné, a to je něco jeden z těch Výhody PHP oproti C, oznámení jakou funkci nejsme tady používáte? Používáme == porovnat proměnná, $ name, na řetězec. Nemohli jsme to udělat v C, ne? Museli jsme použít funkci nazvanou StrComp nebo StrEndComp nebo jakékoliv z jejích přidružených bratranci. A tak už vidíme tyto výhody. Nemusíme dělat něco jak hloupé nebo možná unintuitive jako volání funkce nazývá StrComp pokud chci jen vyzkoušet zda hodnota se rovná řetězec. Jsem mohl použít jen rovná rovná, že bych mohl dělat něco jiného. Takže tam to výhoda. Někdy, mimochodem, můžete viz else if jako jedno slovo, elseif. A to je v pořádku, v PHP stejně. Takže někdy můžete vidět, že. Není to překlep. PHP vlastně chápe elseif. Nevím, proč se rozhodla implementovat to, ale jak jsme viděli mnohokrát v celé naší videa tak daleko, máme programátoři to líbí, pokud můžeme dělat věci rychle, tak, jak se zbavit tohoto prostoru je zřejmě velká výhoda. Tak to je v případě, a elseif. Máme také ternární operátor, Připomeňme, otazník tlustého střeva, za opravdu krátkou formu, pokud jiný nebo podmíněné větvení. A zdá se, že v tomto, co se snažíme udělat zde je přiřadit proměnné $ dopis jeden pravdivý nebo nepravdivý, V závislosti na tom, zda $ var je abecední znak. Tak to je docela podobný IsAlpha že jsme obeznámeni s od C. To je něco jako ekvivalent v PHP. Funkce je zřejmě volal ctype_alpha, ale to je to, jak to děláme v PHP. Tak tohle všechno bude je, je-li $ var je dopis, $ dopis je pravda. Je-li $ var není dopis, $ dopis je false. Máme také prohlášení přepínače stále. Připomínáme, ty, které z C i. Na samém vrcholu se, že je to, jak to děláme něco jako get int nebo získat řetězec. PHP tak, že má postavena v roce. Nepotřebujeme knihovnu CS50 ještě. Můžeme stačí použít Readline funkci. Co to udělá, je pro tisk out zprávu: "Tvůj stát, prosím, "a pak bliká řádku čekání uživatele na vstup nějaké informace. Teď si všimnout, co jiného můžeme udělat s vypínačem. Pokud jste použil předtím, Možná si vzpomenete, že spínač je omezena do značné míry na celá čísla a postavy, ale teď můžeme použít řetězce. A ve skutečnosti, příkaz switch v PHP je trochu flexibilnější než jeho bratranec z C. Smyček. Stejně jako podmínkové, všichni vaše staré oblíbené jsou tam pořád. Máme zatímco smyčky, které počítají od 1 do 100 v tomto případě. While jsme dělat Počítá se od 1 do 100, a máme pro smyčky Počítá se od 1 do 100. Takže tam žádný velký skok. Syntaxe je docela mnohem přesně stejný, s výjimkou teď jsme pomocí znak dolaru variabilní místo deklarování proměnných celé číslo, nebo něco takového pro naše pulty. Tady je místo, kde se věci dostat mnohem lepší než C, ačkoli. Pole. Takže Vzpomínám si, když jsme byli mluví o C, v pořadí pro nás růst a zmenšit soubory informací, jsme potřebovali vyřešit selhání k této myšlence propojeného seznamu, protože C pole byly stanoveny ve velikosti. Nemohli jsme zmenšit je. Nemohli jsme pěstovat je. Museli jsme přerozdělit paměti a dělat všechnu tuto šílenství nebo použijte propojené seznamy, které zabírají dost víc prostoru. Ale v PHP, pole jsou není stanovena ve velikosti ještě. Mohou dorůst a mohou zmenšit. Takže znovu, těchto 20 let, která existovala mezi prvním vydání C a první vydání PHP, Rozhodli jsme se, že víte, to by bylo opravdu skvělé pokud bychom mohli udělat. A tak jsme realizovali to. Takže PHP pole nejsou stanoveny velikost, a proto, že PHP není opravdu mají programátor přední VGA pojmy typů, můžeme míchat datové typy v našich polích, taky. Takže nemáme ani muset použít všechny celá čísla nebo všechny plovoucí body, můžeme mít mix všeho různé druhy v jednom poli. Deklarace pole je docela jednoduché. Je to stejně jako všechny ostatní proměnné. $ nums = array (1, 2, 3, 4), pole je funkcí , který je vestavěný do PHP, který vytvoří pole pro vás. To vytvoří pole čtyř hodnot, Čísla v tomto případě, volal $ nums. A je tu víc než jeden způsob, jak to udělat. A jdeme vidět hodně v PHP. PHP byl vyvinut mnoho různých lidí a roste a roste a roste. Tam je obvykle není jen dva nebo tři způsoby, jak něco udělat v PHP, tam je obvykle jako 10 nebo 20. Tady je jen další obyčejný způsob, jak deklarovat pole. $ nums = čtverečních bracket 1, 2, 3, 4. Tak tohle je trochu podobný úhlu C je br-- složenou závorkou notaci, spíše. $ - nebo že by bylo int nums náměstí držáky rovná složená závorka 1, 2, 3, 4. V PHP je to $ nums = náměstí držáky 1, 2, 3, 4. Oba tyto příklady, ale tady mi dát s polem čtyř v tomto případě celých čísel. Co když chci něco připínáček na teď? No můžu jen říct, $ nums 4, který Znovu, jsme stále počítat od 0 zde v PHP, by pátý prvek pole. Mohu jen říct, že. Nebudu trpět SEG chyba, protože moje pole je jen poroste ubytovat to. To je docela pěkné, ne? A ve skutečnosti, nemám ani potřeba určit, kde chci, aby to. Mohu jen říct to a jen připínáček to přímo až do konce, nebo jsem mohl dokonce jen říkají $ nums 20 nebo 1000. Je to opravdu nezáleží. Je to stále jen bude připínáček to přímo až do konce. Tak jsem se může růst, a my jsme as-- nebude pokrýt tady, ale mohu spojovat nebo pás Prvky z pole, jakož, a pole bude zmenšovat ubytovat že nyní chybí nebo je prázdný prostor. Je tu ještě jeden způsob, jak se křižovat něco, co se na pole, což je funkce nazvaná array_push. Takže znovu, právě tato myšlenka, že jsou schopný dělat věci mnoha různými způsoby. Takže jsme viděli tři různé způsoby, jak nyní křižovat další prvek na matici. Takže to přidává další prvek na konci $ nums pole. A můžeme míchat naše datové typy. Takže jsem mohl mít řadu ne 1, 2, 3, 4, ale 1, true, 3, 4, kde pravda je logická, a poté když chci přidají jiný prvek k tomuto poli, snad řetězec, řetězec "pět," já jsem mohl dělat, že. A teď můj array by být 1, true, 3, 4, pět. Slovo pět, ne celé číslo 5. Takže velká flexibilita tam. Flexibilita dostane ještě lepší, i když, proto, že PHP má podporu pro něco volal asociativní pole. A my jsme tak nějak neurčitě mluvil o asociativních polí v jazyce C v kontextu stoly mřížky, protože co asociativní pole jsou opravdu vše asi dělají klíč Hodnota pár mapování. A v tomto případě, pokud keys-- Jsme obeznámeni s poli z C, klávesy jsou indexy. 0, 1, 2, 3. A hodnoty jsou to, co jsme zjistili, že pole 0, pole 1, pole 2, a tak dále. Takže jsou klíče indexy, a hodnoty jsou to, co je v tomto umístění pole, stanovenými tímto indexem. Ale v PHP, nemusíme to dělat Pojem pole 0, pole 1, pole 2 už ne. Nyní můžeme použít aktuální slova mapovat klíče k hodnotám. A tak bych mohl říct něco takového. Mohl bych vytvořit pole pomocí hranatou závorku syntaxe takto. $ pizzy = hranatou závorku "sýr" a poté Tento druh dvojitou šipkou notaci, 8.99, "feferonky," šipka 10.99-- 9,99, a tak dále. A tak to, co se tady děje? Co mám vlastně dělat? Já jsem vytvořit klíčová hodnota pár mapování. Takže místo toho, říkal, například, pizzy 0, 1 ks, pizzy 2, Nyní mohu říci pizzy sýr, pizzy pepperoni, a odkazují na hodnoty jsou s nimi spojeny. Tak tady jsou naše klíče zeleně. Sýr, pepperoni, zeleniny, buvol kuře. Zde je šipka, která dělá Tento klíč mapování hodnotu dvojice. A pak tu jsou hodnoty na tomto místě pole. Takže je to jako říct pole 0 se rovná 8,99. Klíčem k úspěchu je 0. Hodnota je 8.99. Nyní mohu říci sýr pole, nebo v tomto případ pizzy sýr, sýr je klíč, a to, co najdu v pizzy sýr je 8.99. To je hodnota, která najdu tam. Takže můžu říct věci líbí. $ pizza sýr = 7,99. Řekněme, že jsem s prodejem. Chci dis-- chci k poklesu cena sýrové pizzy. Nebo mohu použít zeleninu pizza jako součást stavu, nebo mohu přidat nový element k mému pole, stejně jako jsem mohl dělat dříve. Mohu přidat nový element k tomu asociativní pole s klíčem "slaniny" a hodnota 13,49. Ale tento druh představuje problém, pokud si myslíte, že o tom na chvíli. Jak bychom iteraci tomto poli? Právo? V C, my bychom jen mít pro smyčku, typicky, že poběží od 0 do Velikost pole minus 1. Pole má n prvky na se platné indexy jsou 0 až n minus 1. Takže bychom mohli použít pro smyčku do krokovat každý jednotlivý prvek. Ale to není opravdu tento případ už, že jo? Tak kde máme pár hodnoty klíče Mapování kde klíče jsou slova, jak jsme se iteraci přes všechna slova? No, naštěstí, PHP má způsob, jak se vypořádat s tím taky, a tak budeme skočit zpět do smyčky na vteřinu zavést čtvrtou druh smyčky, které existuje v PHP s názvem smyčky foreach. A to, co dělá, je smyčka foreach je to v podstatě stejný nápad. Můžete ho použít pro jakýkoliv druh pole. Ale je to v podstatě Stejná myšlenka jako pro smyčka, s výjimkou toho, použití indexy, stačí mají takový divný syntaxi kde budete volat každý element název pro účely této smyčky. Takže v tomto případě, foreach ($ pole as $ klíče). V podstatě, jak tou poznámkou poznámky, uvnitř této smyčky foreach, to bude projít každý prvek $ pole, což je obvykle Bude asociativní pole, ale může být opravdu jakýkoliv druh pole že chcete v PHP. A pokaždé, že v cyklu for byste mohli řekl, $ pole hranaté závorky $ i, můžete jen říci $ klíč. Takže $ key stane alias pro každý Index PHP asociativní pole, a tak jej můžete použít takhle. Tak například, máme Nyní dostali náš pizzy pole. Já jsem trochu zastrčil do tam rohu takže ji můžeme použít k tomu rychlý příklad. Když řeknu foreach ($ pizzy as $ pizza), no, co se děje? No, já jdu iterovat každý jednotlivý prvek pole $ pizzy, a přitom budu volat každý prvek, když jsem uvnitř těla, které pro smyčky, $ pizzu. Takže je to něco jako stand-in, připomínají, že $ pizza je stand-in pro pořekadlo $ pizzy hranaté závorky $ I Pokud bychom použili pro smyčky, kde jsme může jít od $ i = 0 až, v tomto případě, $ i = 3. Pokud bychom neměli klíče a hodnoty, zde, by to bylo element 0, 1, 2, 3, a my bychom použít pro smyčce jít $ 0, $ pizzy pizza 1, $ 2, pizzy $ pizzy 3. Takže teď jen $ pizza střídá pro tento individuální klíč. Takže to, co se to bude tisknout? Já vytisknout $ pizzu. Co mám najít at-- když jsem vytisknout $ pizzy, $ i? Právo? Jestli mám vytisknout i-tá prvek pizzy, co budu tisknout? Jdu pro vytištění Hodnoty na tomto místě, že jo? Stejně jako když jsme dělali to v kontextu C, my obvykle nepoužívají naší iterátoru variabilní, int i = 0, i je menší než 3, i ++, vytisknout 0, 1, 2, 3. Jsme vytištění pole 0, pole 1, pole 2, 3 pole. A tak to, co to vypíše je to. Je to seznam cen. 8,99, 9,99, 10,99, 11,99. Nyní krátká poznámka zde. Smyčky foreach nemusí nutně vytisknout věci do pořádku. To není zaručena. Je to obvykle dělá. Je to obvykle na základě objednávky v které prvky jsou přidány do pole, tak jen to mít na paměti. To nemusí být v pořádku. Ale foreach smyčky bude opakovat po každé jednotlivé součásti matice se jedná. V tomto případě se opět, že pole je $ pizzy. Mohu změnit syntaxi, i když, pokud Chci jak klíč a hodnotu. Místo toho, říká $ pizzy as $ pizzy, mohu říci toto. A když se podíváte na to, co jsem zvýrazní zeleně tady, to vypadá jako klíčový mapování hodnota páru. A tak pokud vás--, i když nejste úplně jistý, co to bude dělat, asi tušíte že $ poleva se děje být klíčovým v tomto případě, a $ cena bude hodnota. Takže jsem náhradou teď každý prvek z $ pizzy jako dvojici klíč hodnota, a teď může odkazovat ke klíči a je hodnota, která by v vhod, například, následujícím způsobem. "Celá" - to je hodně tisk děje here-- "celku" poleva "pizza stojí $" cenu, a poté I vytisknout období a zpětné lomítko n. Takže teď, oznámení zase mám přístup k klíč, $ poleva, a hodnotu, $ cena. Takže můžete hádat, co to se chystá vytisknout? Je tu spousta tiskových prohlášení, ale je tu jen jedna zpětné lomítko n, tak to bude něco, co tisknout na entire-- na jeden řádek kódu. Mohu-li odkazovat na klíč a hodnota, pak nyní, místo toho tak, že v vytisknout cen, Mohu vytisknout něco takového. "Celý sýr pizza stojí $ 8,99." A teď jsem pomocí všechny keys-- sýr, feferonky, zeleniny, buvol chicken-- a hodnoty. 8,99, 9,99, 10,99, 11,99 So to je jen jiný způsob, jak dělat smyčky foreach, že namísto jen dávat přístup k hodnotám, to prostě dává vás-- To vám dává přístup ke klíčům a hodnotami. Takže vytisknout informace. Už jsem to udělal pár různé způsoby, možná jste si všimli. Tyto dvě funkce máme v první řadě Viděl jsou tisk a echo. A pro skoro všechny záměry a účely, jsou přesně stejné. They're-- je tu velmi jemné Rozdíl to ani nestojí dostat se do, ale v podstatě všude můžete použít tisk můžete pravděpodobně používat echo stejně. A to není jen dva. PHP má hodně odlišný způsoby tisku věci, a má také způsoby, jak integrovat Proměnné do středu řetězce. A tak vzpomínám z C, viď Pamatuješ si, co funkce můžeme použít nahradit proměnné do věcí, chceme vytisknout? Pravděpodobně jste použít fungují docela hodně. printf, že jo? Takže to je to, co jsme měli předtím uvnitř z kontextu našeho foreach smyčky. Měli jsme těchto pět samostatné tiskové prohlášení, proto, že byl jediný tak, jak jsem vlastně nevěděl, v té době jak tisknout zprávy. Nevěděl jsem, jak integrovat Proměnná $ poleva mi do PHP kódu. No, když jsem prostě vzít divoké hádat, printf, že ve skutečnosti by to fungovalo. printf je funkce, která mohu použít V PHP, stejně jako já ji použít v C. A tak něco takového, printf, Znovu, jsme obeznámeni s tím. První% s nahrazuje s hodnotou $ polevou. Druhý% s nahrazuje s hodnotou $ ceny. A tak jsem interpellating, což je jen ozdobný způsob, jak říkat Já jsem nalepení proměnné do tohoto umístění. Takže jsem zapojením $ zálivka, kde je red% s je cena $ a kde je modré% s je, a pak bych dostat zprávu, "Celý sýr pizza stojí $ 8,99." Není to jediný způsob, jak mohu udělat to, ačkoli. Možná, že bych chtěl použít tuto metodu. To je vlastně to, co je nejčastěji volal variabilní interpelace. Mohu použít echo. Mohl bych použít tisk také, jak uvidíme. Ale co se tady děje? Za prvé, musím uniknout znak dolaru. Vzhledem k tomu, pamatujte, že když jsme byli vlastně vytištění ceny pizzy, Ve skutečnosti jsem formátování je jako peněžní postavy s znak dolaru. Ale my jsme s použitím znaky dolaru také zastupovat názvy proměnných v PHP, a zejména, když jsem použití této metody na kudrnaté rovnátka variabilní metoda interpelace, potřebuji uniknout můj dolaru, takže to není myslím, že mluvím o proměnné. Bude to vlastně, doslova vytisknout znak dolaru. Tak nějak to analogize to, co vidíte na tam na konci. To není ve skutečnosti vytisknout zpětné lomítko n, že jo? To vytiskne znak nového řádku. To je-- to nebude vytisknout zpětné lomítko znak dolaru, že to bude jen vytisknout Znak dolaru znak. Stejný nápad. Útěk sekvence, co tyto věci jsou nazývány. Ale všimněte si, že já nedělám nějaký druh% s substitucí, Jen jsem doslova zapojíte v těchto proměnných. A tak v tohle-- co by se stalo zde je to, že hodnota $ topping-- znovu jen držet s tím, co jsme byli mluví o tak far-- sýru by se zapojen tam. A $ cena by byla, co je hodnota na pizzu, hranaté závorky, sýr, který byl 8,99. A tak by to také vytisknout "Celý sýr pizza stojí $ 8,99." A jak jsem řekl, jsem mohl použít vytisknout zde místo echa, a funkce bude skoro přesně stejný. To by vytisknout totéž. Je tu ještě jeden způsob, jak to udělat, a to je další výhoda PHP práci s řetězci. Můžeme si dělat, zřetězení. Mohli bychom to udělat v C, taky, pomocí funkce s názvem strcat, ale zase jsme museli volání samostatné funkce. To byl celý tento nepořádek dělat. Museli jsme libru-zahrnout string.h. Byla to výroba, ne? Ale teď už stačí použít tento skalární operátor zřetězit řetězce dohromady. Takže jsem zřetězení "celek" a pak bez ohledu na hodnotu $ zálivky je, a pak další string, "náklady pizza $" a poté, co zřetězení hodnota $ ceny je, a pak v samotném závěru, že jsem připínání na období zpětného lomítka n. A tak to by také vytisknout "celek" - opět, Když už se bavíme o první prvkem této pizzy array-- "Celý sýr pizza stojí $ 8,99." Období, zpětné lomítko n, opět s na $ polevou a $ cena substituce za to, co jsme je uvedeno v našich foreach smyčka jako mapování klíčové hodnoty páru. PHP zvládne funkce. Funkce byly druh nedílnou C, jak jsme viděli. Stejně jako proměnných, my nemusíme určit návratový typ funkce, protože to opravdu nezáleží. A nebudeme specifikovat datové typy parametrů, protože opravdu nemám ohledu na to, jak jsme viděli v PHP. Každá funkce je představen pomocí klíčového slova function. To je to, jak jsme se naznačit, PHP, který to, co jsme mluvili jen o funkce. A my nemusíme vypořádat s hlavní vůbec, protože tlumočníka, PHP tlumočník, pracuje od shora dolů, bez ohledu. Považuje-li to můžete udělat volání funkce, bude to jít najít volání funkce, i když se jedná později. Ale bude to čtou shora dno, takže se není třeba zadávat, Zde je místo, kde začít. Můžete začít na řádku 1 z vašich PHP a pracovat odtamtud. Tak tady je, jak bychom vytvářet funkce nazvaná hard_square. Je to prý trvá jeden parametr, který volám $ x. Tato funkce je komplikované jen ilustrovat různé věci. Pořád máme návratové hodnoty. Jsem pomocí cyklu for sem. Ale je to v podstatě jen, co to činí je pouhých $ x $ x krát. To, co jsem vlastně dělat, je pouhým přidáním x 0 x krát nebo $ x nula $ x krát. Ale to je přesně to účinně stejné jako násobení $ x krát $ x. Pořád vrátit hodnotu, v tomto případě $ výsledku, a já jsem udělal funkci v PHP. Zde je návod, jak ji může používat v kontextu. Takže možná, že jsem uvnitř nějakého souboru PHP. Všimněte si, že tam v modrém Použil jsem své oddělovače PHP, úhelník otazník php. Mezi těmi jsou splněny všechny PHP, že chci psát. Takže jsem zřejmě bude get-- Chystám se vyzve uživatele mi dát číslo, obchod, který proměnná, obchod v této proměnné $ x, všechno, co mi dal. Pak budu echo hard_square této hodnoty, a zřejmě bude k obratu na nový řádek jakož i, a pak o něco později budu vymezit funkci hard_square tak že když udělám zavolat na hard_square, že ví, o čem mluvím. A teď, mohl bych také udělat něco takového. To je trochu odlišný. Je to přesně téměř stejně jako to, co jsme viděli předtím, s výjimkou toho, jak říkat jen $ x tam jako parametr pro hard_square, Říkám $ x = 10. Tak to je příklad defenzivní programování, střežení programy proti uživateli se zlými úmysly. To je jeden způsob, jak udělat nějaké chyby ověření, zda jsme opravdu mají jako možnost v C. Mohli bychom nikdy zadat výchozí hodnotu něčeho. Vždycky jsme měli zkontrolovat zda je, například, pokud jsme udělali výzvu k getString, to bylo nejvhodnějším pokud okamžitě poté, co ověřil, že, jsme ověřili zda řetězci že uživatel nám dala není rovno null, protože nechceme začít práce s prázdným řetězcem. Zde, je to způsob chránit proti tomu. Pokud uživatel nám neposkytuje něco nějak, co budeme dělat? No, prostě budeme říkat, co neměli nám poskytují, my jen tak místo toho připojit 10. Takže když nedali nám hodnotu, stačí použít 10 ve výchozím nastavení. A tak tady, Všimněte si, že dělám výzva k hard_square, ale není žádná výzva pro uživatele, že jo? Já jsem jen dělat prázdný volání. Ale moje funkce hard_square očekává parametr. Co se to bude tisknout? Bude to vytisknout 100, ne? Protože uživatel ne dej mi nic. A tak jsem jen tak předpokládat, že 10-- 10 je výchozí hodnota. A tak by to vytisknout out 100 na vlastním řádku. PHP soubory nemají na být jen jeden soubor. Můžete kombinovat více souborů dohromady, stejně jako je to možné v C. Cesta jsme, že v jazyce C byla typicky dělat #include se dostat hlavičkové soubory zajel. Nechceme udělat v PHP. Děláme něco jako require_once. A pak je tu celý tento věc, co je to __dir__? To je jen speciální variabilní, nebo speciální konstantní, Opravdu, který určuje, co váš aktuální adresář. A tak to bude vypadat v aktuálním adresáři pro soubor s názvem cs50.php v tomto příkladě, a to bude držet tento soubor v horní části programu PHP, za předpokladu, že jste dal require jakmile řádek v horní části souboru PHP. Takže PHP je primárně používán, ale ne výhradně používá, jako jazyk pro webové programování. To je opravdu, jak to přišlo být. Ale je to full jazyk, jak jsme viděli. Viděli jsme skoro všechny ty věci, že to může dělat, že jsou podobné C, a to může udělat sakra mnohem víc než to. Ale protože je to plná jazyk a my může udělat programování z příkazového řádku v něm. Můžeme spustit programy příkazového řádku. Vše, co je potřebné, abyste spustit příkaz linka program, který je napsán v PHP je to, že budete mít tlumočníka PHP. Takže je to něco analogický má kompilátor v systému Chcete-li zkompilovat C kód proměnit spustitelné soubory. Musíte mít tlumočníka PHP která existuje v systému takže můžete interpretovat PHP soubory. Za předpokladu, že jste, a obvykle tento interpret se nazývá PHP, a to je obvykle dodáván s většinou stahování nebo instalace PHP že můžete získat on-line, a jistě jméno tlumočníka PHP máme v CS50, IDE. Vše, co udělat, je typ php souboru. A jaký je váš program chystá udělat, je, že je to se projít tlumočník, je to bude ignorovat vše, co je není mezi otázce mark-- nebo, úhelník otazník php, oddělovače PHP, a vytisknout, a to bude interpretovat a spustit kód uvnitř vašich oddělovače PHP. Takže pojďme pop se k CS50 IDE a se podívat na pár PHP soubory, běží několik PHP soubory, v příkazového řádku rozhraní CS50 IDE. Tak tady jsme v CS50 IDE, a já jsem dovolil otevřít soubor s názvem hello1.php. A zdá se, že obsah tohoto Soubor jsou jen oddělovače PHP tam, a mezi tím, echo ("Hello, World"). To je docela jednoduchý PHP programu. Já jsem prostě jít posunout dolů do mého okna terminálu tady, a budu psát php hello1.php, stiskněte klávesu Enter. Ahoj světe. To je asi to, co jsme byli očekává, že k tomu, že jo? Pojďme nahoru a vzít jiný pohled na programu. hello2.php. Víceméně totéž, není mnoho děje tady. Tentokrát však, budu výzvu Uživatel dát mi jejich jména. Já používám tuto funkci readline znovu. $ name = readline. To je výzva, "Jak se jmenuješ?" Zřejmě Jsem tisk to na vlastním řádku. A pak, takže linie níže to bude výzva kde uživatel může zadat své jméno. A pak jsem pomocí trochu proměnná interpelace tady na lince 3 vytisknout "ahoj" a co uživatel zadá. Tak tohle je analogický k tvrzení, Dobrý den, čárka,% s, když jsme používali printf v C. Takže pojďme a interpretovat tento program. Takže znovu, budu posunout dolů k mému okně terminálu. php hello2.php. Jak se jmenuješ? Doug. Dobrý den, Doug. Mám také další soubor s názvem hello3.php. Chystám se pročistil displej s Control L, a budu vykonávat to. Jak se jmenuješ? Doug. Dobrý den, Doug. Takže chování je identické hello2.php, ale proč je to hello3.php? No, tady je ten rozdíl. V tomto případě oznámení že na lince 1 zde, Mám něco, co není mezi oddělovače PHP. Já jsem jen tisk out-- nebo I právě zadali, "Jak se jmenuješ?" Když interpret PHP vidí, ho nemá ponětí, jak ji vykládat jako PHP, a tak místo toho selhání, je to jen bude vyplivnout. Takže si všimnout na řádku 3, můj volání readline, není výzva ještě. Jen jsem vlastně děje, když to-- interpret PHP vidí, to bude k vytištění "Jak se jmenuješ?" Pak se uvidí, oh, OK, here's-- vše ostatní bude interpretovány jako PHP, tak že je důvod, proč to funguje. Já nemusím nutně výzva uživatel to-- vnitřek readline, Já si jen mít to venku z oddělovače PHP a umožnit tlumočníka jen vytisknout pro mě. Takže nemáte skutečně mít pouze mít jednu sadu oddělovače PHP ve vašem programu. Můžete si skutečně mít několik z nich, otevírání a zavírání je podle potřeby. Takže pojďme se podívat na pár programů V CS50 IDE, kde jsme ilustrují tuto myšlenku mít více sad vymezeném PHP. OK, tak jsem otevřel soubor zde volal add1.php. A všimněte si, co se tady děje. Stejně jako předtím, mám jeden PHP soubor oddělovače. Jdu pro vytištění hlášení, "Prosím, dejte mi číslo." Pak budu číst linku a uložit jej do proměnné $ num1. Pak jsem Chystám se vytisknout znovu. Dej mi druhé číslo. Přečtěte si linku od uživatele, obchod všechno, co napsal ve v $ num2. Přidejte je dohromady a uložit, aby vést k proměnné nazvané $ součet, a pak vytisknout "The Součet těchto dvou čísel je, "a pak interpelovat tam proměnná $ částka. Takže pojďme stačí spustit tento přes tlumočníka potvrdit, že tohle je to, co očekáváme. php add1.php. Prosím, dejte mi číslo, 3. Prosím, dejte mi druhé číslo, 4. Součet těchto dvou čísel je 7. To je 3 plus 4. DOBŘE? Takže nic hrozně fantazie tam. A teď pojďme otevřít add2.php. Tady, mám pár PHP oddělený soupravy tam, že jo? Linky 1, 3-- řádky 1 a 3 nemají žádné oddělovače PHP. Takže když tlumočník vidí, že je to jen bude vyplivnout přesně to, co jsem napsal tam. Tak to je, kde jsem si dělá všechno moje výzvy. Na tratích 2 a 4, vidíme velmi povědomý $? php druh oddělovače, takže tyto dva řádky chystá spustit jako PHP. A pak na řádku 5, to mám divné tady, ne? Tento úhelník otazník rovnítko. Budu dokonce přiblížit trochu dál. Můžete vidět, je to, co chci mluví o právě tam, tento $? =. Ukazuje se, že je to tak běžné, že důvod, že jsme otevřít soubor PHP oddělovače je vytisknout hodnotu. A to je vše, co se chystáte udělat. Ale je tu i zkratka pro to. $? = Je zkratka pro PHP říká, něco jako $? php echo součet z num1 a num2. Takže je to jen další zkratka pro to. Takže když jsem spustit tento program, php add2.php. Budu přiblížení se trochu. Prosím, dejte mi číslo, 4. Prosím, dejte mi druhé číslo. A protože jsem opravdu nestarám o datové typy v PHP, mohu říci, 4.8. Součet těchto dvou čísel je 8.8. Tato funkce se chová docela hodně přesně to samé, jako bychom očekávali, také. A mám ještě jednu otevřel sem volal dice.php. Zkuste to znovu. Mám jednu více zde nazvaný dice1.php, který také, viz, má tento úhel konzoly otázku označit rovnítko notace tam, ale všimněte si, že v tomto případě nejsem volání funkce rand, který jako vy dalo očekávat vygeneruje náhodné číslo. "Válcované jsi," a bude to vypočítat nějaké náhodné číslo, mod 6 + 1. Takže to mi dát číslo v rozmezí od 1 do 6. Pamatujte si, že mod 6 by mi číslo v rozmezí od 0 do 5, ale když jsem simulovat hodů kostkou, což je to, co tady dělám, Nechci tyto kostky jít z 0 až 5, já chci kostky, které jdou od 1 do 6. A tak to je způsob, jak se dostat me v rozmezí od 1 do 6. Dělám to dvakrát. Tak prý jsem válcování dvě kostky v tomto programu. Tak jsem si pročistit obrazovku, a udělám php dice1.php. Můžete válcované 4 a 2. A když jsem spustit program znovu, přivalil 5 a 5. Takže pokaždé, když jsem se spustit program, Začínám různá čísla, proto, že pokaždé, když jsem dělat ano, je to nový začátek. Bude to vytvářet nové sada náhodných čísel pro mě. Takže pokud jsme zvyklí spouštění programů z C, jsme zvyklí psát ./ název programu, je to tak? To je, jak jsme udělali vše, z našich programů v C tak daleko. Můžeme to udělat v PHP, stejně tím, že přidá něco, co nazývá shebang na vrchol našeho souboru PHP. Já vím, je to trochu hloupé slovo. Je to zkratka pro hash třesku. To je první dva znaky tam. Pamatujte si, říkáme vykřičník často bang ve vědě o počítačích. Rovněž by mohlo být pro ostrý třesku. Je tu pár způsobů, jak ji interpretovat. Ale je to v podstatě zvláštní druh velení, že interpret PHP chápe jako, oh, chci můžete spustit tento program, což je zřejmě / uživatel / bin / php, který je vlastně kdy tlumočník PHP konkrétně žije v našem systému. Tak it's-- co se stane, je zde tlumočník chápe, oh, Mám prý měla používat v tomto programu na spuštění tohoto souboru. A tak to vám umožní přeskočit kroku aby musel říct php something.php. Je tu ještě jedna další háček tu, která je, že pokud budeme aby naše programy na fungovat podle očekávání, my musíte udělat něco, co nazývá změna oprávnění souboru. A budeme go-- a budeme mluvit trochu bit další změny oprávnění o souboru v naší video na MVC, ale postačí říkají, že to je to, co musíte udělat, tak, aby vaše .php soubory spustitelný. Takže pojďme se podívat na to, jak náš poslední příklad než v CS50 IDE. Tak tady v IDE Mám dva soubory v této PHP adresář, který nezdá být volal .php. Mám funkce nazvaná add-- Mám soubor s názvem ADD3 a soubor s názvem dice2. Takže pojďme se rychlou vypadat a otevřít ADD3. A jak můžete vidět, na začátku mého souboru Mám shebang, že jo? Tento hash značka vykřičník. Nyní, budete také možná budete Všimněte si, že z nějakého důvodu, Nemám žádnou syntaxi zvýraznění už, a to je to, co jsem zmínil dříve, což bylo, že pokud nemám nazvat svůj soubor .php, nemám výhodu syntaxe zvýraznění ještě. Tento soubor je právě volal ADD3. Takže můžu spustit později s ./ ADD3 a ne ./ add3.php. Takže je to stále reason-- v pořádku, je to stále platný PHP, ale to není syntaxe zvýrazněny, protože tento soubor není volána something.php. To je jediný skutečný rozdíl tady, plus shebang. Tak uvidíme, co se stane, když Snažím se spustit tento program. ./ ADD3, stejně jako bych s C. Bash. ./ Povolení ADD3 odepřen. To je to, co budete zjistit, jestli jste zapomněl použití příkazu chmod ke změně oprávnění souboru. Jak se ukázalo, pravidelné PHP soubory nelze jen být provedeny. Ty mohou být interpretovány, ale my jsme dělá něco tady trochu jiného. Jsme spuštěním. A tak musím přidat oprávnění popravy, chmod a + x do ADD3. Pak mohu říci ./ ADD3. Prosím, dejte mi číslo. 5, 6. Součet těchto dvou čísel je 11. Stejně tak, jsem již chmoded dice2, tak jsem si jen zadat ./ dice2, jste válcované 1 a 1, vy válcované 5 a 4, a tak dále. Tak to je docela hodně Myšlenka syntaxe PHP, že jo? Je tu hodně projít, já vím. Ale doufejme, že jste teď viděli, že PHP není opravdu tak odlišné od C a nám opravdu dává možnost vzít věci do zářezu nebo dva. Nemáme opravdu mít strach moc about-- my opravdu muset starat příliš o podrobnosti o low-úrovni se musel obávat s C, ne? Můžeme se soustředit na vyšší level věci, které PHP nám umožňuje dělat a brát za samozřejmé, že to bude fungovat pro nás. Tak nám to dává možnost teď, přechodu z C do PHP, aby programy, které jsou mnohem více komplexní a možná mnohem robustnější. Takže doufám, že se budete bavit práci s PHP, a já jsem Doug Lloyd. To je CS50.