[Powered by Google Translate] [§ 8 - Viac Pohodlné] [Rob Bowden - Harvard University] [To je CS50. - CS50.TV] Tieto poznámky týždeň sekcia sa bude pekne krátka, tak som len tak stále hovoriť, vy sa chystáte udržať pýtať, a my sa pokúsime naplniť toľko času, ako je to možné. Veľa ľudí si myslí, že to Pset nie je nutne ťažké, ale je to veľmi dlho. Pset spec sám vezme hodinu čítať. Dáme vám veľa o SQL, čo by mohol potrebovať. My vás prevedie mnohými, takže by to nemalo byť také zlé. Má niekto začal alebo skončil? Je to posledná Pset. Ach, môj Bože. Obvykle je tu JavaScript jeden po tomto, ale veci kalendárny zmena robí všetko 1 týždeň kratšie, a my už majú PSet JavaScript. Neviem, ako to ovplyvní, či JavaScript bude zobrazovať na skúšku alebo Kvíz 1. Viem si predstaviť, že to bude niečo ako, čo potrebujete vedieť veci vysokej úrovne o JavaScriptu, ale pochybujem, že by sme len vám rovno kód JavaScript pretože ste nemali PSet v ňom. Ale to bude vec na preskúmanie kvíz budúci týždeň. Sekcia otázok. Mnoho z týchto vecí je trochu zle formulované, ale budeme diskutovať, prečo. Na rozdiel od C, PHP je "dynamicky napísaný" jazyk. Čo to znamená, pýtate sa? No, rozlúčiť so všetkými z tých char, float, int, a ďalšie kľúčové slová budete musieť použiť pri deklarovaní premennej a funkcie v C. V PHP, je premenná je typu určená hodnotou, že je to v súčasnej dobe drží. Takže ako sme zadajte tento kód do súboru s názvom dynamic.php, PHP je dynamicky zadali. To je pravda. Nesúhlasím s tým, že to znamená, že sme sa rozlúči s char, float, int, a ďalšie kľúčové slová. Presný rozdiel medzi dynamicky napísaný a subsidiárne, ktorá je staticky napísaný, je to, že dynamicky napísaný, všetky vaše kontrolu typu a tak sa deje v behu, zatiaľ čo staticky zadali to stane v čase kompilácie. Slovo statický všeobecne sa zdá, mysli veci kompiláciu. Myslím, že existujú aj iné využitie pre neho, ale v C, keď vyhlási, statickú premennú, jeho skladovanie je pridelené v čase kompilácie. Tu, dynamicky napísaný len znamená, že - V jazyku C, ak sa pokúsite pridať reťazec a celé číslo, keď ho skompilovať to bude sťažovať, pretože to bude hovoriť, že nemôžete pridať int a ukazovateľ. To jednoducho nie je platná operácie. To je ďalšia vec, ktorá sa dostaneme do druhého. Ale to druh kontroly, skutočnosť, že sa sťažuje, v čase kompilácie, je statická kontrola typu. Tam sú jazyky, kde nepotrebujete hovoriť char, float, int, a všetky tie veci, ale jazyk môže povedať, z kontextu veci, aký typ to má byť, ale je to stále staticky zadali. Takže ak budete mať 51, OCaml, už nikdy nebudete musieť použiť niektorý z týchto typov, ale to ešte bude v dobe kompilácie povedať, že nemôžete urobiť, pretože ste miešanie int a reťazec. Dynamicky napísaný len znamená, že niekedy počas behu budete si sťažnosť. Ak sa tiež používa Java predtým, všeobecne, takmer všetky C-typ jazyka sa bude staticky napísaný, tak C, C + +, Java, všetky z nich sú všeobecne staticky zadali. V Jave pri kompilácii niečo a vy hovoríte, string s sa rovná nové niečo, čo nie je reťazec, že sa to sťažovať, pretože tieto typy jednoducho nezodpovedajú. To bude sťažovať v čase kompilácie. Ale tiež to má nejaký dynamický čas veci páčia, ak sa pokúsite přetypovat niečo k typu, ktorý je konkrétnejšie ako jeho bežného typu, nič to môže robiť v čase kompilácie, aby skontrolovať, či obsadenie je uspieť. Java má tiež nejaký dynamický typ kontroly, že akonáhle sa dostane k tejto priamke kódu keď je to vlastne realizovať, bude to robiť obsadenie, či že obsadenie bolo platné v prvom rade, a ak to nebolo, potom to bude sa sťažovať, že máte neplatný typ. Dynamický typ kontroly. Napíšte toto do súboru s názvom dynamic.php. Dynamic.php. Budem unzip, že formátovania. Máme premennú, musíme nastaviť tak, aby celé číslo 7, potom budeme tlačiť a% s - Oh, my tlače typ, takže GetType bude vrátiť typ premennej. Sme len tlačou typ znovu a znovu. Práve sme php.dynamic.php. Uvidíme, že sa zmení z integer na reťazec do Booleovské hodnoty, ako sme prejsť. V C nie je Dátový typ Boolean, nie je dátový typ reťazec. Tam je char * a Boolean len býva int alebo char, alebo tak niečo. V PHP tieto typy existujú, a to je jeden z veľkých výhod PHP nad C - že reťazec operácie sú neporovnateľne jednoduchšie v PHP ako C. Sú jednoducho fungovať. Tak sme sa vrátili sem. Bežali sme dynamic.php. Toto hovorí PHP interpret, s názvom php, spustiť PHP kód v dynamic.php. Ak máte nejaké chyby v súbore, bude tlmočník povedať! Interpret, to je ďalší veľký rozdiel medzi PHP a C. V C budete musieť kompilovať niečo a potom spustiť tento skompilovaný súbor. V PHP nikdy čokoľvek kompilovať. Takže interpret PHP je v podstate len čítate tento riadok po riadku. Dáva var = 7, potom sa dotkne printf potom narazí var potom narazí printf a tak ďalej. Tam je trochu zostavovaní sa tak stane, a to ukladá výsledky takže ak spustíte skript neskôr si môžete urobiť nejaké, ale v podstate je to riadok po riadku tyhle veci. To znamená, že veľa optimalizáciou, ktoré dostaneme v C, ako kompilácie, je to len všeobecne kompilátor môže urobiť veľa trikov pre vás. To môže uzavrieť nepoužívané premenné, môže vykonávať všetky tieto druhy vecí, to môže robiť rekurzia chvosta. V PHP nie ste dostane túto výhodu pretože je to len tak, kto vykonávanie riadok po riadku po riadku, a to naozaj nie je rozpoznať tieto veci tak ľahko pretože to nie je 1 big compilation priechod cez vec a potom prevedení; je to len riadok po riadku. Tak to je interpret. Späť k nášmu dynamickému typovanie: docela v pohode, nie? Tie určite by to robiť v C! Teraz, uvidíme, či môžete prísť na typ každého z nasledujúcich hodnôt. Pozri tento pre referenčné. Tak 3,50. Aký typ si myslíte, že to bude? Tu sú typy, ktoré máme. Máme bools, celé čísla, plávajúce body, struny, polia, objekty, a potom sa zdroja, ktorý je tak trochu nejasná. Myslím, že je to vlastne príklad. Potom je tu NULL. NULL je zvláštny typ. Na rozdiel od C, kde NULL je len ukazovateľ s adresou 0, v PHP, NULL, je jeho vlastný typ, kde platí len vec tohto typu je NULL. To je oveľa užitočnejšie pre kontrolu chýb. V C, kde sme mali tento problém, kde, ak sa vrátite NULL, Znamená to, že ste vracia ukazovateľ NULL alebo pomocou NULL znamenať chybu alebo všetky z toho zmätku sme v jednom bode. Tu, vracia NULL všeobecne znamená chybu. Veľa vecí sa tiež vrátiť false pre chybu. Ale bod je NULL typ, jediná vec, na NULL typu je NULL. Potom callback je ako môžete definovať niektoré anonymné funkcie. Nemusíte dávať Táto funkcia meno, ale nebudete musieť vysporiadať s to tu. Pri pohľade na jednotlivé typy, ktoré sa očakávajú, aby sme vedeli, Čo si myslíte, že typ 3,50 je? >> [Študent] Float. Jo. Takže tu, čo si myslíte, že typ to je? >> [Študent] Array. Jo. Prvý z nich bol plavák, druhá je pole. Všimnite si, že toto pole nie je ako pole C kde máte index 0 má nejakú hodnotu, index 1 má nejakú hodnotu. Tu sú indexy sú a, b, c, a hodnoty sú 1, 2, a 3. V PHP nie je žiadny rozdiel medzi asociatívnym poli a len pravidelné maticu ako by ste si mohli myslieť na to v C. Tam je len to, a pod kapotou pravidelný pole je len asociatívne pole kde 0 mapy do určitej hodnoty rovnakým spôsobom, akým sa mapuje na nejakú hodnotu. Z tohto dôvodu, môže PHP byť dosť zlé pre rýchle rýchly kód / benchmarking vecí pretože v C, keď používate pole viete, že prístup členom je konštantný čas. V PHP prístup člena je, kto vie, koľko času? Je to pravdepodobne konštantný, ak to hash správne. Kto vie, čo je to naozaj robí pod pokrievku? Vy naozaj potrebujete sa pozrieť na vykonávanie vidieť, ako to bude s tým vysporiadať. Takže fopen. Myslím, že tu povedzme PHP manuál fopen pozrieť sa na návratový typ. Vidíme tu môžete vyhľadať prakticky akúkoľvek funkciu v PHP manuáli a to je niečo ako manuálové stránky PHP. Návratový typ bude zdrojom. To je dôvod, prečo som si to, pretože sme sa naozaj definovať zdroj. Myšlienka zdroje, v C tak nejako dostal FILE * alebo čokoľvek; v PHP zdroj je vaše FILE *. To je to, čo budete sa čítať z, to je to, čo budete na zápis do. Je to zvyčajne externé, takže je to zdroj, ktorý môžete vytiahnuť veci z a hádzať veci. A konečne, čo je typ NULL? >> [Študent] NULL. Jo. Takže jediná vec, ktorá je NULL NULL. NULL je NULL. Jedným z rysov systému typu PHP (pre lepšie alebo horšie), je jeho schopnosť žonglovať typov. Keď napíšete riadok kódu PHP, ktorý kombinuje hodnoty rôznych typov, PHP sa bude snažiť urobiť rozumnú vec. Vyskúšajte každej z nasledujúcich riadkov kódu PHP. Čo vytlačiť? Je to, čo ste očakávali? Prečo áno alebo prečo nie? Táto skutočnosť o PHP je to, čo robí to, čo nazývame slabo napísané. Slabo napísaný a silno zadali, existujú rôzne spôsoby využitia týchto pojmov, ale väčšina ľudí používa slabo napísaný a silne zadali znamenať niečo také kde ("1" + 2), že pracuje. V jazyku C, ktorá nebude fungovať. Môžete si to predstaviť nefunguje. Veľa ľudí mix dynamickej písanie a slabú zadaním a statické písanie a silné písanie. Python je ďalším príkladom jazyka, ktorý je dynamicky zadali. Môžete hádzať okolo typy premenných, a to bude rozhodovať v behu nejaké chybové checkings. V Pythone to ide spustiť to a uvidíte ("1" + 2); a to sa nepodarí, pretože hovorí, že nemôžete pridať string a integer. V PHP, ktorý je rovnako ako dynamicky napísaný, že to nebude zlyhá. Slabá písanie má čo do činenia s tým, že to robí veci s typmi ktoré nie sú naozaj zmysel nutne. So ("1" + 2), viem si predstaviť, že je reťazec 12, dokážem si predstaviť, že je reťazec 3, Dokážem si predstaviť, že je celé číslo 3. To nie je nevyhnutne dobre definované, a my pravdepodobne bude k videniu že keď sme tlače ("1" + 2), je to asi skončí ako bytia odlišné ako tlač (1 + "2"). A to býva, podľa môjho názoru, k horšiemu. Tu sa môžeme pokúsiť tieto. Ďalšie malý trik o PHP je nemusíte skutočne zapisovať do súboru. To sa spustiť tento príkaz režimu. Takže php-r, potom môžeme hodiť do príkazu tu: "Print ('1 '+ 2)," a ja ti hodiť nový riadok. Táto tlačená 3. Vyzerá to, že vytlačí 3 a je to číslo 3. Takže teraz si to skúsime obrátene: "Print (1 + '2 '); Dostaneme 3, a je to tiež bude celé číslo 3? Úprimne netuším. Vyzerá to, že je v súlade. Tam je nikdy žiadne šance, že je reťazec 12 alebo niečo podobné, že pretože PHP, JavaScript a na rozdiel od Java príliš, má samostatný operátor pre zreťazenie. Spájanie v PHP je dot. Takže tlač (1 '2 '.), Bude nám 12. To zvyčajne vedie k zámene, kde sa ľudia snažia urobiť niečo ako str + = nejaká iná vec, že ​​chcú pridať na koniec svojho reťazca, a že sa to nepodarí. Musíte urobiť str = Tak nezabudnite zreťazenie v PHP je bodka. Ostatné veci skúsiť: print ("SK" + 50); Povedal som vám, že nie je nádej, že by to viedlo CS50 pretože zreťazenie nie je +. Čo si myslíte, že to bude skončiť? Úprimne nemajú absolútne žiadnu predstavu. Vyzerá to, že je to len 50. To vidí reťazec, a stavím sa, keď dáme 123CS - To vidí prvý reťazec, pokúsi sa prečítať celé číslo od neho alebo z neho číslo. V tomto prípade to vidí 123CS. "To nedáva zmysel, ako celé číslo, takže som len myslieť, že z 123." Takže 123 + 50 bude 173. A je to tu začne čítať to ako celé číslo. To nie je nič vidieť, tak to proste berie to ako 0. Takže 0 + 50 bude 50. To ja som za predpokladu to bude robiť niečo podobné. Rozmýšľam 99. Jo, pretože to bude trvať prvé - Tak 99. Tu (10/7), keby to bola C, čo by to vrátiť? [Študent] 1. >> Jo, by malo byť 1, pretože 10/7, je rozdelenie 2 celé čísla. Číslo deleno celé číslo bude vrátiť celé číslo. To sa nemôže vrátiť 1 bod čokoľvek, že by bolo, tak to len tak vrátiť 1. Tu tlače (10/7), že to bude skutočne interpretovať, že. A to znamená, že ak si naozaj chcete urobiť celočíselné zaokrúhľovania a podobné veci, ktoré, čo musíte urobiť, tlač (podlaha (10/7)); V jazyku C je to asi divné, že sa môžete spoľahnúť na celé číslo skrátenie pravidelne, ale v PHP nie je možné, pretože to bude automaticky premeniť na hotovosť. A potom (7 + true); čo si myslíte, že to bude? Hádam, 8, ak to bude vykladať ako pravdivé 1. Vyzerá to, že je to 8. Takže niečo, čo by sme urobili v posledných 10 minút, mali by ste absolútne nikdy robiť. Uvidíte kód, ktorý to robí. To nemá byť tak jednoduché, ako to. Tie by mohli mať 2 premenné, a 1 premenná sa stane, že reťazec a iné premenné sa stane, že int, a potom pridať tieto premenné spoločne. Vzhľadom k tomu, PHP je dynamicky napísaný a že to nebude mať žiadny druh kontroly pre vás a od tej doby je to slabo typovanie a pretože to bude len automaticky hodiť tieto veci dohromady a všetko bude všetko fungovať, je to ťažké, ani nevie, že táto premenná musí byť reťazec teraz, takže by ju pridať do tejto premennej, čo je celé číslo. Najlepšia prax je, ak je premenná reťazec, majte ju ako reťazec navždy. Ak je premenná int, majte ju ako int navždy. Ak sa chcete vysporiadať s celými číslami a reťazca, môžete použiť varsint - to je JavaScript. Intval. Robím to po celú dobu. PHP a JavaScript miešam sa všetko. Takže intval bude vrátiť celočíselnú hodnotu premennej. Ak sme sa prejsť v "tlače (intval ('123 ')); dostanete 123. Intval sám nie je robiť kontrolu pre nás, že je to iba číslo. The manuálne PHP, tam sú len toľko funkcie k dispozícii, tak tu si myslím, to, čo by som použiť, je funkciu is_numeric prvý. Hádam, že sa vrátil false. To je ďalšia vec, ktorú musíme prejsť, je. === Takže funkciu is_numeric ('123df "), mali by ste sa to brať ako funkciu is_numeric. V C budete musieť iterácii všetky znaky a skontrolujte, či každá postava je číslica alebo čokoľvek iného. Tu funkciu is_numeric bude to pre nás, a to sa vracia false. Takže keď som vytlačil, že to vytlačí nič, tak som tu porovnaní je vidieť, ste náhodou byť nepravdivý? A tak teraz je to tlač 1. Zrejme to vytlačí 1 ako pravdivý miesto tlače pravdivé ako pravdivé. Zaujímalo by ma, či mám print_r. Nie, to ešte robí 1. Vráťme sa späť k ===, == stále existuje, a ak budete hovoriť s Tommym povie == je úplne v poriadku. Ja poviem, že == je hrozné a nikdy by ste nemali používať. == Rozdiel je v tom == porovnáva veci kde môže byť pravda, aj keď to nie je rovnakého typu, vzhľadom k tomu, === porovnáva veci a prvé to sú kontroly, ktoré rovnaký typ? Áno. Dobre, teraz idem zistiť, či skutočne v porovnaní s rovnať. Tu získate divné veci, ako je 10 rovná - Poďme sa pozrieť, čo to hovorí. Takže ('10 '== '1 e1'); To vráti true. Má niekto nejaké dohady, prečo to vráti pravda? To nie je len o tom. Možno je to náznak. Ale keď som sa zmeniť na f - sakramentsky to! I naďalej používať úvodzovky. Dôvodom sú úvodzovky sú na mňa revať, je preto, že som si toto v úvodzovkách. Takže som mohol uniknúť úvodzoviek sem, ale jednoduché úvodzovky ľahšie. Takže ('10 '== '1 F1'); nevytlačí pravda. ('10 '== '1 E1'); vytlačí pravda. [Študent] Je to hex? >> Nie je to hex, ale je to blízko, že je to ako - 1E1, vedeckej notácie. Uznáva 1E1 ako 1 * 10 ^ 1 alebo čokoľvek. Tí sú rovné celé čísla. Ak sa nám to === potom to bude false. Vlastne som tušenie, či budeme robiť == čo (10 a '10abc ");? Dobrá. Tak to je pravda. Takže rovnako ako keď ste (10 + '10abc "), a to by bolo 20, tu (10 == '10abc '); je pravda. Ešte horšie sú veci ako (false == NULL); je pravda alebo (false == 0), je pravda, (false == []); Existujú podivné prípady - To je jedna z tých podivných prípadov. Všimnite si, že (false == []); je pravda. ('0 '== False); je pravda. ('0 '== []); Je false. Takže == je v žiadnom prípade tranzitívne. môže byť rovná b a môže byť rovná c, ale b nemusí byť rovná c. To je ohavnosť pre mňa, a vy by ste mali vždy používať. === [Študent] Môžeme to urobiť! == Rovnako? >> [Bowden] Áno. Ekvivalent by byť! = A! ==. To je vlastne vychovaný v PSet spec kde mnoho funkcií návrate - Použitie PHP je dobré o tom. Kladie vo veľkom červenom poli, "To vráti false, ak je chyba." Ale vracia 0, je úplne rozumný vec vrátiť. Premýšľajte o akejkoľvek funkcii, ktorá sa očakáva, že vráti celočíselnú hodnotu. Povedzme, že táto funkcia má spočítať počet riadkov v súbore alebo tak niečo. Za normálnych okolností, odovzdáte tejto funkcii súboru a bude to vráti celočíselnú hodnotu, ktorá predstavuje počet riadkov. Takže 0 je úplne primeraný počet, ak súbor je len prázdny. Ale čo keď odovzdať neplatný súbor a funkcia sa stane vrátiť false Ak odovzdať neplatný súbor? Ak ste práve robiť == ste nerozlišuje prípad medzi neplatný súbor a prázdny súbor. Vždy používajte ===. To je všetko z nich. V PHP, typ poľa sa líši od toho, čo ste zvyknutí v C. Naozaj, možno ste už všimli vyššie, keď ste videl, že to je typ poľa. Držiak Syntax je nová od PHP 5.4, ktorá je najnovšia verzia PHP. Než to si vždy museli písať poľa ('a' -> 1, 'b' -> 2. To bolo Konstruktor poľa. Teraz PHP konečne prišiel okolo pekné syntax púhych hranatých zátvorkách, ktorá je len o toľko lepší ako pole. Ale vzhľadom k tomu PHP 5.4 je najnovšia verzia, sa môžete stretnúť miesta, ktoré nemajú ani PHP 5.3. Cez leto sme narazili na tento problém, kde PHP 5.3 bolo to, čo sme mali na zariadenia, ale server, ktorý sme nasadili všetky naše študijné knihu a odoslať a všetky tie veci, aby Bol PHP 5.4. Nie je to vedel, sme vyvinuli v 5,3, tlačil na 5,4, a teraz zrazu nikto z nášho kódu funguje pretože tam sa stalo, že boli zmeny medzi 5,3 a 5,4 ktoré nie sú spätne kompatibilné, a máme ísť a opraviť všetky naše veci, ktoré nefungujú pre PHP 5.4. Pre túto triedu, pretože zariadenie má PHP 5.4, to je úplne v poriadku používať hranaté zátvorky. Ale ak hľadáte do vecí po internete, ak hľadáte nejakú druh poľa veci, s najväčšou pravdepodobnosťou budete vidieť kúzlo so syntaxou konštruktory Array, pretože to je už od PHP sa narodil a hranatá zátvorka syntaxe bol asi za posledných pár mesiacov alebo kedykoľvek 5,4 obišiel. To je, ako sa index. Rovnako ako v C, ako by ste index v hranatých zátvorkách ako $ pole [0], $ array [1], $ array [2], indexovanie rovnakým spôsobom, ak sa stalo, že sa vaše indexy že reťazca. Takže $ array ['a'] a $ array ['b']. $ Array [b]. Prečo by to byť v poriadku? To bude pravdepodobne generovať varovanie, ale stále fungujú. PHP inklinuje k tomu, že. To inklinuje len, "budem vás varovať o tom, ale ja som jednoducho ísť ďalej "A robiť, čo budem môcť." To bude pravdepodobne si to preložiť na reťazec, ale je možné, že v určitom okamihu v minulosti niekto povedal, define B, ktoré sa "HELLO WORLD". Takže teraz b môže byť konštantná a $ array [b] bude skutočne robiť "HELLO WORLD". Myslím, že v tomto okamihu, alebo aspoň naše PHP nastavenia, Ak sa pokúsite index do poľa, a že kľúč neexistuje, bude to nepodarí. Ja si nemyslím, že to bude len varovať. Alebo aspoň si môžete nastaviť tak, aby sa nielen vás varovať, že len rovno hore zlyhá. Spôsob, ako zistiť, či skutočne existuje taká index je isset. Takže isset ($ array ['HELLO WORLD "]) vráti false. isset ($ array ['b']) vráti true. Môžete kombinovať tejto syntax. Som si istý, čo to pole by skončiť, je - môžeme vyskúšať si to. Oh, potrebujem PHPWord. To je miešanie syntaxe, kde zadáte, čo je kľúč a nie je špecifikované, čo je kľúč. Takže 3 tu je hodnota. Ste výslovne povedal, čo jeho hlavný bude. Čo si myslíte, že jeho kľúč bude? [Študent] 0. >> Hádam 0 len preto, že je to prvý sme ešte neurčili. Môžeme skutočne urobiť pár týchto prípadov. Takže print_r je vytlačiť rekurzívny. Ak bude vytlačiť celý poľa. To by vytlačiť subarrays na pole, ak bola nejaká. Takže print_r ($ array); php.test.php. Vyzerá to, ako by dal 0. Je tu vlastne niečo mať na mysli, ale budeme sa vrátiť k nej v druhom. Ale čo keď som sa náhodou, aby sa tento index 1? PHP nerozlišuje medzi reťazca indexy a celočíselných indexov takže v tomto bode som práve definoval index 1 a môžem si robiť aj $ pole [1] a $ array ['1 '] a to bude rovnaký index a rovnaký kľúč. Tak čo teraz myslíš, že 3 bude? >> [Študent] 2. >> [Bowden] Hádam 2. Jo. Je to 2. Čo keby sme to je 10, to je 4? Čo si myslíte index 3 bude? Rozmýšľam 11. Môj odhad na to, čo robí PHP - a myslím, že som to videl pred - je to len sleduje, čo najvyšší číselná index to používal doteraz je. Je to nikdy priradiť reťazec index 3. To bude vždy číselná index. Tak to udržuje najvyššej k nemu patrí účelovo tak ďaleko, ktorý sa stane byť 10, a bude to dávať 11-3. To, čo som povedal predtým, všimnite si, ako je to tlačí toto pole. Vytlačí kľúče 10, kľúč 4, kľúč 11, tlačidlo d Alebo dokonca ideme - Asi som nemal dať 0, ale je to tlač 1, 2, 3, 4. Čo keď prejdem tu? Alebo poďme skutočne prejsť tieto 2. Teraz sa vytlačí 2, 1, 3, 4. PHP polia nie sú rovnako ako vaše pravidelné tabuľky hash. Je to úplne rozumné uvažovať o nich ako hash tabuľky 99% času. Ale vo svojich hash tabuľkách nemá zmysel v poradí, v ktorom boli vložené veci. Takže akonáhle vložíte ho do hash tabuľky, Predpokladám, že to nie je prepojený zoznam a vy ste mohli posúdiť v rámci prepojeného zoznamu ktorý bol vložený ako prvý. Ale tu sme sa vkladá 2 prvej a vie, kedy to tlače z tohto poľa, že 2 je na prvom mieste. Netlačí to len v ľubovoľnom poradí. Technické údaje štruktúra, ktorá je to s použitím je uložená mapa, tak to mapuje kľúče hodnôt a pamätá poradí, v ktorom boli vložené tieto kľúče. V podstate je to pre niektoré komplikácie, kde je to otravné skutočne - Povedzme, že máte poľa 0, 1, 2, 3, 4, 5 a chcete, aby sa index 2. Jedným zo spôsobov, ako to urobiť, pozrime sa ako to vyzerá. 0, 2, 1, 3, 4. Odstavenie sa stane odistí obe premenné a polia indexov. Takže unset ($ pole [2]); Teraz, čo sa to bude vyzerať? 2 je jednoducho preč, tak to je úplne v poriadku. Viac nepríjemné je, ak chcete, aby veci skutočne ako pole. Dám náhodných čísel. Teraz všimnete mojej indexy. Chcem, aby to byť len ako pole C, kde to ide od 0 do dĺžky - 1 a môžem určiť iteráciou cez to ako taký. Ale akonáhle som sa odistí druhý index, čo bolo v indexe 3 nie je teraz stal index 2. Namiesto toho to jednoducho odstráni tento index a teraz idete 0, 1, 3, 4. To je úplne rozumné. Je to len nepríjemné a vy budete musieť robiť veci, ako je pole spájať. Jo. [Študent] Čo by sa stalo, keby ste mali pre sláčiky a chceli by ste ísť cez všetky prvky? Keď to hit 2, by to dať niekedy? Iterácia cez pole. Existujú 2 spôsoby, môžete to urobiť. Môžete použiť pravidelné slučky for. To je ďalší zložitosť PHP. Väčšina jazykov, povedal by som, má nejakú dĺžku alebo ľan, alebo tak niečo označujúce dĺžku poľa. V PHP je to count. Takže count ($ array); $ i + +) Povedzme, tlač ($ array [$ i]); Notice: Undefined offset: 2. Je to len tak nepodarí. To je dôvod, prečo, z väčšej časti, už nikdy nebudete musieť iterácii pole, ako je tento. To by mohlo byť prehnané, ale už nikdy nebudete musieť iterácii pole, ako je tento pretože PHP poskytuje svoje foreach syntax, kde foreach ($ pole as $ item). Teraz, keď sme sa tlačiť ($ item); - Dáme prerokovávať v druhej -, že funguje úplne v poriadku. Spôsob, akým foreach pracuje, je prvý argument je pole, ktoré ste iterácie. A druhý argument, bod, vďaka každom priechode pre sláčiky to bude trvať na ďalšiu vec v poli. Takže pamätajte pole má rozkaz. Pri prvom až pre sláčiky, položka bude 123 potom to bude 12 potom zníži o 13, potom bude 23, bude to 213. Veci sa naozaj divne, keď robíte niečo také foreach. Pozrime sa, čo sa stane, pretože by ste nikdy nemali urobiť. Čo keby sme unset ($ array [1]); To bolo pravdepodobne očakávali. Tie iterácia tohto poľa, a zakaždým, keď budete zabezpečenie a odistení prvý index. Takže pre index 0, prvá vec, bod berie na hodnotu 0, takže to bude 123. Ale vo vnútri slučky for my unset index 1, tak, že znamená 12 je preč. Tak tlače. PHP_EOL. PHP_EOL je len riadok, ale je to technicky viac prenosný od konca riadkov v systéme Windows sa líši od konca riadkov na Mac a UNIX. Na Windows Newline je \ r \ n, vzhľadom k tomu, všade inde to býva, len aby sa \ n PHP_EOL je nakonfigurovaný tak, aby používal bez ohľadu riadok vášho systému je. Tak tlače, že. Poďme sa print_r ($ array) na konci. Nemal som tušenie, že by správanie. Bod stále trvá na hodnote 12, aj keď sme strážiť 12 predtým, než sme vôbec sa k nemu z poľa. Neberte moje slovo, ale vyzerá to, že foreach vytvorí kópiu poľa a potom sa položka nadobúda všetkých hodnôt tejto kópie. Takže, aj keď zmeníte pole vnútri slučky for, to bude jedno. Položka bude na pôvodných hodnotách. Poďme skúsiť odistenie ju. Čo keď je to $ array [1] = "ahoj"; Aj keď sme dali "hello" do poľa, bod nikdy netrvá na túto hodnotu. Je tu ďalší syntaxe foreach slučky , Kde môžete dať 2 premenných oddelených šípkou. Tento prvý premenná bude kľúčovým tejto hodnoty, a táto druhá premenná bude rovnaký presný položka. To je nezaujímavé tu, ale ak by sme sa vrátiť k našej pôvodnej prípade "A" -> 1, "B" -> 1, tu, ak sme len iterácii pre každé pole ako položka, položka bude 1 zakaždým. Ale ak chceme tiež poznať kľúč spojený s danú položku potom robíme ako $ key -> $ položky. Takže teraz môžeme urobiť tlače ($ key. ":". Teraz je to iterácie a tlač jednotlivých tlačidiel a ich pridružené hodnoty. Ďalšia vec, ktorú môžeme urobiť v foreach slučiek ich môžete vidieť túto syntax. Ampersand pred názvy premenných majú tendenciu byť ako PHP robí odkazy. Kde sú odkazy veľmi podobné ukazovatele, nemáte ukazovatele, takže nikdy rokovať s pamäťou priamo. Ale vy máte odkazy, kde 1 premenná sa odkazuje na rovnakú vec, ako iné premenné. Vnútri tu poďme robiť $ item. Poďme späť k 1, 10. Poďme urobiť $ item + +; To ešte existuje v PHP. Môžete stále robiť + +. php.test.php. Musím vytlačiť. print_r ($ array); Tlačíme 2, 11. Keby som práve urobil foreach ($ pole as $ item), potom položka bude hodnota 1 prvýkrát cez slučku. To bude zvyšovať 1-2 a potom sme hotoví. Takže potom to pôjde cez druhého priechodu slučkou a táto položka je 10. To zvýši položka 11, a potom to je len vyhodiť. Potom sme print_r ($ array), a pozrime sa, že je to len 1, 10. Takže prírastok sme sa stratili. Ale foreach ($ array as $ item a) Teraz táto položka je rovnaká položka toto právo tu. Je to to isté. Takže $ item + + je modifikácia pole 0. V podstate, môžete si tiež urobiť $ K -> $ položky a môžete to urobiť $ array [$ k] + +; Takže ďalší spôsob, ako robiť to, že sme slobodní zmeniť položku, ale to nezmení náš pôvodné pole. Ale ak budeme používať k, ktorý je naším kľúčovým, potom môžeme len index do nášho poľa pomocou, že kľúč a zvýšiť že. Tento viac priamo modifikuje našu pôvodnú ponuku. Dokonca si môžete urobiť, že ak z nejakého dôvodu chceli schopnosť upravovať - Vlastne, to je úplne rozumné. Nechcel si musieť napísať $ array [$ k] + +, ste len chcel napísať $ item + +, ale stále chcel povedať if ($ k === '") potom prírastok položku a potom vytlačiť našu ponuku. Tak čo teraz očakávame print_r robiť? Aké hodnoty by mali byť vytlačené? [Študent] 2 a 10. >> [Bowden] Iba v prípade, že kľúč bol "" my skutočne vytlačiť, že. Pravdepodobne ste veľmi zriedka, ak vôbec, bude musieť definovať funkcie v PHP, ale môžete vidieť niečo podobné, kde môžete definovať funkciu ako funkcia čokoľvek. Obvykle by ste povedal ($ foo, $ bar) a potom ho definovať ako niečo, čo. Ale keď som to, potom to znamená, že bez ohľadu na volanie čokoľvek, bez ohľadu na volanie baz, takže prvý argument odovzdaný baz možné zmeniť. Poďme urobiť $ foo + +; a vnútri tu ideme BAZ ($ item); Teraz sme volanie funkcie. Argument je zhotovená odkazom, čo znamená, že ak zmeníme ho sme úpravou vec, ktorá bola odovzdaná dovnútra A tlač to očakávame - ak som zpackal syntax - máme 2, 11, takže to bolo vlastne zvýši. Všimnite si, že potrebujeme odkazy v 2 miestach. Čo keď som to urobil? Čo to znamená? [Študent] sa zmení. Jo >>. Položka je len kópia hodnoty v poli. Takže bod sa zmení na 2, ale pole ['a'] bude stále 1. Alebo čo keď to urobím? Teraz položka je poslaný ako kópiu Baz. Takže kópie argumentu bude zvýšený na 2, ale bod sám bol nikdy zvýšený 2. A položka je to isté ako pole držiaku čokoľvek, takže pole bolo nikdy zvýšený. Takže obe tieto miesta potrebujú. PHP je obvykle docela šikovný o tom. Môžete si myslieť, chcem odovzdať odkazom - Toto bolo vlastne otázka na jednom z psets. Bola to questions.txt vec, kde sa hovorí, Prečo by sa chcete odovzdať túto struct odkazom? Čo bolo odpoveď na túto otázku? [Študent] Takže nemusíte kopírovať niečo veľké. Jo >>. Struct môže byť ľubovoľne veľký, a keď miniete struct sa ako argument je potrebné, aby skopírujte celý struct odovzdať ho do funkcie, vzhľadom k tomu, ak ste práve odovzdať struct odkazom potom to jednoducho musí kopírovať 4-byte adresy ako argument funkcie. PHP je trochu múdrejší než to. Ak mám nejakú funkciu a odovzdám do neho rad 1000 vecí, Znamená to, že to bude musieť skopírovať všetky 1000 z tých vecí odovzdať do funkcie? Nemusí k tomu, že okamžite. Ak je vo vnútri tejto funkcie vlastne nikdy upravuje foo, takže if ($ foo === 'hello') return true.; Všimnite si, že vlastne nikdy zmenená argument vnútri tejto funkcie, čo znamená, že všetko, čo bolo odovzdaná ako foo nikdy, je potrebné skopírovať pretože to nie je jeho úpravu. Takže cesta PHP funguje, je argumenty sú vždy odovzdané odkazom kým sa skutočne snaží modifikovať. Teraz keď poviem, že $ foo + +, to bude teraz vytvoriť kópiu pôvodného foo a upraviť kópiu. To šetrí čas. Ak ste nikdy dotýkať túto masívne pole, ste vlastne nikdy zmeniť to, nie je potrebné, aby sa kópia, vzhľadom k tomu, či sme len dať túto ampersand To znamená, že nie je ani kopírovať aj keď sa to zmeniť. Toto správanie sa nazýva copy-on-write. Uvidíte ho aj na iných miestach, najmä ak užívate operačného systému kurz. Copy-on-write je celkom obvyklý vzor, ​​kde si nemusíte robiť kópie niečo ak je to skutočne mení. Jo. [Študent] Čo keby ste mali prírastok vnútri testu, tak len 1 prvok z 1000 by bolo treba zmeniť? Nie som si istý. Myslím, že by skopírovať celú vec, ale je možné, že je dosť šikovný, aby - Vlastne, čo si myslím, je predstaviť sme mali pole, ktoré vyzerá takto: $ pole2 = [ Potom index "a" je pole [1 2 3 4], a index "b" je pole čokoľvek. Musím čiarky medzi všetkými z nich. Predstavte si, že tam sú čiarky. Potom 'c' je hodnota 3. Dobre. Teraz povedzme, že my $ baz ($ pole2); kde baz neberie to odkazom. Takže $ foo ['c'] + +; To je taký príklad, kedy sme okolo pole2 ako argument a potom sa menia v konkrétnej index poľa o zvyšovaní ju. Úprimne netuším, čo PHP sa chystá urobiť. To sa dá ľahko vytvoriť kópiu celého vec, ale ak je to šikovný, to bude kópie týchto kľúčov, kde to bude mať svoje odlišné hodnoty ale toto môže ešte poukázať na rovnaké pole 1,2,3,4 a toto môže ešte poukázať na rovnaké pole. Budem iPad to. Míňame v tomto poli, kde ten chlap body 3, ten chlap body [1,2,3,4], ten chlap poukazuje na [34, ...] Teraz, keď sme okolo ho do baz, sme mení toto. Ak PHP je šikovný, to môže len robiť - Sme stále museli kopírovať nejakú pamäť, ale ak tam boli tieto obrovské vnorené subarrays sme nemuseli kopírovať tie. Ja neviem, či je to to, čo to robí, ale dokážem si predstaviť, že to robí. To je tiež docela veľkou výhodou C po PHP. PHP je život tak oveľa jednoduchšie pre mnoho vecí, ale tak nejako nemajú absolútne žiadnu predstavu, ako dobre to bude robiť pretože nemám potuchy, pod kapotou, keď je to robiť tieto kópie vecí, oh, je to, že bude konštantná časové kópie, je to len zmení 1 ukazovateľ, je to bude smiešne ťažké lineárne kópie? Čo keď to nemôže nájsť miesto? Je to potom treba spustiť upratovanie dostať niektoré viac priestoru? A garbage collection môže trvať ľubovoľne dlho. V C nemusíte mať strach o týchto veciach. Každý riadok, ktorý vám napísať môžete do značnej miery uvažovať o tom, ako to bude robiť. Poďme sa pozrieť späť na to. Ako príjemné je to, že nemusíte riešiť hašovacia funkcia, prepojené zoznamy, alebo niečo podobné, že? Vzhľadom k tomu, pracovať s hash tabuliek je tak ľahké teraz, tu je zábavná logická pracovať. Otvorte súbor s názvom unique.php a v ňom napísať program, PHP (Tiež známy ako "scenár"). Máme tendenciu volať im skripty, ak sú krátke veci, ktoré spustíte z príkazového riadku. V podstate, každý jazyk, ktorý nezostavujú, ale budete spustiť spustiteľný súbor na príkazovom riadku, môžete volať, že spustiteľný skript. Mohol by som rovnako dobre napísať program v jazyku C, ktorý to robí, ale nemyslím si, hovorím skript, pretože som sa prvýkrát skompilovať a spustiť binárku. Ale tento program PHP budeme volať skript. Alebo ak by sme ju napísal v roku Python alebo Perl alebo Node.js alebo niektorý z týchto vecí, by sme im hovoriť, že všetky skripty, pretože ich spustenie v príkazovom riadku ale nemáme skompilovať. Mohli by sme to celkom rýchlo. Nebudeme používať ArGV. Povedzme, fúkať cez to. Nazvime to jedinečné, napísať program. Môžete predpokladať, že vstup bude obsahovať jedno slovo na riadku. Vlastne, bude ArGV byť dosť triviálne použitie. unique.php. Prvá vec, ktorú najprv chceme zistiť, či sme boli vydaní 1 argument príkazového riadku. Rovnako ako by ste očakávať, že argc a ArGV v C, máme stále tie v PHP. Takže if ($ argc! == 2) potom nebudem zaoberať tlače správy alebo tak niečo. Ja budem len opustiť, chybový kód 1. Mohol by som tiež vrátiť 1. Zriedka v PHP ste v tomto stave, keď sme na - Obvykle ste vo funkcii nazýva funkcia volaná funkcia nazýva funkcie. A keď sa niečo pokazí a vy len chcete opustiť všetko úplne, exit len ​​ukončí program. To tiež existuje v C. Ak ste vo funkcii vo funkcii do funkcie vo funkcii a chcete len zabiť program, môžete volať exit a bude to jednoducho ukončiť. Ale v PHP je to ešte vzácnejšie, že sme na tejto najvyššej úrovni. Zvyčajne sme vnútri akési funkcie, preto ho označujeme východ tak, že sme sa nemuseli vracať do 1 vec, ktoré si potom uvedomí, že je chyba tak, že sa vráti až v prípade, že uznáva, že je to chyba. Nechceme, aby sa s tým vysporiadať, tak ukončite (1); return (1), v tomto prípade by bolo rovnocenné. Potom to, čo chceme otvoriť chceme fopen. Argumenty budú vyzerať dosť podobne. Chceme fopen ($ ArGV [1], a chceme ho otvoriť pre čítanie. , Ktorý vracia zdroj, ktorý ideme volať f To vyzerá dosť podobne, ako to robí C až nemáme hovoriť súbor *. Namiesto toho sme len povedať, $ f Dobre. Vlastne si myslím, že to dokonca nám dáva náznak ako na funkciu PHP s názvom súboru. PHP súboru. Čo to urobí, je prečítať si celý súbor do poľa. Nemusíte ani potreba fopen ho. Bude to urobí za vás. Takže $ lines = file ($ ArGV [1]); Teraz majú všetky riadky súboru sú v radoch. Teraz chceme zoradiť riadky. Ako môžeme radiť riadky? My triediť riadky. A teraz môžeme vytlačiť alebo čokoľvek iného. Pravdepodobne najjednoduchší spôsob je foreach ($ linky ako $ line) echo $ line; [Študent] Nebolo by dokonca sme prekročiť čiary odkazovanie niečo do druhu? To je miesto, kde by sa trochu možné definovať ako funkcia sort (& $ array). Pri volaní funkcie nechcete odovzdať odkazom. Je to funkcia, ktorá definuje to, ako že sa to ako referencie. To je vlastne presne to, čo sa stalo keď dáme všetko na našich serveroch, keď sme išli 5,3 až 5,4. Až do 5,4, to bolo úplne rozumné. Funkcia neočakáva to brať ako referenčné, ale môžete odovzdať ako referenčné takže ak funkcia sa stane upraviť, je to ešte upraviť. Ako 5,4, ste nemal robiť. Takže teraz jediný spôsob, ako odovzdať odkazom, ak je funkcia výslovne robí. Ak nechcete, aby sa ju zmeniť, potom sa budete musieť urobiť, $ copy = $ trate a priechod kópie. Takže teraz linky budú zachované a kópie sa zmení. php.unique.php. Možno som pokazil niečo vymyslieť. Neočakávaná "sort". Tam to bude niečo, čo to robí pre nás. Nie je to ani tam. Všimnite si, keď si prečítate v príručke, že prvý argument sa očakáva, že bude pole a trvalo odkazom. Prečo je tento sťažuje na mňa? Pretože mám túto funkciu druh stále tu, že nechcem. Dobre, php.unique.php. Nechcel som odovzdať argument, pretože nemám súbor. Je to php.unique.php na test.php. Tu je test.php všetko vytlačiť v peknej zoradené poradí. Všimnite si, že sú zoradené poriadok je trochu divné pre kód súboru pretože všetky naše prázdne riadky budú na prvom mieste potom sa príde všetkým našim 1 level vrúbkovaním potom príď všetky naše bez zárezov. Jo. >> [Študent] Tak zdrojového kódu nebola odovzdaná odkazom? Je to, že všeobecne predávané hodnotou? [Bowden] Keď zavoláte funkciu, nikdy určuje, či bol prijatý odkazom. Je to definícia funkcie, ktorá určuje, či bol prijatý odkazom. A pri pohľade na funkcie definíciu druhu, alebo len pri pohľade na to, trvá argumentu odkazom. Takže bez ohľadu na to, či chcete, aby ju pomocou odkazu, robí si to odkazom. Upravuje poľa v mieste. To je jednoducho nie je povolené. Nemáte oprávnenie k tomu. >> [Študent] Oh, dobre. [Bowden] Toto, sort bude trvať linky s odkazom a upraviť ju. A opäť, ak ste nechceli, aby robil to, že by ste mohli urobiť kópiu druhu. Aj v tomto prípade, kópie nie je v skutočnosti kópia liniek. Je to len ukazuje na rovnakú vec, kým to najprv dostane upravené, kde to sa najprv dostať upravená v triedení funkcie, kde, pretože je to kopírovanie pri zápise, teraz kópia kópia sa bude vykonaná. Môžete si tiež urobiť. To je ďalšie miesto, kde môžete vidieť ampersand. Vidíte to vo slučkách foreach, môžete vidieť v deklarácie funkcie, a uvidíte, keď práve priraďovanie premenných. Teraz sme dosiahli nič a vďaka tomu pretože kopírovanie a linky sú doslova to isté. Môžete použiť riadky a skopírovať zameniteľne. Môžete to urobiť unset ($ kópiu), a že nie je unset linky, môžete len stratiť svoj odkaz na rovnakú vec. Tak ako tohto bodu, teraz vedenie je jediný spôsob, ako môžete pristupovať riadky. Otázky? Jo. [Študent] Úplne mimo témy, ale nemusíte uzavrieť PHP s - >> Ty nie. Dobre. [Bowden] by som ísť až tak ďaleko, že hovoria, že je to zlé prax ukončiť. To je asi prehnané, najmä v skripte, ale uvidíme, čo sa stane, keď urobím toto. To neurobil nič. Čo keď som chcel - [povzdychne si] Musím odovzdať argument. Shoot. Volal som to zle. Takže php.unique.php s argumentom. Teraz nemám ani potrebovať. Odovzdám to platný argument. Táto tlačená, čo je to tlač. Som tlače kópie a kópie neexistuje. Tak linky. Je vytlačená všetko, a potom zistíte všetky tieto krámy tu, pretože v ničom PHP, ktorý je mimo PHP tagy je len tak byť vytlačené doslova. To je dôvod, prečo HTML, je to tak pekné, že môžem robiť div bla, bla, bla triedu alebo čokoľvek, bla, bla, bla a potom urobiť nejaké PHP kód a potom vykonajte koniec div. A teraz tlače to budem mať pekné div sa hore, všetko, čo PHP tlačený, div na dne. Katastrofálne, keď sa niečo také stane, čo je celkom bežné, len stratená riadok v dolnej časti súboru. Tie by si, že to by bolo, že veľký problém kým vezmete do úvahy fakt, že s prehliadačmi - Ako presmeruje práci alebo v podstate akékoľvek hlavičke práce, keď si pripojenie k webovému serveru a odošle späť všetky tieto hlavičky a veci ako reakciu 200 alebo reakcie presmerovanie alebo čokoľvek, hlavičke sú platné iba do prvej bajt dát je odoslaný. Môžete presmerovať tisíckrát, ale akonáhle prvý bajt dát je odoslaný ste nemal k presmerovanie znova. Ak sa majú rozptylové riadok v dolnej časti súboru a povedzme, že ste túto funkciu použiť, a potom chcete - Povedzme, že je to ďalší súbor, ktorý je index.php a require_once niečo - Ja si nemyslím, že je dobrý príklad toho. Problém sa stane, keď dostane zopakoval tento riadok v dolnej časti. Nemusíte mať nič spoločné boli rezonovať ešte. Aj keď ste nemali v úmysle na nič dostať ozývalo, to niečo dostať ozvenou a tak teraz ste nemal posielať žiadne ďalšie záhlavia a budete sa sťažností. Jednoducho nie je potrebné tieto uzatváracie tagy. Ak máte v pláne na tom niečo s HTML - a je to úplne rozumné urobiť tu div čokoľvek a potom na tomto mieste si môžete alebo nemôžete zahrnúť. To nezáleží. Ale v PHP skripty je to vzácne, zatvorte ho. Keď je všetko PHP, absolútne všetko, nemáte naozaj potrebujete zavrieť / by ste nemali zavrieť. Rokovania s reťazcami je oveľa krajší, ako v C. V PHP môžete zadať reťazec s jednoduchými alebo dvojitými úvodzovkami. S jednoduchými úvodzovkami nie je možné použiť "escape" sekvencie. Neustále uniknúť, bla, bla, bla. Takže printf je veľmi vzácny v PHP. Myslím, že by som použil printf keby som chcel urobiť také veci - v PSet 5, ktorú ste použili sprintf alebo čokoľvek iného. Ale vy chcete robiť 001.jpg 002.jpg a Takže pre tento druh vecí, kde som vlastne chcieť naformátovať text by som použiť printf. Ale inak by som jednoducho použiť zreťazenie. Nikdy som použiť printf. Sme len rozlišovať detaily medzi apostrofy a dvojité úvodzovky. Najväčší rozdiel je, že jednoduché úvodzovky, bude vytlačený doslova. Tam je žiadny znak typu dát v PHP, na rozdiel od C, takže to je ekvivalentná to. Sú oba reťazce. A pekná vec o jednotlivých citátom reťazcov je, že som mohla povedať "ahoj svet!" bla, bla, bla, $ $ Wooo. Čo sa stane, keď som tlačiť je, že bude tlačiť to doslova. Poďme sa zbaviť všetkých našich vecí. Takže echo $ str1; Je to doslova tlačenej všetky tie veci: znaky dolára, Spätné lomítko n, ktoré by ste myslíte, že by bolo nové riadky - všetky tie veci sa vytlačí doslova. Jediná vec, ktorú potrebujete k úteku, sú jednoduché úvodzovky pretože inak by si, že to zatváranie apostrofy. Úvodzovky, úplne odlišné. Vidíme, že zvýrazňovanie syntaxe je cluing nás na to, čo je asi ísť hrozne zle. php.unique. Undefined variable: wooo, pretože to je interpretované ako premenná s názvom wooo. Úvodzovky vám vložiť premenné do - Povedzme, že $ name = "Rob"; Takže echo "Ahoj, moje meno je $ name!"; Uznáva to ako premenné. Keď bežím, že - a ja sa vloží nový riadok - Ahoj, moje meno je Rob! a hello world! To je preto, že som nikdy odstránený tlač wooo vyššie. K dispozícii je 1 ďalší krok môžete urobiť. $ Pole = [1, 2, 3]; Čo keď chcem tlačiť prvý index poľa? Vy $ pole [0]. Na zvýraznenie syntaxe je stopa. Čo je to robiť? php.unique. Ahoj, moje meno je 1! čo nie je to, čo som chcel. Zvýraznenie syntaxe mi klamal. Skúsme'' -> 1, 'b' -> 2. To je, ako by som si to napísať. Neočakávaný apostrof (T_ENCAPSED bla, bla, bla, bla, bla). Myšlienka je, že to nie je to priznávame ako súčasť poľa. Je to priznávame ako pole indexované listom na. Ak chcete urobiť v zložených zátvorkách, a teraz, čo je v tomto rovnátka kučeravými bude interpolovať, čo je slovo, ktoré používame pre magicky vloženie týchto premenných do správnych miestach. Teraz robí, php.unique, a Ahoj, volám je 1! podľa očakávania alebo Ahoj, volám sa Rob! Jedna vec, ktorá je celkom pekné o jednotlivých citácií je, že - Tam je nejaký náklady na interpolačnou. Ak používate dvojité úvodzovky, interpret musí ísť cez tento reťazec, Uistite sa, že, "Oh, tu je premenná. Teraz musím ísť pre túto premennú a vložte ho sem." Aj keď nechcete používať žiadne premenné, nič vnútri týchto úvodzoviek musí byť prerušený, ale to bude ešte pomalšie, pretože je potrebné ísť cez úvodzoviek Hľadám veci, ktoré je potrebné interpolovať. Takže jediné citácie môže byť trochu rýchlejší, ak nemusí nič byť prerušený, a mám tendenciu používať aj jednoduché úvodzovky pre, "Ahoj, moje meno je". $ Array ['a'] rovnako. To sa deje za rovnocenné, čo sme mali predtým. Ale je to vec názoru. Ak používate PHP, pravdepodobne nezaujíma o rozdiele rýchlostí. Nie je dostatok rozum, von začať. Akékoľvek konečné otázky? My vlastne ani dostať cez to všetko, ale toto bola nuda. Posledná vec, ktorá je celkom pekné v PHP je, keď máte čo do činenia s HTML, budete používať to trochu, tak si pekné miestne syntaxe pre tlač premenné. Bez uvedenia PHP tu, toto je nazývané krátke tagy. Oficiálne od PHP 5.4, je zastaraný to. Je doporučené, aby php. Toto je aj naďalej podporovaná, takže krátke tagy s