[Powered by Google Translate] [Odjeljak 8 - ugodnije]
[Rob Bowden - Sveučilište Harvard]
[Ovo je CS50. - CS50.TV]
>> Ove tjedan sekcija bilješke će biti prilično kratka,
tako da sam samo ću držati govor, ti dečki su idući u držati molba pitanja,
a mi ćemo pokušati popuniti onoliko vremena koliko je to moguće.
Puno ljudi misli da je to pset nije nužno teško, ali to je jako dugo.
The pset spec. sama traje sat vremena za čitanje.
Mi vam dati puno SQL mogli eventualno potrebno koristiti.
Mi vas kroz puno toga, tako da ne bi trebalo biti previše loš.
Je li netko započeo ili završio?
To je posljednja pset. Oh, moj Bože.
Obično postoji JavaScripta jednom nakon toga, ali kalendarske promjene stvari
čini sve jedan tjedan kraći, a mi više ne imati JavaScript pset.
Ne znam kako da utječe li JavaScripta će se pojaviti na ispitu
ili Kviz 1.
Pretpostavljam da će biti nešto poput morate znati na visokoj razini stvari o JavaScriptu
ali sumnjam da bih samo dati ravno JavaScript kôd
budući da nisu imali pset u njega.
Ali to će biti stvari za kviz pregled sljedeći tjedan.
>> Odjeljak pitanja.
Puno ove stvari je nešto loše sročen, ali mi ćemo raspravljati zašto.
Za razliku od C, PHP je "dinamički upisali" jezik. Što to znači, pitate?
Pa, reći zbogom za sve one char, float, int, i drugih ključnih riječi trebate koristiti
kada izjavljuje varijable i funkcije u C.
U PHP-u, varijabla je vrsta određuje se prema vrijednosti koja je trenutno drži.
Dakle, prije nego što smo utipkajte taj kôd u datoteci pod nazivom dynamic.php,
PHP dinamički upisali. To je točno.
Ne slažem se s činjenicom da to znači da smo rekavši zbogom na char, float, int,
i druge ključne riječi.
Točan razlika između dinamički upisali i alternativa,
koji statički je upisali, da je dinamički upisali, sve vaše tipa provjeri i stvari
se događa u vrijeme izvođenja, dok statički upisali se to događa u vrijeme prevođenja.
Riječ statična u cjelini čini se da znači stvari vrijeme prevođenja.
Pretpostavljam da postoje i drugi načini za njega, ali u C kad proglasi statičke varijable,
njegova pohranu namijenjen u vrijeme prevođenja.
Evo, dinamički upisali samo znači da -
U C ako pokušate dodati string i integer, kada ga sastaviti,
to će se žaliti jer to će reći da ne možete dodati int i upustvo.
To je jednostavno ne vrijedi operacija.
To je još jedna stvar koja mi ćemo doći do u drugi.
Ali ta vrsta provjere, činjenica da se žali na vrijeme prevođenja,
je statički tip provjere.
Postoje jezici kojima ne treba reći char, float, int, i sve te stvari,
ali jezik mogu reći iz konteksta stvar koju vrstu bi to trebalo biti,
ali to je još uvijek statički upisali.
Dakle, ako se uzme 51, ocaml, nikada ne trebate koristiti bilo koji od tih tipova,
ali to još uvijek neće na vrijeme prevođenja reći da to ne može učiniti, jer ste miješanje int i niz.
Dinamički upisali samo znači da je negdje tijekom pokrenuti vrijeme ćeš dobiti tužbu.
Ako ste također koristiti Javu prije, u cjelini, gotovo svaki C-tipa jezik
će statički biti upisali, pa C, C + +, Java, sve one su uglavnom statički upisali.
U Java kada sastaviti nešto, a vi govorite
Niz je jednaka novi nešto što nije string,
da će se žaliti jer one vrste jednostavno ne podudaraju.
To će se žaliti na vrijeme prevođenja.
No, ona također ima neke dinamičke vrijeme stvari se sviđa ako pokušate da se baci nešto
na tipa koji je precizniji od svog trenutnog tipa,
postoji ništa što možete učiniti u vrijeme prevođenja provjeriti da li da baci će uspjeti.
Java također ima neke dinamičan tip provjere da čim to dobiva na toj liniji koda
kada je zapravo izvršenja, to će učiniti ekipi,
provjeriti da li da baci je vrijedio na prvom mjestu,
a ako to nije, onda će se žaliti da imate pogrešnu vrstu.
Dinamički provjere.
Upišite ovo u datoteku pod nazivom dynamic.php.
Dynamic.php.
Ja ću unzip da oblikovanje.
Imamo varijablu, možemo ga postaviti na cijeli 7,
onda ćemo ispisati ga i% s -
Oh, mi smo tiskanje vrstu njega, tako gettype će vratiti tip varijable.
Mi samo tiskanje tip iznova i iznova.
Mi samo php.dynamic.php.
Vidjet ćemo da se mijenja iz cijeli niz do do boolean kao što smo proći.
U C nema logički tip podataka, ne postoji tip string podataka.
Tu je char * i Booleova samo teži biti int ili char ili nešto.
U PHP ove vrste ne postoje, i to je jedan od velikih prednosti PHP više C -
da gudačka operacije beskrajno lakše nego u PHP C. Oni samo rade.
>> Tako smo došli ovamo.
Trčali smo dynamic.php.
To govori PHP tumača, pod nazivom php, pokrenuti PHP kod u dynamic.php.
Ako imate bilo kakve pogreške u datoteci, tumač će vam reći!
Tumač, ovo je još jedna velika razlika između PHP i C.
U C morate sastaviti nešto i onda pokrenuti taj sastaviti datoteku.
U PHP nikada sastaviti ništa.
Dakle PHP tumač osnovi samo čitate ovaj redak po redak.
To hits var = 7 onda ga pogodi printf onda udari var onda udari printf i tako dalje.
Tu je malo sastavljanju to radi, i to sprema rezultate
pa ako ste pokrenuti skriptu kasnije možete učiniti neke,
ali u osnovi to je redak po redak takve stvari.
To znači da je puno od optimizacijama koje smo dobili u C,
poput sastavljanja, to je samo općenito prevodilac može učiniti puno trikova za vas.
To može potrajati od neiskorištenih varijabli, to možete učiniti sve ove vrste stvari,
to može učiniti rep rekurzija.
U PHP nećeš dobiti taj prednost
jer samo će početi izvršavanju redak po redak po redak,
i to zapravo ne prepoznaju takve stvari kao lako
jer to nije jedna velika kompilacija prelazite stvar i onda izvršenje;
to je samo redak po redak.
Tako da je prevoditelj.
>> Povratak na našem dinamičnom tipkanje: prilično cool, zar ne?
Ti definitivno ne bi mogao učiniti da se u C!
Sada, vidjeti ako možete shvatiti vrstu svaku od sljedećih vrijednosti.
Vidi ovo za referencu.
Dakle, 3.50. Koji tip ne mislite da će to biti?
Ovdje su vrste koje imamo.
Imamo bools, integers, plutajuće točke, žice, nizovi, objekti,
i onda resursa, što je vrsta nejasne.
Mislim da je zapravo primjer ovdje.
Zatim tu je NULL. NULL je posebna vrsta.
Za razliku od C gdje je samo NULL pokazivač s adresom 0,
u PHP-u, NULL je vlastiti tipa gdje vrijedi samo stvar tog tipa je NULL.
To je mnogo više koristan za provjere pogreške.
U C gdje smo imali taj problem gdje ako se vrati NULL,
to znači da ste vraća NULL pokazivač ili pomoću NULL da označi pogrešku
ili sve te zbrke smo imali u jednom trenutku.
Evo, vraća NULL općenito znači pogrešku.
Puno stvari i povratak false za pogreške.
Ali stvar je NULL tip, jedina stvar null tipa je NULL.
Tada je kao povratni možete definirati neke anonimne funkcije.
Ne morate dati funkciju ime, ali nećete morati nositi s tim ovdje.
Gledajući na vrste koje ne očekuju da znamo,
Što mislite vrsta 3,50 je? >> [Student] Float.
Da.
Dakle ovdje, što misliš tip je to? >> [Student] Array.
Da. Prvi je bio float, drugi je niz.
Primijetit ćete da je ovo polje nije poput C niz
gdje imate indeks 0 ima neku vrijednost, indeks 1 ima neku vrijednost.
Ovdje indeksi su a, b, i c, a vrijednosti su 1, 2, i 3.
U PHP ne postoji razlika između asocijativnog polja i samo redovito nizom
kao što će misliti o tome u C.
Tu je upravo to, a ispod haube redoviti niz je samo asocijativni niz
gdje 0 zemljovidi u određenoj vrijednosti isti način zemljovidi u određenoj vrijednosti.
Iz tog razloga, PHP može biti prilično loša za stvarno brzo koda / vrednovanje stvari
budući da se u C kada koristite niz znate da pristupanje člana konstantna vrijeme.
U PHP pristup član je tko zna koliko vremena?
To je vjerojatno konstanta ako se Skosan ispravno.
Tko zna što je stvarno radi ispod haube?
Vi stvarno trebate pogledati na provedbi vidjeti kako će to nositi s tim.
Dakle fopen.
Mislim ovdje neka je samo PHP priručnik fopen pogledati povratnog tipa.
Vidimo ovdje možete pogledati prilično mnogo bilo funkciju u PHP priručniku
i to je neka vrsta od čovjeka stranici PHP.
Povratni tip će biti resurs.
To je razlog zašto sam ga pogledao, jer mi nije stvarno definirati resurs.
Ideja resursa, u C ste vrsta dobio FILE * ili bilo što drugo;
u PHP resurs je vaša SLIKA *.
To je ono što će se čitati iz, to je ono što će biti pismeno.
To je obično vanjski, tako da je resurs možete povući stvari iz te baciti stvari.
I na kraju, ono što je tip NULL? >> [Student] NULL.
Da. Dakle, jedina stvar koja je NULL je NULL.
NULL je NULL.
>> Jedna značajka PHP-tipa sustava (za bolje ili za lošije) je njegova sposobnost da žonglirati vrsta.
Kada ste napisali liniju PHP koda koji kombinira vrijednosti različitih tipova,
PHP će pokušati napraviti pametan stvar.
Isprobajte svakom od sljedećih linija PHP kodu. Što se ispisati?
Je li to ono što ste očekivali? Zašto ili zašto ne?
Ova činjenica o PHP je ono što ga čini ono što mi zovemo slabo upisali.
Slabo upisali i snažno upisali,
postoje različiti načini za tim uvjetima,
ali većina ljudi koristi slabo upisali i snažno upisali značiti takve stvari
gdje je ("1" + 2), da radi.
U C koji neće raditi.
Možete zamisliti to ne rade.
Puno ljudi se miješati dinamičan tipkati i tipkati slab i statički tipkati i tipkati jak.
Python je još jedan primjer jeziku koja dinamički je upisali.
Možete baciti oko tipova varijabli i to će odrediti vrijeme izvođenja
Svaka pogreška checkings.
U Python to će izvršiti to i to će se vidjeti ("1" + 2);
i to će uspjeti jer kaže da ne možete dodati string i integer.
U PHP, koji je baš kao i dinamički upisali, to neće uspjeti.
Slaba tipizacija ima veze s činjenicom da se stvari s vrstama
da ne stvarno smisla nužno.
Dakle, ("1" + 2), a ja mogu zamisliti da se niz 12, ja mogu zamisliti da se niz 3,
Ja mogu zamisliti da se cijeli tri.
To nije nužno dobro definirana, a mi vjerojatno ćeš vidjeti ovdje
da kad smo ispisali ("1" + 2), ona je vjerojatno će završiti kao drugačiji
nego ispis (1 + "2").
I to je uglavnom, po mom mišljenju, za gore.
Ovdje možemo pokušati to.
Drugi trik o PHP je da ne morate da se zapravo napisati datoteku.
To ne su pokrenuti ovu naredbu mod.
Dakle, php-r, onda možemo baciti u naredbi ovdje:
"Ispis ('1 '+ 2)," a ja ću baciti novu liniju.
Ovo tiskana tri.
To izgleda kao da ispisuje tri i to je cijeli tri.
Tako sada pokušajmo obrnuto:
"Ispis (1 + '2 ');
Mi smo dobili tri, a također će biti cijeli broj 3? Ja iskreno nemam pojma.
To izgleda kao da je dosljedan.
Tu nikada nije bilo šanse da ga se niz od 12 ili bilo što slično
jer PHP, za razliku od JavaScript i Java previše,
ima zaseban operateru za ulančavanje.
Concatenation u PHP je točka.
Dakle tisak (1 '2 '.); Će nam dati 12.
Ovo sklon dovesti do konfuzije gdje ljudi pokušati učiniti nešto poput str + =
neke druge stvari koje žele dodati na kraju svog niza, i da će uspjeti.
Vi trebate učiniti str. =
Dakle, ne zaboravite ulančavanje u PHP je točka.
Ostale stvari za isprobavanje: print ("CS" + 50);
Ja sam vam rekao da nema nade za to je rezultiralo u CS50
budući ulančavanje nije +.
Što mislite da će ovo završiti?
Ja iskreno apsolutno nema pojma.
To izgleda kao da je samo 50 godina.
Ona vidi string, a kladim ako stavimo 123CS -
Ona vidi prvi string, on pokušava čitati cijeli broj od njega ili broj od njega.
U ovom slučaju to vidi 123CS.
"To nema smisla, kao cijeli broj, tako da sam samo ću misliti na 123".
Dakle, 123 + 50 će biti 173.
I ovdje počinje ovo čitate, kao cijeli broj.
To ne vidi ništa, tako da samo tretira ga kao 0. Dakle 0 + 50 će biti 50.
Ovo sam uz pretpostavku će učiniti nešto slično.
Razmišljam 99.
Da, jer je idući u uzeti prvi -
Tako 99.
Ovdje (10/7), ako je to C, što bi to vratiti?
[Student] 1. >> Da, to će biti jedan, jer 10/7 je dijeljenjem dva cijela broja.
Cijeli podijeljen je cijeli će se vratiti cijeli broj.
To se ne može vratiti jedan bod štogod to će biti, pa to je samo ide da se vrati jedan.
Ovdje ispis (10/7), to će zapravo tumače da.
A to znači da ako stvarno želite učiniti cijeli zaokruživanje i stvari kao što je to,
što trebate učiniti ispis (kat (10/7));
U C to je vjerojatno čudno da se možete osloniti na cijeli skraćivanja redovito,
ali u PHP ne možete, jer ona će se automatski pretvoriti u float.
I onda (7 + true); što mislite da će biti?
Ja sam guessing 8 ako će to protumačiti kao pravi jedan.
To izgleda kao da je osam.
>> Dakle, ništa što smo učinili u posljednjih 10 minuta što apsolutno nikada ne bi trebao učiniti.
Vidjet ćete kod koji radi ovo.
To ne mora biti kao jednostavan kao taj.
Možete imati dvije varijable, a jedna varijabla se dogodi da se niz
i druga varijabla se dogodi da se int, a onda dodati ove varijable zajedno.
Budući PHP dinamički upisali i to neće učiniti bilo koju vrstu provjere za vas
a budući da je slabo upisali i jer će samo automatski baciti te stvari zajedno
i sve će samo raditi, to je teško čak i znati da je ta varijabla mora biti string sada,
tako da ne bih trebao dodati da ove varijable, što je cijeli broj.
Najbolja praksa je, ako je varijabla string, držati ga kao niz zauvijek.
Ako je varijabla int, držati ga kao int zauvijek.
Ako želite da se bave brojeva i gudače,
možete koristiti varsint - to je JavaScripta.
Intval. Ja to cijelo vrijeme. PHP i JavaScript ja miješati sve.
Dakle intval će vratiti cijeli vrijednost varijable.
Ako prođemo u "tisku (intval ('123 ')); dobijete 123.
Intval sama neće napraviti ček za nas da je to isključivo cijeli.
PHP priručnik, postoje samo toliko funkcija dostupna,
pa ovdje mislim što bih ja koristim je is_numeric prvi.
Ja sam guessing da se vratio lažna.
To je još jedna stvar koju moramo ići preko je ===.
Dakle is_numeric ('123df '), ne bi pomislio da je kao is_numeric.
U C te će morati ponoviti više sve znakove
i provjerite da li je svaki lik znamenku ili što god.
Ovdje is_numeric će to učiniti za nas,
i to je povratak lažna.
Dakle, kada sam tiskana toga, tiskana ništa, pa evo ja sam uspoređujući ga vidjeti,
Jeste li se dogoditi da se lažno? I tako sada je tiskanje 1.
Navodno ga ispisuje jedan kao istinito umjesto ispisa vrijedi kao istinito.
Pitam se, ako mi je činiti print_r. Ne, to još uvijek ne jednom.
>> Vraćajući se ===, == još uvijek postoji,
a ako govorimo na Tommyja on će reći == je savršeno u redu.
Ja ću reći da == je strašna, a vi nikada ne bi trebao koristiti ==.
Razlika je u tome što == uspoređuje stvari
gdje to može biti istina, čak i ako oni nisu isti tip,
dok === uspoređuje stvari i prvi se provjerava jesu li isti tip?
Da. Ok, sad ću vidjeti ako oni zapravo usporediti biti jednaki.
Možete dobiti čudne stvari poput 10 jednaka - neka je vidjeti što to kaže.
Dakle ('10 '== '1 E1 ");
Ovo true.
Se bilo tko imati bilo nagađanja zašto se to vraća istina?
To je ne samo o tome. Možda je to nagovještaj.
Ali, ako sam to promijeniti na f - to prokleto! Ja i dalje koristiti dvostruke navodnike.
Razlog su dvokrevetne citati vikao na mene jer sam ovo staviti u navodnike.
Tako sam mogao pobjeći dvostruke navodnike u ovdje, ali jednostruke navodnike lakše.
Dakle ('10 '== '1 F1'); ne ispisuje istina. ('10 '== '1 E1'); ispisuje istina.
[Student] Je li to hex? >> To nije hex, ali to je blizu da to je kao -
1e1, znanstvena notacija.
To priznaje 1e1 kao jedan * 10 ^ 1 ili štogod.
Oni su ravnopravni cijeli brojevi.
Ako mi === onda će to biti lažno.
Ja zapravo nemam pojma, ako mi == ono o (10 i '10abc ');? U redu. Dakle, to je istina.
Dakle, baš kao i kada ste učinili (10 + '10abc '), i da će to biti 20,
ovdje (10 == '10abc '); je istina.
Čak i gore stvari poput (lažno == NULL); je istina
ili (lažna == 0); je istina, (false == []);
Postoje čudni slučajevi - To je jedna od onih čudnih slučajeva.
Primijetite da (lažno == []); je istina.
('0 '== False); je istina.
('0 '== []); Je lažna.
Dakle == ni na koji način tranzitivnog.
može biti jednaka b i može biti jednaka c,
ali b ne može biti jednaka c.
To je odvratno za mene, i trebali biste uvijek koristiti ===.
[Student] Možemo učiniti! == Kao dobro? >> [Bowden] Da.
Ekvivalent bi biti! = A! ==.
To je zapravo odrastao u pset spec.
gdje puno funkcija povratka -
PHP priručnik je dobro o tome.
To stavlja u velikom crvenom okviru "To će vratiti false ako postoji pogreška."
No, povratak 0 je savršeno razumna stvar da se vrate.
Razmislite o bilo funkciju za koju se očekuje da se vrati cijeli broj.
Recimo da je ova funkcija trebala brojati broj redaka u datoteci ili nešto.
U normalnim okolnostima, da prođe ova funkcija datoteku
i to će vratiti cijeli broj koji predstavlja broj linija.
Dakle, 0 je savršeno razuman broj, ako datoteka je samo prazna.
No, što ako prođe to nevažeću datoteku i funkcija događa povratak false
ako prođe to nevažeću datoteku?
Ako ste upravo to učiniti == niste razlikovanje slučaj između nevažeće datoteke i praznu datoteku.
Uvijek koristite ===.
To je svima.
>> U PHP-u, niz vrsta je drugačije od onoga što ste navikli u C.
Doista, možda ste već primijetili ovo gore kada je vidio da je to tipa polja.
Nosač sintaksa je novi kao PHP 5,4, što je najnovija verzija PHP.
Prije toga uvijek morao napisati niz ("" -> 1, 'b' -> 2.
To je bio konstruktor za niz.
Sada PHP napokon je došao oko na lijepoj sintaksi samo uglatim zagradama,
koji je samo tako puno bolje nego niz.
No, s obzirom PHP 5,4 je najnovija verzija,
možete naići na mjesta koja nemaju ni PHP 5,3.
Tijekom ljeta smo naletjeli ovom pitanju gdje PHP 5,3 je ono što smo imali na aparatu,
ali poslužitelj koji smo razmještene svu našu razreda knjigu i dostaviti i sve to na
je PHP 5.4.
Ne znajući to, razvili smo se u 5,3, gurnula 5,4,
i sad odjednom nitko našeg koda radi
jer tamo se dogodilo da su se promjene između 5,3 i 5,4
koja nisu kompatibilna,
i mi morati ići i popraviti sve naše stvari koje ne rade za PHP 5.4.
Za ovoj klasi, jer uređaj ima PHP 5,4,
to je savršeno u redu da koristite uglate zagrade.
Ali, ako ste u potrazi gore stvari oko interneta,
ako ste u potrazi neku vrstu polja stvari, najvjerojatnije ćete vidjeti
čarolija iz polja konstruktora sintaksi budući da je od oko PHP rođen
i uglata zagrada sintaksa je bio oko za posljednjih nekoliko mjeseci
ili kad je došao oko 5,4.
To je, kako se indeks.
Baš kao u C kako bi indeks do uglatim zagradama poput $ niz [0], $ array [1], $ niz [2],
ti indeks na isti način, ako vam se dogoditi da vam se indeksi se žice.
Dakle $ array [''] i $ niz ["b"].
$ Array [b]. Zašto bi to moglo biti krivo?
To će vjerojatno generirati upozorenje, ali još uvijek rade. PHP ima tendenciju da to učinite.
Ona teži samo: "Ja ću vas upozoriti o tome, ali ja sam samo će zadržati ide
"I učiniti sve što mogu."
Vjerojatno će prevesti ovo na žici,
ali je moguće da u nekom trenutku u prošlosti netko rekao
definirati b biti 'Hello World'.
Tako sada b mogao biti stalna i $ array [b] će zapravo biti događaj 'Hello World'.
Mislim u ovom trenutku, ili barem naši PHP postavke,
ako pokušate indeksa u niz i da ključ ne postoji, to neće uspjeti.
Ja ne mislim da je to samo će vas upozoriti.
Ili barem možete ga postaviti tako da se ne samo vas upozoriti, to je samo ravno gore ne uspije.
>> Način da provjerite je li tamo zapravo je takav indeks je isset.
Dakle isset ($ array ['Hello World']) će se vratiti false.
isset ($ array ['b']) će se vratiti istina.
Možete miješati ove syntaxes.
Prilično sam siguran da ono što ovaj niz bi završiti kao je - Možemo ga isprobati.
Oh, trebam PHPWord.
To je miješanje sintaksu gdje ste odredili ono što je ključ
i ne odredite što je ključ.
Dakle 3 ovdje je vrijednost.
Poslali nije izričito rekao ono što je ključno će biti.
Što mislite njegova ključna će biti?
[Student] 0. >> Ja sam guessing 0 samo zato što je prvi nismo naveli.
Mi zapravo može učiniti nekoliko tih slučajeva.
Dakle print_r je ispisati rekurzivna. To će ispisati cijeli niz.
To će ispisati subarrays od niza ako ih je bilo.
Dakle print_r ($ array); php.test.php.
To ne izgleda kao da joj je dao 0.
Tu je zapravo nešto imati na umu ovdje, ali mi ćemo se vratiti na njega u drugi.
No, što ako sam se dogoditi da ovaj indeks 1?
PHP ne pravi razliku između niza indeksa i cijelih indeksa,
tako da u ovom trenutku samo sam definirao indeks 1, a ja mogu učiniti i $ niz [1] i $ array ['1 ']
, a to će biti isti indeks i isti ključ.
Dakle, sada što misliš 3 će biti? >> [Student] 2. >> [Bowden] Ja sam guessing dva.
Da. To je dva.
Što ako je to učinio je 10, ovo je 4? Što mislite Indeks 3 će biti?
Razmišljam 11.
Moje mišljenje o tome što čini PHP - i mislim da sam vidio ovo prije -
je to samo prati ono što najviše numerički indeks se koristi do sada je.
To nikada neće dodijeliti string indeks 3. To će uvijek biti numerički indeks.
Tako da prati najviše jedan to je dodijeljen do sada, što će se dogoditi da bude 10,
i to će dati 11-3.
Ono što sam rekao prije, primijetiti način na koji se ispisuje ovaj niz.
Ona ispisuje ključ 10, tipka 4, 11 Tipka, tipka d.
Ili čak i učinimo -
Pretpostavljam da nisam stavio 0, ali to je tiskanje 1, 2, 3, 4.
Što ako sam prebaciti ovdje? Ili ajmo zapravo prebacivanje ove dvije.
Sada ga ispisuje 2, 1, 3, 4.
PHP je nizovi nisu baš kao i redovite hash tablice.
To je savršeno razumno razmišljati o njima kao hash tablica 99% vremena.
No, u svojim hash tablicama nema osjećaj reda u kojem su stvari postavljene.
Dakle, čim ga umetnuti u vaše hash tablicu,
pretpostaviti da nema povezani popis i da bi mogao suditi u roku povezane liste
koja je umetnuta prvi.
No, ovdje smo umetnuta dva prva i to zna kad je ispišete ovaj niz koji 2 dolazi prvi.
To ne ga ispisati u samo bilo bi.
Tehnički podaci struktura da se koristi je naredio karta,
tako da mapira tipke vrijednosti i to pamti redoslijed kojim su ti ključevi su umetnuti.
Uglavnom to je nekih komplikacija gdje je neugodno da zapravo -
Recimo da imaju niz 0, 1, 2, 3, 4, 5
i želite uzeti indeks 2.
Jedan način to radiš, da vidimo kako to izgleda.
0, 2, 1, 3, 4.
Isključi događa postavljene vrijednosti i sačuvali obje varijable i niz indekse.
Dakle resetiranje ($ array [2]);
Sada što se to događa izgledati? 2 je samo nestala, tako da je savršeno u redu.
Više neugodno je, ako želite stvari zapravo biti kao niz.
Ja ću staviti slučajnih brojeva.
Sada primijetite moje indekse.
Želim samo da bude poput C niz u kojem se ide od 0 do dužine - 1
i ja mogu ponoviti preko nje kao takve.
No, čim sam postavljene vrijednosti i sačuvali drugi indeks, što je bio u indeksu 3 ne sada postati Indeks 2.
Umjesto toga, samo uklanja taj indeks, a sada idete 0, 1, 3, 4.
To je savršeno razumna.
To je samo neugodno, a vi morate učiniti stvari kao što su polja uplitanje. Da.
>> [Student] Što će se dogoditi ako ste imali za petlje
i vi htjeli ići preko svih elemenata?
Kada je pogodio dvije, to će dati sve?
Ponavljanje preko polja. Postoje dva načina na koje možete to učiniti.
Možete koristiti redovito za petlju.
Ovo je još jedan složenost PHP.
Većina jezika, ja bih rekao, imaju nekakvu duljine ili LEN ili nešto
ukazuje na duljinu niza.
U PHP to count.
Dakle, count ($ array); $ i + +)
Ajmo ispis ($ array [$ i]);
Notice: Undefined offset: 2.
To samo ide na propast.
To je razlog da je, za najveći dio, nikada ne trebate ponoviti preko niz ovako.
To bi moglo biti pretjerano, ali nikada ne trebate ponoviti preko niz ovako
jer PHP pruža svojim foreach sintaksu gdje foreach ($ array kao $ predmet).
Sada, ako smo ispisali ($ predmet); - hrapavi tome razgovarati u drugi - koji radi savršeno u redu.
Način na koji foreach radi je prvi argument je niz koji ste Ponavljanje više.
A drugi argument, predmet, kroz svaki prolaz petlje za
to se događa da se na sljedeću stvar u polju. Pa sjetite se niz ima nalog.
Prvi put kroz za petlju, predmet će biti 123
onda će biti 12 onda će biti 13 onda će biti 23 onda će biti 213.
Stvari se jako čudno kada učiniti nešto poput foreach.
Idemo vidjeti što se događa, jer nikada ne bi trebao to učiniti.
Što ako smo resetiranje ($ array [1]);
To je vjerojatno očekivao.
Vi ste Ponavljanje nad ovom polju, a svaki put kad si unsetting prvi indeks.
Dakle, za indeks 0, prva stvar, predmet vodi na vrijednosti 0, tako da će biti 123.
No, unutar for petlje smo resetiranje indeks 1, tako da znači 12 je nestalo.
Dakle ispis. PHP_EOL.
PHP_EOL je samo novi red, ali to je tehnički više prenosiv
od nove linije i dr. u Windowsima je drugačiji od retkom na Mac i Unix.
Na Windows newline je \ r \ n, a svugdje drugdje je sklon samo biti \ n.
PHP_EOL konfiguriran tako da koristi ono što newline vašeg sustava.
Dakle ispisati da. Nemojmo print_r ($ array) na kraju.
Nisam imao pojma da bi to biti ponašanje.
Stavka još uvijek traje na vrijednosti 12, iako smo postavljene vrijednosti i sačuvali 12 prije nego što smo ikada dobio na njega iz polja.
Nemojte uzeti moj riječ o tome, ali to izgleda kao foreach stvara kopiju niz
a zatim predmet vodi na svim vrijednostima te kopije.
Dakle, čak i ako ste izmijenili niz unutar for petlji
to nije briga. Stavka će se na izvorne vrijednosti.
Pokušajmo ga unsetting.
Što ako je to $ array [1] = "Hello";
Iako smo stavili "Hello" u nizu, predmet nikada ne uzima na toj vrijednosti.
Tu je još jedan Sintaksa za foreach petlje
gdje ste stavili dvije varijable odvojene strelice.
Ovaj prvi varijabla će biti ključ te vrijednosti,
i to drugi varijabla će biti točno isti predmet.
Ovo je nezanimljiv ovdje, ali ako se vratimo na naš izvorni slučaju 'A' -> 1,
"B" -> 1,
ovdje ako mi samo ponoviti za svaku polja kao predmet, predmet će biti jedan svaki put.
Ali ako i mi želimo da znate ključ povezan s tom stavkom
onda mi kao $ ključ -> $ predmet.
Dakle, sada možemo učiniti za ispis ($ tipku. ':'.
Sada je Ponavljanje iznova i ispis svaku tipku i njegove povezane vrijednost.
>> Dodatna stvar koju možete učiniti u foreach petlji je možda vidjeti ovu sintaksu.
Znakove za prije imena varijabli imaju tendenciju da se koliko PHP radi reference.
Gdje reference su vrlo slične naputke,
nemate naputke, tako da nikada ne bave izravno memorije.
Ali vi nemate reference gdje jedna varijabla odnosi na istu stvar kao i druge varijable.
Unutar ovog učinimo $ predmet. Vratimo se na jednoj, 10.
Učinimo $ predmet + +; To još uvijek postoji u PHP. Još uvijek možete napraviti + +.
php.test.php. Moram ga ispisati. print_r ($ array);
Mi ispisati 2, 11.
Ako sam upravo učinio foreach ($ niz kao $ predmet), a zatim artikl će biti vrijednost 1
prvi put kroz petlju. To će povećavati jedan do dva i onda smo gotovi.
Pa onda će proći kroz drugi prolaz petlje i da predmet je 10.
To povećava stavku 11, a zatim da je samo baciti.
Onda smo print_r ($ array), a neka se vidi da je to samo jedan, 10.
Dakle, prirast smo je izgubili.
Ali foreach ($ array kao & $ predmet)
sada je ova stavka isti predmet kao ovo ovdje. To je ista stvar.
Dakle $ predmet + + se mijenja niz 0.
Uglavnom, možete učiniti $ k -> $ predmet, a vi možete učiniti $ polje [$ k] + +;
>> Dakle, drugi put da radiš, slobodni smo mijenjati stavke,
ali to neće promijeniti naš izvorni niz.
Ali ako ćemo koristiti k, što je naš ključni, onda možemo samo indeks u naš niz koristi taj ključ
i povećajte to.
To više izravno mijenja naš izvorni niz.
Možete čak napraviti da ako iz nekog razloga želio mogućnost izmjene -
Zapravo, ovo je savršeno razumna.
Vi ne želite da moram napisati $ polje [$ k] + +,
samo htjela pisati $ predmet + +, ali još uvijek je htio reći ako ($ k === '')
zatim povećajte stavku, a zatim ispisati naš niz.
Dakle, sada što očekujemo print_r učiniti? Koje vrijednosti bi trebao biti tiskan?
[Student] 2 i 10. >> [Bowden] Samo ako ključ je '' mi zapravo ispisati da.
>> Vi vjerojatno vrlo rijetko, ako ikada, trebat će definirati funkcije u PHP-u,
ali možda ćete vidjeti nešto slično gdje se definirati funkciju kao funkcija štogod.
Obično bi se reći ($ foo, bar $), a zatim ga definirati kako bi se bilo što.
Ali, ako sam to učiniti, onda to znači da bez obzira na pozive god,
god poziva baz, tako da je prvi argument prošao Baz može biti promijenjen.
Učinimo $ foo + +;
i unutar ovog učinimo Baz ($ predmet);
Sada smo pozivajući funkciju.
Argument je snimljen u odnosu, što znači da ako smo ga mijenjati
mi smo izmjenom stvar koja je prošla u.
I tiskanje to očekujemo - osim ako sam zabrljao sintaksu - imamo 2, 11,
tako da je zapravo porastao.
Obavijest trebamo reference u dva mjesta.
Što ako sam to učinio? Što to znači?
[Student] To će se promijeniti. >> Da.
Stavka je samo kopija vrijednosti u nizu.
Dakle, predmet će se promijeniti na dva, ali array [''] i dalje će biti jedan.
Ili što ako sam to učiniti?
Sada predmet je poslan kao kopiju Baz.
Dakle kopija argument će porastao za 2,
ali predmet sama nikada nije porastao za dva.
I točka je ista stvar kao polje nosač god,
tako da lepezu nikada nije porastao.
Dakle, oba ta mjesta treba.
>> PHP je obično prilično pametan.
Možda mislite da želim proći pozivanjem -
To je zapravo pitanje na jednom od psets.
To je bio questions.txt stvar gdje je rekao,
Zašto bi želite da prođe ovaj struct pozivom?
Što je odgovor na to?
[Student] Dakle, ne morate kopirati nešto veliko. >> Da.
Struct može biti proizvoljno velik, a kada prođete struct u kao argument
to treba kopirati taj cijeli struct da ga prođe na funkciji,
a ako samo proći struct upućivanjem
onda samo treba kopirati 4-byte adresu kao argument funkcije.
PHP je malo pametniji od toga.
Ako imam neku funkciju, a ja proći do njega niz 1000 stvari,
to znači da će morati kopirati sve 1000 tih stvari
to proći u funkciji? To ne mora učiniti da se odmah.
Ako unutar ove funkcije nikada zapravo mijenja foo,
pa ako ($ foo === 'halo') return true.;
Obavijest mi nikada zapravo modificirani argument unutar ove funkcije,
što znači da je ono što je prošlo kao foo nikada treba kopirati
jer to nije to mijenjanje.
Dakle, način na koji PHP djela je argumenti uvijek su prošli upućivanjem
dok ste zapravo pokušati ga mijenjati.
Sada, ako kažem $ foo + +, to će sada napraviti kopiju izvornog foo i mijenjati primjerak.
To štedi neko vrijeme.
Ako nikad ne dira ovaj veliki niz, što zapravo nikad ga mijenjati,
to ne trebate napraviti kopiju,
a ako mi samo staviti ovaj ampersand to znači da ni ne kopirati
čak i ako ne ga mijenjati.
Takvo ponašanje se zove copy-na-pisati.
Vi ćete ga vidjeti u drugim mjestima, pogotovo ako se uzme tečaj operativnog sustava.
Copy-na-pisati je prilično uobičajena uzorak gdje ne trebate napraviti kopiju nešto
osim ako to zapravo mijenja. Da.
[Student] Što ako ste imali prirasta unutar testa,
tako da je samo jedan element koji od 1000 bi trebao biti promijenjen?
Nisam siguran.
Mislim da će to kopirati cijelu stvar, ali je moguće da je dovoljno pametan da -
Zapravo, o čemu razmišljam je zamisliti imali smo niz koji izgleda ovako: $ polje2 = [
Zatim indeks '' je niz [1 2 3 4], a indeks 'B' je niz štogod.
Trebam zareze između svih onih. Zamislite tu su zarezi.
Zatim 'c' je vrijednost 3.
Ok.
Sada recimo radimo $ baz ($ polje2);
gdje baz ne uzeti ovaj pozivom.
Dakle $ foo ['c'] + +;
To je takav primjer gdje mi prolaze polje2 kao argument
, a zatim je izmjenom specifičan indeks niza ga povećavanjem.
Ja iskreno nemam pojma što se događa PHP učiniti.
To se lako može napraviti kopiju cijelog stvar, ali ako je pametna,
to će napraviti kopiju tih tipki gdje će to imati svoju prepoznatljivu vrijednost
ali to još uvijek može upućivati ​​na isti niz 1,2,3,4
i to još uvijek može upućivati ​​na isti niz.
Ja ću ga ipad.
Prolazimo u ovom polju gdje je to momak bodova za 3, ovaj momak bodova [1,2,3,4],
Ovaj tip bodova na [34], ...
Sada kada smo to prolazi u Baz, mi smo izmjenu toga.
Ako PHP je pametna, to samo može učiniti -
Mi smo još uvijek morali kopirati neki memorije, ali ako su tamo bili ti veliki ugniježđena subarrays
mi ne treba kopirati one.
Ne znam je li to ono što čini, ali mogu zamisliti da taj događaj.
Ovo je također prilično velika prednost C preko PHP.
>> PHP čini život toliko lakše za puno stvari,
ali nekako su apsolutno nema pojma koliko dobro će obavljati
jer ja nemam pojma ispod haube kad je izradu ove kopije stvari,
oh, je da će biti stalna vrijeme kopija,
Je li to samo će se promijeniti jedan pokazivač, će to biti smiješno teško linearno preslika?
Što ako se ne može pronaći prostor?
Da li to onda treba pokrenuti odvoz smeća da biste dobili neki više prostora?
I odvoz smeća može uzeti proizvoljno dugo.
U C ne morate brinuti o tim stvarima.
Svaki redak li vam pisati može prilično mnogo razloga o tome kako će to izvesti.
>> Hajdemo se osvrnuti na to.
Kako lijepo je to da ne moraju nositi s hash funkcije,
povezane liste, ili bilo što slično?
Budući da rade s hash tablica je tako lako sada, evo zabavna puzzle raditi.
Otvorite datoteku pod nazivom unique.php iu njoj napisati PHP programa
(Također poznat kao "skripte").
Mi imaju tendenciju da ih zovu skripte ako oni kratke stvari koje se pokreću na naredbenog retka.
Uglavnom, svaki jezik koji ne kompajlirati, ali ti si idući u trčanje izvršnu
na naredbenog retka, možete nazvati taj scenarij izvršnu.
Mogao sam jednako dobro napisati C program koji radi to,
ali ja ne zovu skripta jer sam prvi put ga sastaviti, a zatim pokrenuti binarni.
Ali ovo PHP Program ćemo pozvati skriptu.
Ili, ako ćemo ga je napisao u Python ili Perl ili Node.js ili bilo tih stvari,
bismo ih nazvati sve skripte jer ste ih izvoditi na naredbenog retka
ali mi ih ne sastaviti.
Mogli smo to učiniti vrlo brzo.
Nećemo koristiti argv. Ajmo puhati kroz to.
Nazovite to jedinstven, napisati program.
Možete pretpostaviti da ulaz će sadržavati jednu riječ po retku.
Zapravo, argv će biti prilično trivijalan za korištenje.
unique.php.
Prva stvar prvo, želimo provjeriti da li smo prošli jedan naredbenog retka argumente.
Baš kao što se i očekuje argc i argv u C, još uvijek imamo one u PHP.
Dakle, ako ($ argc! == 2) onda neću baviti ispisivanjem poruke ili ništa.
Ja ću samo izlaz, pogreške kod jednog.
Također sam se mogao vratiti jedan.
Rijetko u PHP ste u ovom stanju u kojem smo na -
Obično ste u funkciji zove po funkciji zove po funkciji zove po funkciji.
A ako nešto pođe po zlu, a vi samo želite izaći sve cijelosti,
izlaz samo završava program.
Ovo također postoji u C.
Ako ste u funkciji u funkciji u funkciji u funkciji
i želite ubijati program, možete nazvati izlaz i to samo će izaći.
Ali u PHP je još rijetkost da smo na ovoj najvišoj razini.
Obično smo u nekakvoj funkciji, tako mi zovemo izlaz
tako da ne moramo se vratiti do 1 stvar koja tada shvaća da je pogreška
tako da se vraća gore, ako to prepoznaje došlo je do pogreške.
Mi ne želimo nositi s tim, tako da izlaz (1);
povratak (1), u ovom slučaju bi bilo jednako.
>> Onda ono što želimo otvoriti želimo fopen.
Argumenti će izgledati prilično slično.
Želimo fopen ($ argv [1], a mi želimo da ga otvoriti za čitanje.
To vraća resurs koji idemo na poziv f.
Ovo izgleda prilično slično načinu na koji to radi, osim C nemamo reći FILE *.
Umjesto toga, mi samo reći $ f. Ok.
Zapravo, mislim da je ovo čak i daje nam savjet kao u PHP funkcije zove datoteka. PHP File.
Što se to događa učiniti je pročitati cijelu datoteku u niz.
Vi ne morate čak ni da ga fopen. To će učiniti za vas.
Dakle $ linije = datoteka ($ argv [1]);
Sada se sve linije datoteke su u linijama. Sada želimo sortirati linije.
Kako možemo sortirati linije?
Mi sortirati linije.
I sada možemo ispisati ih ili bilo što drugo.
Vjerojatno najlakši način je foreach ($ $ linije kao linija) echo $ linija;
[Student] Ne bi mi čak i prijeći linije upućivanjem nešto u vrste?
Ovo je mjesto gdje vrsta bi se definirati kao funkcije vrste (& $ array).
Kada pozovete funkciju ga ne prođe referencu.
To je funkcija koja ga definira kao uzimanje kao referencu.
Ovo je zapravo točno ono što je pošlo po zlu
kad smo stavili sve do naših poslužitelja kada smo išli 5,3-5,4.
Do 5,4, to je savršeno razumno.
Funkcija ne očekujem da to uzeti kao referencu, ali možete ga proći kao referencu
pa ako funkcija ne dogodi da ga mijenjati, to je još uvijek mijenjati.
Kao što je 5,4, što ne bi smio to učiniti.
Tako sada jedini način da prođe upućivanjem je li funkcija izričito to radi.
Ako ne želite da ga mijenjati, onda morate učiniti $ kopiju = $ linije i proći kopirati.
Tako sada linije će biti sačuvana i primjerak će biti promijenjen.
php.unique.php. Možda sam zabrljati nešto gore.
Neočekivani 'vrsta'.
Tu će biti nešto što to čini za nas.
To je čak i ne postoji.
Obavijest kada ste pročitali priručnik koji prvi argument je očekuje da će biti niz
i to je uzeti referencu.
Zašto je to žali za mnom? Budući da imam tu funkciju kakvu još da se ovdje ne želim.
Ok, php.unique.php. Nisam ga proći argument jer nemam datoteku.
To je php.unique.php na test.php.
Ovdje je test.php sve isprintati u lijepoj sortiraju bi.
Primijetit ćete da sortirani kako je vrsta čudno za koda datoteke
jer su svi naši praznih redaka će doći prvi
onda će doći svi naši jedne razine udubljenja
onda dolaze svi naši bez udubljenja.
Da. >> [Student] Dakle, za izvornog koda nije donesen pozivom?
Je li to općenito prošao po vrijednosti?
[Bowden] Kada zovete funkciju, to nikada ne određuje hoće li on donesen od strane referencu.
To je funkcija definicija koja određuje hoće li on donesen od strane referencu.
I gleda na funkciji definiciji vrste ili samo gleda na to,
to traje argument pozivom.
Dakle, bez obzira da li želite da ga uzeti za referencu, čini ga uzeti za referencu.
Ona mijenja polje u mjestu.
Ovo je samo nije dopušteno. Ne smijemo to učiniti. >> [Student] Oh, u redu.
[Bowden] To je sorta koja će potrajati linije pozivom i mijenjati.
I opet, ako ne želite to učiniti da bi mogao napraviti kopiju vrste.
Čak iu tom slučaju, kopija nije zapravo kopija linije.
To samo ukazuje na istu stvar dok je prvi dobiva izmjena,
gdje je prvi će se mijenjati u funkciji sortiranja,
gdje, jer to je copy-na-pisati, sada primjerak primjerak će biti izrađen.
Također možete to učiniti. To je drugo mjesto možete vidjeti ampersand.
Možete ga vidjeti u foreach petlji, što se vidi u funkciji deklaracijama,
i vi to vidite kad samo dodjeljivanje varijabli.
Sada smo postigli ništa na taj način
jer kopija te linije su doslovno ista stvar.
Možete koristiti linije i kopirati naizmjenično.
Možete napraviti Isključi ($ kopiju), a da ne Isključi linije,
samo izgubiti svoj osvrt na istu stvar.
Dakle, od ove točke, sada linije je jedini način možete pristupiti linije.
>> Pitanja?
Da.
[Student] Potpuno off topic, ali ne morate zatvoriti PHP s - >> Vi ne razumije.
Ok.
[Bowden] Ja bih ići tako daleko da kažu da je to loša praksa da ih zatvoriti.
To je vjerojatno pretjerivanje, posebno u pismu,
ali vidjet ćemo što će se dogoditi ako sam to učiniti.
To nije učinio ništa. Što ako sam htio - [uzdiše]
Moram proći argument.
Pucaj. Zvao sam ga krivo.
Dakle php.unique.php s argumentom.
Sada ne morate čak ni to.
Ja ću proći to valjani argument.
Ovaj tiskani bez obzira na to je tisak.
Ja sam ispis kopiju i kopirajte ne postoji. Dakle linije.
To ispisati sve, a zatim primijetiti sve ovo smeće ovdje dolje,
jer u PHP ništa što je izvan PHP oznake
samo ide za ispis doslovno.
To je razlog zašto HTML, to je tako lijepo da ja mogu učiniti div bla, bla, bla klasu ili što god,
bla, bla, bla, a zatim učinite nešto PHP kôd, a zatim učinite kraj div.
I sada tiskanje to ću dobiti lijep div do vrha, sve što PHP tiskani, div na dnu.
Razorni kada se nešto ovako događa, što je prilično čest,
samo zalutala newline na dnu datoteke.
Vi ne bi pomislio da će to biti da je veliki posao
dok ne uzeti u obzir činjenicu da je s preglednicima -
>> Kako preusmjerava rad ili u osnovi bilo zaglavlja rad,
kad bi svoju vezu na web stranicu i šalje natrag sve ove zaglavlja i stvari
kao odgovor 200 ili odgovor preusmjeravanja ili bilo što drugo,
Zaglavlja vrijede samo dok prvi bajt podataka je poslan.
Možete preusmjeravati tisuće puta, ali čim prvi bajt podataka je poslan
nisi trebao preusmjeriti opet.
>> Ako imate lutalica newline na dnu datoteke
i recimo da koristite ovu funkciju, a zatim želite -
Ajmo reći da je to još jedna datoteka koja je index.php i require_once nešto -
Ja ne mogu zamisliti dobar primjer toga.
Problem se događa kada ova linija na dnu dobiva odjek.
Ne želim ništa da su ponovio još.
Iako niste namjeravali na ništa dobivanje odjeknuo, nešto nije se ponovio
i tako sada niste trebali poslati bilo više zaglavlja
i ti ćeš dobiti pritužbe.
Vi ne trebate one oznake za zatvaranje.
Ako mislite na to nešto s HTML -
i to je savršeno razumno učiniti ovdje dolje div god
i onda u tom trenutku možete ili ne možete ih uključiti.
To ne stvarno tvar.
Ali u PHP skripti to je rijetko da ga zatvoriti.
Kad je sve PHP, apsolutno sve,
ti stvarno ne treba ga zatvoriti / ne treba ga zatvoriti.
>> Suočavanje sa žice je puno ljepše nego u C.
U PHP možete navesti niz s jednim ili dvostrukim navodnicima.
S jednostruke navodnike ne možete koristiti "pobjeći" sekvence.
Stalno pobjeći, bla, bla, bla.
Dakle printf je vrlo rijetka u PHP.
Mislim da će koristiti printf ako sam htio napraviti neku vrstu stvar - u pset 5 ste koristili sprintf ili što god.
No, želite učiniti 001.jpg 002.jpg i.
Dakle, za takve stvari, gdje sam zapravo žele oblikovati tekst bih koristiti printf.
No, inače bih samo koristiti string ulančavanje.
Ja nikada stvarno koristiti printf.
Mi samo razlikovanje pojedinosti između jednostruke navodnike i dvostrukim navodnicima.
Najveća razlika je u tome što jednostruke navodnike, to će biti tiskan doslovno.
Nema char tip podataka u PHP-u, za razliku od C, tako da je to ekvivalent za to.
Oni su obje žice.
I lijepa stvar o jednom citat žice je da sam mogao reći 'Bok svijete!' bla, bla, bla,
$ $ Wooo.
Što se događa kad sam ispisati to je da će ga ispisati doslovno.
Idemo riješiti sve naše stvari.
Dakle, echo $ str1;
To je doslovno tiskana sve one stvari: dolar znakovima,
backslash n, što mislite da bi bi bilo nove linije i dr. -
sve te stvari ispisuje doslovno.
Jedina stvar koju trebate pobjeći su jednostruke navodnike
jer inače ne bi pomislio da je zatvaranje jednostruke navodnike.
Dupli citati, potpuno različiti.
Već smo vidjeli sintakse nas cluing na ono što je o tome da ide užasno krivo.
php.unique. Undefined variable: wooo jer to se tumači kao varijabla zove wooo.
Dupli citati neka vam umetnuti varijable u -
Recimo $ ime = "Rob";
Dakle echo "Bok, moje ime je $ ime!";
To priznaje to kao varijabla.
Kad sam pokrenuti da - i ja ću umetnuti novi red - Bok, moje ime je Rob! i hello svijet!
To je zato što nikada nisam uklonjen ispis wooo gore.
Tu je jedan korak dalje možete učiniti.
$ Niz = [1, 2, 3];
Što ako želim ispisati prvi indeks niza?
Možete napraviti $ niz [0].
U sintakse je trag. Što je to sad?
php.unique.
Bok, moje ime je jedan! koji nije ono što sam želio.
Sintaksa Isticanje mi je lagao.
Pokušajmo '' -> 1, 'b' -> 2.
Tako sam morao napisati.
Neočekivani jedan citat (T_ENCAPSED bla, bla, bla, bla, bla).
Ideja je da to ne prepoznaju to kao dio niza.
To ne priznajući to kao niz indeksiranih pismom u.
Vi želite učiniti da vitičastih zagrada,
i sada sve što je u ovom kovrčave vitice će biti interpolirana,
što je riječ koju koristimo za magično umetanja ove varijable u pravim mjestima.
Sada to, php.unique, a Bok, moje ime je jedan! kao što se očekuje
ili Bok, moje ime je Rob!
Jedna stvar koja je vrsta lijepo o jednostruke navodnike je da -
Tu je neki trošak za interpolacijom.
Ako koristite dvostruke navodnike, tumač mora ići preko ovaj niz,
pazeći da, "Oh, ovdje je varijabla. Sada moram ići dobiti tu varijablu i umetnite ga ovdje."
Čak i ako ne koristite nikakve varijable,
ništa unutar tih navodnicima treba interpolirati,
ali to će i dalje biti sporiji jer treba ići preko dvostruke navodnike
u potrazi za stvari koje treba interpolirati.
Dakle jednostruke navodnike može biti malo brže, ako ništa treba interpolirati,
i ja imaju tendenciju da se čak i koristiti jednostruke navodnike za 'Bok, moje ime je'. $ Array [''] svejedno.
To će biti ekvivalent onoga što smo imali prije.
Ali to je stvar preferencija.
Ako ste koristeći PHP, vjerojatno ne zanima razlika u brzini.
Tu nije dovoljno da bi ih urazumiti se na početak.
>> Bilo konačne pitanja?
>> Mi zapravo nije ni dobiti kroz sve to, ali ova stvar je bilo dosadno.
Zadnja stvar koja je vrsta lijepo u PHP je kada ste se bave HTML,
ćete koristiti ga malo, tako lijepo prečac sintaksu za ispis varijablu.
Bez stavljajući PHP ovdje, to se zove kratke oznake.
Službeno kao PHP 5.4, to je zastarjelo.
Vi se preporučuje staviti php.
To je još uvijek podržavaju, tako kratke oznake s <? = Još uvijek savršeno u redu.
To je po defaultu podržava, tako da možete koristiti ove kao što želite, i oni su prilično zgodan.
>> Ima li pitanja?
U redu.
>> Ostani sa stilom, San Diego.
[Nasmijao]
Bok. [Smijeh]
[Pljesak] [smijeh]
>> [CS50.TV]