[Powered by Google Translate] [Secțiunea 8 - mai confortabil] [Rob Bowden - Universitatea Harvard] [Acest lucru este CS50. - CS50.TV] Aceste note săptămâni secțiune vor fi destul de scurt, așa că am de gând să păstreze vorbesc, voi sunteți de gând să păstreze pună întrebări, și vom încerca să umple cât mai mult timp posibil. O mulțime de oameni cred că acest lucru nu este neapărat PSET dificil, dar e foarte lung. Spec. PSET în sine durează o oră pentru a citi. Noi vă dau o mulțime de SQL ați putea avea nevoie, eventual, de a utiliza. Noi te plimbi printr-o mulțime de ea, așa că nu ar trebui să fie prea rău. Are cineva a început sau terminat? E ultima PSET. Oh, Doamne. De obicei, există un JavaScript unul dupa asta, dar lucrurile schimbarea calendarului face tot ceea ce 1 săptămâni mai scurtă, iar noi nu mai avem o PSET JavaScript. Nu știu cum, care afectează dacă JavaScript este de gând să apară pe examenul sau Quiz 1. Îmi imaginez că va fi ceva de genul ce trebuie să știți lucruri de nivel înalt despre JavaScript, dar mă îndoiesc că vom da doar tu direct cod JavaScript din moment ce nu au avut o PSET în ea. Dar asta va fi ceva de reexaminare test săptămâna viitoare. Secțiunea de întrebări. O mulțime de aceste lucruri este oarecum prost formulată, dar vom discuta de ce. Spre deosebire de C, PHP este un "dinamic tastat-" limba. Ce înseamnă, vă întreb? Ei bine, un cuvânt de spus la revedere de la toți cei float char, int, și alte cuvinte cheie care aveți nevoie pentru a utiliza la declararea variabilelor și funcții în C. În PHP, tipul unei variabile este determinată de valoarea pe care în prezent este exploatație. Deci, înainte de a ne introduce acest cod într-un fișier numit dynamic.php, PHP este dinamic tastat. Acest lucru este adevărat. Eu nu sunt de acord cu faptul că ceea ce înseamnă că spunem la revedere de la char, float, int, și alte cuvinte cheie. Diferența exactă între dinamic tastat și alternativă, care este static tastat, este că dinamic tastat, toate verificare tip și chestii se întâmplă la momentul execuției, întrucât static tastat se întâmplă în timpul compilării. Cuvântul statică, în general, pare să însemne lucruri compilare de timp. Cred că există alte utilizări pentru ea, dar în C, atunci când declarați o variabilă statică, stocarea se alocă în timpul compilării. Aici, dinamic tastat înseamnă doar că - În C, dacă încercați să adăugați un șir și un număr întreg, atunci când îl compilați, o să plâng pentru că o să spun că nu se poate adăuga un int și un pointer. Nu este doar o operațiune validă. Acesta este un alt lucru pe care vom ajunge la o secundă. Dar acest tip de control, faptul că acesta critică la momentul compilarii, este verificarea de tip static. Există limbi în cazul în care nu aveți nevoie să spun float char, int, și toate aceste lucruri, dar limbajul poate spune de la contextul lucru ce tip ar trebui sa fie, dar e încă static tastat. Deci, dacă vă luați 51, OCaml, nu aveți nevoie pentru a utiliza oricare dintre aceste tipuri, dar încă la momentul compilării va spun ca nu se poate face acest lucru pentru că sunteți amestecarea un int și un șir. Dinamic tastat înseamnă doar că undeva în timpul rula ai de gând pentru a obține o plângere. Dacă ați folosit, de asemenea, înainte de Java, în general, aproape orice limbă C-tip va fi introdus static, deci C, C + +, Java, toate acestea sunt, în general, static tastate. În Java, atunci când compilați ceva și vrei să spui că sirul s este egal cu ceva nou, care nu este un șir de caractere, care este de gând să se plângă, deoarece aceste tipuri pur și simplu nu se potrivesc. Asta o să se plângă în timpul compilării. Dar ea are, de asemenea, ceva timp dinamic lucrurile place dacă încercați să arunce ceva la un tip care este mai specifică decât tipul său actual, nu e nimic ce poate face la momentul compilarii pentru a verifica dacă această turnat se va reuși. Java are, de asemenea, un anumit tip dinamic, verificarea faptului că, de îndată ce ajunge la acea linie de cod atunci când este de fapt de executare, se va face exprimate, verificați dacă această exprimate a fost valabilă în primul rând, si daca nu a fost, atunci o să plâng de faptul că aveți un tip nevalid. Tip dinamic verificare. Tastați acest într-un fișier numit dynamic.php. Dynamic.php. Voi unzip că formatarea. Avem o variabilă, l-am setat la întreg 7, atunci vom imprima-l și% s - Oh, suntem imprimarea tipul de ea, așa că gettype este de gând să se întoarcă tipul de variabilă. Suntem imprimați doar tipul de peste si peste din nou. Noi doar php.dynamic.php. Vom vedea că acesta se schimbă de la întreg la STRING să booleană așa cum am trece prin. În C nu există nici un tip de date boolean, nu există nici un tip de șir de date. Nu e char * și Boolean doar tinde sa fie int sau char sau ceva de genul. În PHP aceste tipuri nu există, și că este unul dintre cele mai mari avantaje ale PHP peste C - că operațiunile șir sunt infinit mai ușor decât în ​​PHP C. Acestea funcționează doar. Deci, ne întoarcem aici. Am fugit dynamic.php. Aceasta spune PHP interpret, numit php, pentru a rula cod PHP în dynamic.php. Dacă aveți orice erori în fișierul, interpretul va spune! Interpret, aceasta este o altă mare diferență între PHP și C. În C, trebuie să compilați ceva și apoi executați fișierul compilat. În PHP nu doriți să compilați nimic. Deci, interpretorul PHP este practic doar citind aceasta linie cu linie. Ea lovește var = 7, apoi loveste printf apoi hit-uri var apoi loveste printf și așa mai departe. Există un pic de compilarea o face, și memorează în cache rezultatele așa că, dacă rulați scriptul mai tarziu poti sa faci unele, dar în esență este o linie de linie fel de lucruri. Asta înseamnă că o mulțime de optimizări pe care le vom obține în C, cum ar fi colectarea, e doar, în general, compilatorul poate face o mulțime de trucuri pentru tine. Se poate scoate variabilele neutilizate, se poate face toate aceste tipuri de lucruri, se poate face recursivitate coadă. În PHP nu ești mergi la a lua acest avantaj deoarece este doar de gând să înceapă de executare linie cu linie cu linie, și nu recunoaște într-adevăr aceste lucruri la fel de ușor din moment ce nu este o trecere de compilare mare peste lucru și apoi de execuție; e doar linie cu linie. Așa că e interpretul. Copii de la tastarea noastre dinamice: destul de tare, nu-i așa? Tu cu siguranta nu ar putea face asta in C! Acum, a se vedea dacă vă puteți da seama de tipul de fiecare dintre următoarele valori. A se vedea acest lucru pentru referință. Deci, 3.50. Ce tip crezi că va fi? Aici sunt tipurile pe care le avem. Avem bools, întregi, cu puncte plutitoare, siruri de caractere, tablouri, obiecte, și apoi a resurselor, care este un fel de vag. Cred că e de fapt un exemplu aici. Apoi, nu e NULL. NULL este un tip special. Spre deosebire de C, unde NULL este doar un pointer cu adresa 0, în PHP, este NULL propriul său tip în cazul în care singurul lucru valabil de acest tip este NULL. Acest lucru este mult mai util pentru verificarea erorilor. În C, unde am avut această problemă în cazul în care, dacă te vei întoarce NULL, înseamnă asta te întoarce un pointer NULL NULL sau folosind pentru a semnifica eroare sau toate pe care am avut confuzie la un moment dat. Aici, revenind NULL înseamnă, în general, de eroare. O mulțime de lucruri se întoarcă, de asemenea, falsă pentru eroare. Dar ideea este de tip NULL, singurul lucru de tip NULL este NULL. Apoi, callback este ca poti defini unele funcții anonime. Nu trebuie să dau un nume funcției, dar nu va avea de a face cu asta aici. Privind la tipurile pe care ei nu se așteaptă ca noi să știm, ce crezi tipul de 3,50 este? >> [Elev] Float. Da. Deci aici, ce crezi tipul de acest lucru este? >> [Elev] Array. Da. Primul a fost float, cea de a doua este o matrice. Observați că această matrice nu este ca o matrice C în cazul în care aveți indicele 0 are o valoare, indicele 1 are o anumită valoare. Aici sunt indicii a, b, și c și valorile sunt 1, 2, și 3. În PHP există nici o diferență între un tablou asociativ și la doar o matrice regulat cum v-ar gândi la ea în C. Nu este doar acest lucru, iar sub capota o matrice regulat este doar un tablou asociativ unde 0 hărți la o anumită valoare acelasi mod, un hărțile la o anumită valoare. Din acest motiv, PHP poate fi destul de rău pentru foarte repede cod / benchmarking lucruri deoarece în C atunci când utilizați o matrice știți că accesarea unui membru este constanta de timp. În PHP accesarea unui membru este cine știe cât de mult timp? Este, probabil, constantă dacă aceasta hash-uri în mod corect. Cine știe ce este într-adevăr face sub capota? Chiar ai nevoie să te uiți la punerea în aplicare a vedea cum se va face cu asta. Deci, atunci fopen. Cred că aici sa fopen doar PHP manualul să se uite la tipul de retur. Noi vedem aici poti sa te uiti destul de mult orice funcție în manualul PHP și acest lucru este un fel de pagina de manual a PHP. Tipul de întoarcere va fi de resurse. De aceea l-am privit în sus, pentru că nu a definit cu adevarat de resurse. Ideea de resurse, în C ai un fel de ai o * FILE sau orice altceva; în PHP este resursa de fișiere *. E ceea ce ai de gând să fie citit de la, este ceea ce ai de gând să fie scris. E de obicei extern, deci este o resursă poti trage si arunca lucruri de la lucruri la. Și, în sfârșit, ceea ce este tipul de NULL? >> [Elev] NULL. Da. Deci, singurul lucru care este NULL este NULL. NULL este NULL. O caracteristică a sistemului de tip PHP (pentru o mai bună sau mai rău pentru) este capacitatea sa de a jongla tipuri. Când scrieți o linie de cod PHP care combină valori de diferite tipuri, PHP va încerca să facă lucrul sensibil. Încercați fiecare din următoarele linii de cod PHP. Ce se tipărit? Este ceea ce v-ați așteptat? De ce da sau de ce nu? Acest fapt despre PHP este ceea ce face ca ceea ce noi numim slab tastat. Slab și puternic tastat tastat, există utilizări diferite pentru acești termeni, dar cei mai mulți oameni folosesc slab și puternic tastat tastat pentru a înțelege acest fel de lucru în cazul în care ("1" + 2), că funcționează. În C, care nu ar funcționa. Vă puteți imagina acest lucru nu funcționează. O mulțime de oameni se amestecă până tastarea dinamic și dactilografiere slab și dactilografiere statice și tastarea puternic. Python este un alt exemplu de limbaj care este dinamic tastat. Puteți arunca în jurul valorii de tipurile din variabile și se va stabili la momentul execuției orice verificări eroare. În Python se va executa acest lucru și-l va vedea ("1" + 2); și aceasta va eșua, deoarece se spune că nu se poate adăuga un șir și un număr întreg. În PHP, care este la fel de dinamic tastat, acest lucru nu va eșua. Dactilografiere slab are de a face cu faptul că aceasta face lucrurile cu diferite tipuri de care nu face cu adevărat sens neapărat. Deci, ("1" + 2), îmi pot imagina că a fi șirul 12, îmi pot imagina a fi șirul 3, Îmi pot imagina a fi întreg 3. Nu e neapărat bine definite, și vom vedea, probabil, va aici că, atunci când am imprima ("1" + 2); este, probabil, va sfârși prin a fi diferit mult decât imprimarea (1 + "2"). Și aceasta tinde să fie, în opinia mea, pentru mai rău. Aici putem încerca astea. Un alt mic truc despre PHP este că nu aveți nevoie pentru a scrie de fapt, fisierul. Aceasta nu au rulat acest modul de comanda. Deci, php-r, atunci putem arunca în comanda aici: "Print ('1 '+ 2)," și voi arunca o linie nouă. Acest tipărită 3. Se pare că imprimă 3 și e întreg 3. Deci, acum să încercăm un alt mod în jurul valorii de: "Print (1 + '2 '); Ajungem 3, și este, de asemenea, va fi întreg 3? Nu am nici o idee sincer. Se pare că este în concordanță. Nu există nici o șansă de a se fi 12 șir sau ceva de genul asta deoarece PHP, spre deosebire de JavaScript și Java prea, are un operator de concatenare separată pentru. Concatenarea în PHP este dot. Deci, de imprimare (1 '2 '.); Este de gând să ne dea 12. Acest lucru tinde să ducă la confuzii în cazul în care oamenii încearcă să facă ceva de genul + str = un alt lucru pe care doresc să adauge pe la sfârșitul șir lor, și că va eșua. Ai nevoie pentru a face Str. = Deci, nu uita de concatenare în PHP este un punct. Alte lucruri pentru a încerca: print ("CS" + 50); Ți-am spus că nu există nici o speranță de acest rezultat CS50 deoarece nu este concatenarea +. Ce crezi că se va termina prin a fi? Nu am absolut nici o idee sincer. Se pare ca e doar 50. Se vede șir, și Pun pariu că dacă punem 123CS - Se vede primul șir, încearcă să citească un număr întreg de la el sau de un număr din ea. În acest caz, se vede 123CS. "Asta nu are nici un sens ca un întreg, așa că am de gând doar să se gândească de 123." Deci 123 + 50 va fi 173. Și aici începe să citească acest lucru ca pe un întreg. Ea nu vedea nimic, așa că tratează la fel ca 0. Deci, 0 + 50 este de gând să fie de 50. Această Sunt presupunând că este de gând să facă ceva asemănător. Mă gândesc 99. Da, pentru că va lua primul - Deci, 99. Aici (10/7), în cazul în care acest lucru ar fi C, ceea ce ar fi asta se întoarcă? [Elev] 1. Da >>, ar fi 1, deoarece 10/7 este împărțirea 2 numere întregi. Un întreg divizat de către un întreg este de gând să se întoarcă un întreg. Ea nu poate returna un punct indiferent de care ar fi, asa ca e doar de gând să se întoarcă 1. Aici imprimarea (10/7), ea va interpreta, de fapt asta. Iar acest lucru înseamnă că, dacă chiar vrei să faci rotunjirea număr întreg și chestii de genul asta, ce trebuie sa faci print (etaj (10/7)); În C e ciudat că, probabil, vă puteți baza pe întreg trunchiere în mod regulat, dar în PHP nu se poate, pentru că se va transforma automat într-un flotor. Și apoi (7 + adevărat); ce crezi că va fi? Bănuiesc 8 în cazul în care va interpreta adevărat ca 1. Se pare ca e 8. Deci, tot ce am făcut în ultimele 10 minute nu trebuie să vă facă absolut. Veți vedea codul care face acest lucru. Aceasta nu trebuie să fie la fel de simplu ca asta. Ai putea avea 2 variabile, și 1 variabilă se întâmplă să fie un șir de caractere și alte variabile se întâmplă să fie un int, iar apoi adăugați aceste variabile împreună. Începând cu PHP este dinamic tastat și nu va face nici o verificare de tip pentru tine și din moment ce este scris si slab, deoarece acesta va arunca pur și simplu în mod automat aceste lucruri împreună și totul va funcționa doar, că e dificil să știi chiar că această variabilă trebuie să fie un șir de acum, așa că nu ar trebui să-l adăugați la această variabilă, care este un număr întreg. Cea mai bună practică este dacă o variabilă este un șir de caractere, păstrați-l ca pe un șir pentru totdeauna. În cazul în care o variabilă este un int, păstrați-l ca un int pentru totdeauna. Dacă doriți să se ocupe cu numere întregi și siruri de caractere, aveți posibilitatea să utilizați varsint - asta e JavaScript. Intval. Eu fac asta tot timpul. PHP si JavaScript-am amesteca totul. Deci, intval se va returna valoarea întreagă a unei variabile. Dacă trecem de la "print (intval ('123 ')); te 123. Intval sine nu este de gând să facă verificarea pentru noi că este exclusiv un număr întreg. Manualul PHP, există atât de multe funcții doar disponibile, Deci, aici cred că ceea ce mi-ar folosi is_numeric este primul. Bănuiesc că sa întors fals. Asta e un alt lucru pe care trebuie să mergem peste === este. Deci is_numeric ("'123df), nu s-ar gândi că, în calitate is_numeric. În C va trebui să itera peste toate caracterele și verificați pentru a vedea dacă fiecare caracter este cifră sau orice altceva. Aici is_numeric este de gând să faci asta pentru noi, și se întoarce fals. Asa ca atunci cand am imprimat că, la tipărit nimic, asa ca aici am comparându-l pentru a vedea, ai se întâmplă să fie falsă? Și acum e de imprimare 1. Se pare că imprimă o ca fiind adevărat în loc de imprimare adevarat ca adevărat. Mă întreb dacă fac print_r. Nu, nu încă 1. Revenind la ===, == încă mai există, și dacă vorbești cu Tommy va spune == este perfect în regulă. Am de gând să spun că == este groaznică și niciodată nu ar trebui să folosească ==. Diferența este că == compară lucrurile în cazul în care acesta poate fi adevărat, chiar dacă ei nu sunt de același tip, întrucât === compară lucrurile și mai întâi controalele sunt ele același tip? Da. Bine, acum mă duc să văd dacă acestea compară de fapt, să fie egal. Veți obține lucruri ciudate, cum ar fi 10 este egal cu - Să vedem ce spune. Deci, ('10 '== '1 E1'); Aceasta returnează adevărat. Are cineva orice presupuneri de ce returneaza true? Nu este vorba doar despre asta. Poate că acest lucru este un indiciu. Dar dacă am schimba asta la un f - l naibii! I a păstra folosind ghilimele duble. Motivul ghilimelele duble sunt țipi la mine pentru ca am pus acest lucru în ghilimele duble. Așa că am putea scăpa de ghilimele duble de aici, dar ghilimele simple face mai ușor. Deci, ('10 '== '1 F1'); nu se imprimă adevărat. ('10 '== '1 E1'); imprimă adevărat. [Elev] Este hexazecimal? >> Nu e hex, dar e pe aproape că e ca și cum - 1E1, științifice notație. Acesta recunoaște 1E1 ca 1 * 10 ^ 1 sau orice altceva. Acestea sunt numere întregi egale. Dacă facem === atunci va fi falsă. Nu am nici o idee de fapt, dacă facem ceea ce == despre (10 și "'10abc);? Bine. Deci asta e adevărat. Deci, la fel ca atunci cand ai facut (10 + '10abc '); și ar fi de 20, aici (10 == '10abc '); este adevărat. Chiar mai rău sunt lucruri cum ar fi fals (== NULL); este adevărat sau (false == 0); este adevărat, (false == []); Există cazuri ciudate de - Asta e unul din acele cazuri ciudate. Observați că (false == []); este adevărat. ('0 '== False); este adevărat. ('0 '== []); Este falsă. Deci, == este în nici un fel tranzitiv. o poate fi egal cu B și o poate fi egal cu C, dar b nu ar putea fi egală cu c.. Asta e o urâciune pentru mine, și ar trebui să folosiți întotdeauna ===. [Elev] Putem face la fel de bine ==!? >> [Bowden] Da. Echivalentă ar fi! = Si ==.! Aceasta este de fapt a adus în spec. PSET în cazul în care o mulțime de funcții retur - Manualul PHP este bun despre asta. Se pune într-o cutie roșie mare, "Acest lucru va întoarce fals dacă există o eroare." Dar revenind 0 este un lucru perfect rezonabil să se întoarcă. Gândiți-vă la orice funcție care este de așteptat să se întoarcă un întreg. Să spunem că această funcție ar trebui să conta numărul de linii într-un fișier sau ceva de genul. În condiții normale, nu treci această funcție un fișier și-l va returna un număr întreg care reprezintă numărul de linii. Deci 0 este un număr perfect rezonabilă, dacă fișierul este doar gol. Dar ce se întâmplă dacă se trece un fișier invalid și funcția se întâmplă să se întoarcă false daca treci acesta un fișier invalid? Dacă ai făcut == nu ești de diferențiere între cazul fișierul invalid și fișier gol. Folosiți întotdeauna ===. Asta e tot din astea. În PHP, tipul de matrice este diferit de ceea ce v-ați obișnuit în C. Într-adevăr, este posibil să fi observat deja această anterior, când a văzut că aceasta este de tip matrice. Sintaxa suportul este nou începând cu PHP 5.4, care este cea mai nouă versiune a PHP. Înainte de a vă prezenta întotdeauna a trebuit să scrie array ('a' -> 1, 'b' -> 2. Asta a fost constructorul pentru o matrice. Acum, PHP a ajuns în cele din urmă în jurul valorii de la sintaxa frumos de doar paranteze drepte, care este doar atât de mult mai bine decât matrice. Dar avand in vedere PHP 5.4 este cea mai nouă versiune, este posibil să întâlniți locuri care nu au nici măcar PHP 5.3. Peste vara am fugit în această problemă în cazul în care PHP 5.3 a fost ceea ce am avut pe aparat, dar serverul care ne desfășurat întreaga noastră rezervă de grad și să trimiteți și toate chestiile alea la a fost PHP 5.4. Nu se știe acest lucru, ne-am dezvoltat la pct. 5.3, împins la 5,4, și acum, dintr-o nici unul bruscă a codului nostru de lucrări pentru că acolo sa întâmplat să fi fost schimbări între 5.3 și 5.4 care nu sunt compatibil, și noi trebuie să mergem și să fixeze toate lucrurile noastre, care nu lucrează pentru PHP 5.4. Pentru această clasă, deoarece aparatul are PHP 5.4, e perfect în regulă să utilizați paranteze pătrate. Dar, dacă sunteți în căutarea lucruri în jurul valorii de internet, dacă sunteți în căutarea de până un fel de chestii matrice, cel mai probabil ai de gând să vadă vraja din sintaxa constructorul matrice de la care a fost în jurul valorii începând cu PHP sa nascut și sintaxa suportul patrat a fost în jurul valorii în ultimile luni sau ori de câte ori a venit în jurul valorii de 5.4. Acesta este modul în care indicele. La fel ca în C cum v-ar indicele de paranteze drepte, cum ar fi $ array [0], $ array [1], $ array [2], vă indice același mod, dacă se întâmplă să aibă indici de a fi siruri de caractere. Deci $ array ['a'] si $ array ['b']. $ Array [b]. De ce ar fi greșit? Acesta va genera, probabil, un avertisment, dar încă funcționează. PHP tinde să facă asta. Acesta tinde să doar, "am de gând să te avertizez despre acest lucru, dar eu sunt doar de gând să continui "Și de a face tot ce pot." Acesta va traduce, probabil, acest lucru un șir, dar este posibil ca la un moment dat, în trecut, a spus cineva define b pentru a fi "Hello World". Deci, acum B ar putea fi o constantă matrice și $ [b] va fi, de fapt face "Hello World". Cred că în acest moment, sau cel puțin noastre setările PHP, dacă încercați să indice într-o matrice și că tasta nu există, acesta va eșua. Nu cred că va avertiza doar tu. Sau cel puțin o puteți seta în așa fel încât să nu avertizeze doar tu, doar drept în sus eșuează. Felul în care verificați pentru a vedea dacă există de fapt, este un astfel de index este isset. Deci, isset ($ array ['Hello World']) va returna FALSE. isset ($ array ['b']) va reveni adevărat. Puteți amesteca aceste sintaxe. Sunt destul de sigur că ceea ce această matrice va sfârși prin a fi este - Putem testa. Oh, am nevoie de PHPWord. Acest lucru este amestecarea sintaxa în cazul în care să specificați ceea ce este cheia și nu precizează ce cheia este. Deci, 3 chiar aici este o valoare. Tu nu au în mod explicit a declarat ceea ce cheia sa va fi. Ce crezi că cheia sa va fi? [Elev] 0. >> Bănuiesc 0 doar pentru că e prima nu am specificat. Putem face de fapt, o pereche de aceste cazuri. Deci, este print_r imprima recursiv. Acesta va imprima întreaga matrice. Aceasta ar imprima subarrays de matrice în cazul în care ar exista vreun. Deci, print_r ($ array); php.test.php. Se pare ca acesta a dat-o 0. Nu e de fapt ceva pentru a păstra în minte aici, dar vom reveni la ea într-o secundă. Dar ce se întâmplă dacă I ​​se întâmplă pentru a face acest indice 1? PHP nu face diferența între indicii de coarde și indici întregi, astfel încât în ​​acest moment am definit doar un indice 1 și eu pot face pe amândouă array $ [1] și $ array ['1 '] și va fi același index și aceeași cheie. Deci, acum ce crezi 3 va fi? >> [Elev] 2. >> [Bowden] Bănuiesc 2. Da. E 2. Ce se întâmplă dacă am făcut acest lucru este 10, aceasta este de 4? Ce părere aveți indicele de 3 va fi? Mă gândesc 11. Parerea mea ca la ceea ce face PHP - și cred că am mai văzut asta înainte - este pastreaza doar evidența a ceea ce mai mare indice numeric este folosit până în prezent este. Niciodată nu se va atribui un indice șir la 3. Acesta va fi întotdeauna un index numeric. Deci, ține evidența cel mai înalt este atribuit până în prezent, care se întâmplă să fie 10, și se va da 11 - 3. Ceea ce am spus mai înainte, observați modul în care aceasta se imprimă această matrice. Se imprimă tasta 10, tasta 4, tasta 11, D-cheie. Sau chiar să facem - Cred că nu am pus un 0, dar e de imprimare 1, 2, 3, 4. Ce se întâmplă dacă am trece aici? Sau hai să comutați de fapt aceste 2. Acum se imprimă 2, 1, 3, 4. Matrice PHP nu sunt la fel ca dumneavoastră tabel hash regulat. E perfect rezonabil să ne gândim la ei ca tabele de dispersie 99% din timp. Dar în tabele de dispersie nu e nici un sens de ordinea în care lucrurile au fost inserate. Asa ca imediat ce îl introduceți în tabelul hash, Presupun că nu e legată de listă și ai putea judeca într-o listă legată care a fost introdus primul. Dar aici am inserat 2 primul și-l știe atunci când este imprimarea acestei matrice că 2 este pe primul loc. Ea nu-l imprimă în orice fel de ordine. Structura de date tehnice care se utilizează este o hartă ordonat, asa ca hărți cheile de la valorile și își amintește ordinea în care aceste chei au fost inserate. Practic e la unele complicații în cazul în care e enervant sa, de fapt - Să presupunem că aveți o matrice 0, 1, 2, 3, 4, 5 și doriți să luați în indexul 2. O modalitate de a face aceasta, să vedem ce arata. 0, 2, 1, 3, 4. Unset se întâmplă pentru a demarca starea ambele variabile și indicii matrice. Deci, unset ($ matrice [2]); Acum, ce e asta o să arate ca și cum? 2 este tocmai a trecut, așa că e perfect în regulă. Mai enervant este, dacă vrei ca lucrurile să fie de fapt ca un tablou. Voi pune numere aleatoare. Acum observă indici mele. Vreau să fie la fel ca o matrice C, unde se duce de la 0 la lungimea - 1 și eu pot itera peste el ca atare. Dar, de îndată ce am demarca starea doilea indice, ceea ce a fost în indexul 3 nu acum devine indice 2. În schimb, doar că elimină index și acum te duci 0, 1, 3, 4. Acest lucru este perfect rezonabil. E doar enervant și ce trebuie să faci lucruri, cum ar fi lipitură matrice. Da. [Elev] Ce s-ar întâmpla dacă ați avut o buclă pentru și ai vrut să mergi peste toate elementele? Atunci când a lovit 2, l-ar ceda vreodată? Iterarea peste o matrice. Există 2 moduri în care puteți face acest lucru. Aveți posibilitatea să utilizați un regulat pentru buclă. Aceasta este o altă complexitate a PHP. Cele mai multe limbi, aș spune, avea un fel de lungime sau LEN sau ceva de genul indicând lungimea unui array. În PHP e numărătoarea. Deci, count ($ array); $ i + +) Hai să imprimare ($ array [$ i]); Notă: Undefined offset: 2. E doar de gând să eșueze. Acesta este motivul pentru care, pentru cea mai mare parte, nu aveți nevoie pentru a itera peste o matrice de genul asta. Ar putea fi o exagerare, dar niciodată nu trebuie să itera peste o matrice ca aceasta deoarece PHP ofera sintaxa foreach în cazul în care foreach ($ array de la $ articol). Acum, dacă am tipărarea ($ element); - Vom discuta într-un al doilea - care funcționează perfect în regulă. Modul în care foreach este de lucru este primul argument este matrice pe care îl iterarea peste. Și al doilea argument, articol, prin fiecare trecere a buclei de se va lua pe urmatorul lucru în matrice. Deci, amintiți matrice are o ordine. Prima dată prin bucla pentru, elementul va fi 123 atunci acesta va fi de 12, atunci acesta va fi de 13, atunci acesta va fi 23, atunci acesta va fi 213. Lucrurile devin cu adevarat ciudat atunci când faci ceva de genul foreach. Să vedem ce se întâmplă pentru că niciodată nu ar trebui să faci asta. Ce se întâmplă dacă am unset ($ matrice [1]); Asta a fost, probabil, de așteptat. Te iterarea peste această matrice, și de fiecare dată când te Dezactivarea primul indice. Deci, pentru index 0, primul lucru, elementul ia valoarea 0, asa ca va fi 123. Dar în interiorul buclei de noi nesetata indice 1, astfel că înseamnă 12 este plecat. Deci, imprimați. PHP_EOL. PHP_EOL este doar linie noua, dar e mult mai portabil punct de vedere tehnic deoarece liniile noi din Windows este diferit de la liniile noi de pe Mac și UNIX. Pe Windows newline este \ r \ n, în timp ce peste tot se tinde doar pentru a fi \ n. PHP_EOL este configurat astfel încât să foloseste orice newline sistemul dumneavoastră este. Imprima astfel încât. Să nu print_r ($ array), la sfârșitul anului. Am avut nici o idee că ar fi comportamentul. Postul încă ia valoarea 12, chiar dacă am demarca starea 12 înainte de a ne vreodată trebuie să-l de la matrice. Nu luați cuvântul meu în acest sens, dar se pare ca foreach creează o copie a matrice și apoi elementul ia toate valorile de pe acest exemplar. Deci, chiar dacă modificați matrice în interiorul bucla for, nu va pasa. Postul va prelua valorile originale. Să încercăm Dezactivarea-l. Ce se întâmplă dacă acest lucru este $ array [1] = "Hello"; Chiar dacă am pus "hello" în matrice, nu element ia acea valoare. Există o altă sintaxă la foreach bucle în cazul în care ați pus 2 variabile separate printr-o săgeată. Această variabilă primul va fi cheia acestei valori, și această a doua variabilă va fi elementul exact aceeasi. Acest lucru este neinteresant aici, dar dacă ne întoarcem la cazul nostru original "a" -> 1, "B" -> 1, aici, dacă am repeta doar pentru fiecare matrice ca element, elementul este de gând să fie de 1 de fiecare dată singur. Dar dacă noi, de asemenea, vreau să știu cheie asociate cu acel element atunci vom face de la $ cheie -> $ element. Deci, acum putem face de imprimare ($ cheie ":".. Acum este iterarea peste și imprimarea fiecare cheie și valoarea sa asociat. Un lucru suplimentar putem face în foreach bucle este posibil să vedeți această sintaxă. Ampersand înainte de nume de variabile tind să fie modul în care PHP se trimiteri. În cazul în care trimiterile sunt foarte asemanatoare cu pointerii, nu aveți indicii, astfel încât să nu se ocupe de memorie direct. Dar tu nu au referințe unde 1 este variabilă se referă la același lucru ca și o altă variabilă. Interiorul aici să facem $ articol. Să ne întoarcem la 1, 10. Să facem $ element + +; care încă există în PHP. Puteți face în continuare + +. php.test.php. Trebuie să-l imprimați. print_r ($ array); Noi imprimam 2, 11. Dacă aș fi făcut doar foreach ($ array de la $ element), atunci elementul va fi valoarea 1 prima dată prin bucla. Acesta va incrementa 1 - 2 si apoi am terminat. Deci, atunci acesta va trece prin doua trecere a buclei și că elementul este de 10. Este elementul trepte la 11, și apoi că e doar aruncat. Apoi ne-am print_r ($ array), și să vedem că acest lucru este doar 1, 10. Deci, creșterea am făcut a fost pierdut. Dar foreach ($ array ca & $ articol) acum acest post este același element ca acest drept aici. E același lucru. Deci, elementul $ + + este modificarea matrice 0. Practic, puteți face, de asemenea, $ k - tablou> $ element și puteți face $ [$ k] + +; Deci, un alt mod de a face asta, suntem liberi de a modifica element, dar că nu va modifica gama noastră originală. Dar dacă vom folosi k, care este cheia noastră, atunci putem doar să indice în matrice noastră folosind cheia și incrementa asta. Acest lucru mai direct modifică gama noastră originală. Puteți face chiar că, dacă din anumite motive ai vrut capacitatea de a modifica - De fapt, acest lucru este perfect rezonabil. Tu nu a vrut să aibă de a scrie $ array [$ k] + +, ai vrut doar să scrie $ element + +, dar încă mai vrut să spun dacă ($ k === "A") incrementa apoi elementul și apoi imprimați gama noastră. Deci, acum ce ne așteptăm print_r să facem? Ce valori trebuie să fie tipărite? [Elev] 2 și 10. >> [Bowden] Numai în cazul în care cheia a fost "o" nu am imprima de fapt asta. Tu, probabil, foarte rar, dacă vreodată, va trebui să definească funcții în PHP, dar s-ar putea vedea ceva similar în cazul în care ați defini o funcție ca indiferent de funcție. De obicei, v-ar spune ($ foo, bar $) și apoi definiți ca acesta să fie orice. Dar dacă am face acest lucru, atunci înseamnă că indiferent de orice solicită, indiferent solicită Baz, deci primul argument a trecut la baz poate fi schimbat. Să facem $ foo + +; și în interiorul de aici să facem Baz ($ item); Acum suntem o functie de asteptare. Argumentul este luată de referință, ceea ce înseamnă că, dacă l-am modifica suntem modificarea lucru care a fost trecut inch Și tipărirea acestei ne așteptăm - dacă nu am incurcat sintaxa - avem 2, 11, așa că a fost de fapt crește. Observați avem nevoie de referințe în 2 locuri. Ce se întâmplă dacă am făcut asta? Ce înseamnă? [Elev] Se va schimba. Da >>. Postul este doar o copie a valorii în matrice. Deci, elementul se va schimba la 2, dar array ["a"] va fi în continuare 1. Sau ce se întâmplă dacă am face acest lucru? Acum, elementul este trimis ca o copie a Baz. Deci copie a argumentului va fi incrementat cu 2, dar elementul în sine nu a fost niciodată crește la 2. Și element este același lucru ca și categorie de matrice orice, astfel că nu a fost niciodată matrice crește. Deci, aceste două locuri nevoie de ea. PHP este de obicei destul de inteligent despre acest lucru. Ai putea crede că vreau să trec prin trimitere - Acest lucru a fost de fapt o întrebare pe unul din psets. A fost un lucru questions.txt în cazul în care acesta a spus, De ce s-ar putea doriți să treci acest struct de referință? Care a fost răspunsul la asta? [Elev] Deci, nu trebuie să copiați ceva mare. Da >>. Un struct poate fi arbitrar de mare, și atunci când treci în struct ca argument de care are nevoie pentru a copia întregul struct care să-l treacă la funcția, întrucât, dacă treci doar struct de referință atunci trebuie doar să copiați o adresă de 4-octet ca argument pentru funcția. PHP este un pic mai deștept decât atât. Dacă am o anumită funcție și am să-l treci o serie de 1.000 de lucruri, nu inseamna ca ea va trebui să copiați toate acele lucruri 1.000 de să-l treacă în funcția? Aceasta nu trebuie să faci asta imediat. În cazul în care în interiorul acestei funcții nu se modifică, de fapt foo, așa că, dacă ($ foo === "hello") return true.; Observați, de fapt nu am modificat interiorul argumentul acestei funcții, ceea ce înseamnă că tot ce a fost adoptată în foo ca niciodată trebuie să fie copiat pentru că nu e asta modificarea. Deci, modul PHP lucrărilor este argumentele sunt întotdeauna transmise prin referință până când încerca de fapt să-l modifice. Acum, dacă spun $ foo + +; se va face acum o copie a originalului foo și modifica copie. Acest lucru economisește timp. Dacă nu sunteți niciodată atingerea acestei matrice masiv, nu ai modifica de fapt, ea nu are nevoie pentru a face copia, întrucât în ​​cazul în care am pus asta ampersand că înseamnă că nu copiază chiar chiar dacă nu-l modificați. Acest comportament se numește copiere-on-write. Veți vedea în alte locuri, mai ales dacă vă luați un curs de sistem de operare. Copy-on-scriere este un model destul de obișnuită în cazul în care nu aveți nevoie pentru a face o copie a ceva excepția cazului în care de fapt se schimba. Da. [Elev] Ce se întâmplă dacă ai avut creștere în interiorul testului, astfel încât numai 1 element din 1000 ar trebui să fie schimbat? Nu sunt sigur. Cred că ar copia întregul lucru, dar e posibil e destul de deștept ca - De fapt, la ce mă gândesc este imaginăm am avut o matrice care arată ca aceasta: $ matrice2 = [ Apoi, indicele "a" este un tablou de [1 2 3 4], precum și indicele "b" este o matrice de orice. Am nevoie de virgule între toți cei. Imaginați-vă, există virgule. Apoi "c" este valoarea 3. Bine. Acum, haideți să spunem ce facem $ Baz ($ matrice2); în cazul în care Baz nu ia acest lucru prin referință. Deci $ foo ['c'] + +; Acesta este un astfel de exemplu în cazul în care ne trec matrice2 ca argument și apoi se modifica un indice specific al matrice de incrementarea-l. Nu am nici o idee despre ceea ce sincer PHP este de gând să facă. Se poate face cu ușurință o copie a întregului lucru, dar dacă e inteligent, se va face o copie a acestor taste în cazul în care aceasta va avea o valoare distinct dar acest lucru poate indica în continuare la aceeași matrice 1,2,3,4 iar acest lucru poate indica în continuare la aceeași matrice. Voi iPad-l. Trecem în această matrice în cazul în care acest tip de puncte la 3, acest tip de puncte pentru a [1,2,3,4], Acest tip de puncte la [34, ...] Acum că suntem în aceasta trece la Baz, suntem modificarea asta. Dacă PHP este inteligent, se poate face doar - Am avut încă de a copia unele de memorie, dar dacă ar exista aceste subarrays uriașe imbricate nu am nevoie pentru a copia cele. Nu știu dacă asta e ceea ce face, dar îmi pot imagina că faci asta. Aceasta este, de asemenea, un avantaj destul de mare de peste C PHP. PHP face viața mult mai ușoară pentru o mulțime de lucruri, dar ai un fel de ai absolut nici o idee cât de bine se va efectua pentru că nu am nici o idee sub capota atunci când este efectuarea acestor copii de lucruri, oh, este că va fi o copie constanta de timp, este doar de gând să schimbe un pointer, se merge a fi o copie ridicol de dificil liniar? Ce se întâmplă dacă nu se poate găsi un spațiu? Are nevoie de ea, apoi pentru a rula de colectare a gunoiului pentru a obține ceva mai mult spațiu? Și de colectare a gunoiului poate dura mult timp arbitrar. În C nu trebuie să vă faceți griji despre aceste lucruri. Fiecare linie unică vă puteți să scrieți un motiv destul de mult despre modul în care aceasta va efectua. Să ne uităm înapoi la astea. Cât de frumos este faptul că nu trebuie să se ocupe cu funcții hash, liste legate, sau ceva de genul asta? Din moment ce lucrul cu tabele de dispersie este atât de ușor acum, aici, e un puzzle distractiv pentru a lucra la. Deschide un fișier numit unique.php și în ea scrie un program de PHP (De asemenea, cunoscut ca un "script"). Avem tendința să le numim scripturi, dacă acestea sunt lucruri pe care le execută scurt la linia de comandă. Practic, orice limbă pe care nu compila, dar ai de gând să ruleze executabil la linia de comandă, puteți apela acel script executabil. Aș putea la fel de bine scrie un program C care face acest lucru, dar eu nu-l numesc un script de când am compila prima și apoi executați binar. Dar acest program PHP vom apela un script. Sau dacă l-am scris în Python sau Perl sau Node.js sau la oricare dintre aceste lucruri, ne-am le numim toate script-urile pentru ca le executa la linia de comandă dar noi nu le compila. Am putea face acest lucru destul de repede. Noi nu suntem de gând să folosească argv. Hai să arunce în aer prin asta. Sună-l unic, scrie un program. Puteți presupune că intrarea va conține un cuvânt pe fiecare rând. De fapt, argv va fi destul de banal pentru a utiliza. unique.php. Primul lucru pe de o parte, dorim să verificați dacă am fost trecut de 1 linie de comandă argumentul. Așa cum v-ați aștepta argc și argv în C, avem în continuare cele în PHP. Deci, dacă ($ argc == 2!), Atunci nu se va ocupa de tipărirea unui mesaj sau ceva. Voi ieși doar, codul de eroare de 1. Aș putea reveni, de asemenea, 1. Rareori în PHP ești la această stare în care suntem la - De obicei, ești într-o funcție numită de către o funcție numită de către o funcție numită de către o funcție. Și dacă ceva nu merge bine și vrei doar să ieși totul în întregime, de ieșire se termină doar programul. Acest lucru, de asemenea, există în C. Dacă sunteți într-o funcție într-o funcție într-o funcție într-o funcție și doriți să-l omoare doar programul, puteți apela de ieșire și se va ieși pur și simplu. Dar în PHP este chiar mai rar că suntem la acest nivel de top. De obicei, suntem în interiorul un fel de funcții, astfel încât noi o numim de ieșire astfel încât să nu trebuie să se întoarcă la 1 lucru care apoi își dă seama că este o eroare astfel că se întoarce până în cazul în care recunoaște că a fost o eroare. Noi nu vrem să se ocupe cu asta, deci ieși (1); retur (1); în acest caz, ar fi echivalent. Atunci ce vrem să deschidă vrem să fopen. Argumentele sunt de gând să se uite destul de asemănătoare. Dorim să fopen ($ argv [1], și vrem să-l deschidă pentru citirea. Care returnează o resursă pe care am de gând să sun f. Acest lucru pare destul de similar cu modul în care o face, cu excepția C nu trebuie să spun * FILE. În schimb, am spune doar $ f. Bine. De fapt, cred că acest lucru chiar ne oferă un indiciu cu privire la funcția PHP numit fișier. PHP fișier. Ceea ce acest lucru este de gând să faceți este să citiți un fișier întreg într-o matrice. Nu aveți nevoie chiar de a fopen-l. Se va face asta pentru tine. Deci $ linii = file ($ argv [1]); Acum, toate liniile de fișier sunt în linii. Acum vrem să sortați liniile. Cum putem sorta liniile? Noi sorta liniile. Și acum putem să le imprimați sau orice altceva. Probabil cel mai simplu mod este de foreach ($ $ linii ca linie) echo $ line; [Elev] nu ne-am trece chiar prin corelarea linii ceva în fel? Acest lucru este în cazul în care ceva ar fi definit ca un fel de funcții (& $ array). Când apelați funcția pe care nu-l treci prin referință. Este funcția pe care o definește ca având ca referință. Aceasta este de fapt exact ceea ce a mers prost atunci când am pus totul pe serverele noastre atunci când ne-am dus 5.3 - 5.4. Până în 5.4, acest lucru a fost perfect rezonabilă. O functie nu se așteaptă să-l ia ca referință, dar puteți să-l dați ca referință așa că, dacă funcția se întâmplă să-l modifice, este încă modificat. Ca de 5,4, tu nu ar trebui să facă acest lucru. Deci, acum, singura modalitate de ai trece prin referință este în mod explicit în cazul în funcția de o face. Dacă nu doriți să-l modificați, atunci ai nevoie pentru a face $ $ = copie de linii și de copiere de trecere. Deci, acum, liniile vor fi păstrate și în copie vor fi schimbate. php.unique.php. S-ar putea fi incurcat ceva. Neașteptată "sortare". Nu o să fie ceva care face acest lucru pentru noi. Nu e chiar acolo. Observați atunci când ai citit manualul de faptul că primul argument este de așteptat să fie o matrice si este luat de referință. De ce este acest plange pentru mine? Pentru că am acest tip funcție încă aici că nu vreau. Bine, php.unique.php. Nu am să-l dați un argument pentru că nu am un fișier. E php.unique.php pe test.php. Aici este test.php toate tipărit într-o ordine frumos sortate. Observați că, pentru sortat este un fel de ciudat pentru un fișier de cod pentru că toate liniile noastre goale sunt de gând să vină mai întâi apoi sunt de gând să vină tot de crestături noastre de nivel 1 vin atunci toate crestături noastre nr. Da. >> [Elev] Deci, pentru codul sursă nu a fost transmis prin referință? Este faptul că, în general, a trecut de valoare? [Bowden] Atunci când apelați o funcție, nu-l determină dacă acesta a fost transmis prin referință. Este definiția funcției care determină dacă acesta a fost transmis prin referință. Și se uită la definiția funcției de sortare sau doar se uită la acest lucru, este nevoie de argumentul de referință. Deci, indiferent dacă doriți să-l ia de referință, aceasta nu-l ia de referință. Acesta modifică matrice în loc. Acest lucru nu este doar permis. Tu nu ai voie să facă acest lucru. >> [Elev] Oh, bine. [Bowden] Aceasta, sortare este de gând să ia liniile de referință și modificați-l. Și din nou, dacă nu vrei să faci asta, ai putea face o copie de sortare. Chiar și în acest caz, copie nu este de fapt o copie de linii. Pur și simplu indică același lucru până când acesta devine primul modificată, în cazul în care primul va fi modificată în funcție de sortare, în cazul în care, pentru că exemplarul-pe-scrie, acum o copie a exemplarului se va face. Puteți face, de asemenea, acest lucru. Asta e un alt loc, puteți vedea ampersand. Îl vedeți în bucle foreach, îl vedeți în declarațiile funcțiilor, și îl vezi atunci când atribuirea doar variabile. Acum am realizat nimic de a face acest deoarece copie și liniile sunt literalmente același lucru. Aveți posibilitatea să utilizați linii și copia alternativ. Puteți face unset ($ copie); și că nu linii nesetate, ai pierdut doar referința la același lucru. Deci, ca de la acest punct, acum linii este singura cale prin care se poate accesa linii. Întrebări? Da. [Elev] Complet off topic, dar nu trebuie să închidă PHP cu - >> Tu nu faci. Bine. [Bowden], aș merge atât de departe încât să spun că e rău practică pentru a le închide. Asta e, probabil, o exagerare, mai ales într-un script, dar să vedem ce se întâmplă dacă am face acest lucru. Asta nu a făcut nimic. Ce se întâmplă dacă am vrut - [oftează] Am nevoie pentru a trece un argument. Trage. Am numit-o gresit. Deci, php.unique.php cu un argument. Acum, nu am nevoie nici asta. Voi trece un argument valid. Acest imprimate indiferent că e de imprimare. Sunt imprimați copie si copie nu există. Deci linii. Acesta tipărite totul, și apoi observați toate vechiturile astea aici jos, pentru că în orice PHP, care este în afara de tag-uri PHP este doar de gând să fie imprimat literal. De aceea HTML, e atât de frumos încât să pot face div bla, bla, bla clasa sau orice altceva, bla, bla, bla și apoi face unele cod PHP și apoi faceți div sfârșitul anului. Și tipărirea acum asta primesc div meu frumos până sus, tot ceea ce PHP imprimate, în partea de jos div. Dezastruoasă atunci când se întâmplă așa ceva, ceea ce este destul de comună, doar o linie nouă izolat de la partea de jos a fișierului. Tu nu ar crede că ar fi așa de mare de o afacere până când ia în considerare faptul că, cu browsere - Cum redirecționează muncă sau practic orice lucrare anteturile, atunci cand faci conexiunea la un site web și-l trimite înapoi toate aceste anteturi și lucruri cum ar fi răspuns 200 sau redirecționa răspuns sau orice altceva, anteturile sunt valabile doar până la primul octet de date este trimis. Puteți redirecționa de mii de ori, dar de îndată ce primul octet de date este transmis tu nu ar trebui să își reorienteze din nou. Dacă aveți o linie nouă izolat de la partea de jos a unui fișier și să spunem că utilizați această funcție și apoi doriți să - Să zicem că e un alt fișier care este index.php si tu ceva require_once - Eu nu pot gândi la un bun exemplu de ea. Problema se întâmplă atunci când această linie în partea de jos se ecou. Tu nu vrei nimic să fi fost repetat încă. Chiar dacă nu ați intenționat pe nimic obtinerea ecou, ​​ceva sa te ecou si asa ca acum tu nu ar trebui să trimită anteturi orice mai mult și vei primi plângeri. Tu chiar nu au nevoie de aceste etichete de închidere. Dacă aveți de gând să faci ceva cu HTML - și este perfect rezonabil să se facă aici div indiferent de și apoi la acest punct puteți sau nu le puteti include. Nu contează cu adevărat. Dar în scripturi PHP este rar pentru ao închide. Când totul este PHP, absolut totul, nu aveți nevoie într-adevăr să-l închidă / nu ar trebui să-l închidă. Confruntarea cu siruri de caractere este mult mai frumos decât în ​​C. În PHP puteți specifica un șir cu ghilimele simple sau duble. Cu ghilimele simple nu puteți utiliza "evadare" secvențe. În mod constant scape, bla, bla, bla. Deci printf este foarte rar în PHP. Cred că mi-ar folosi printf dacă am vrut să fac un fel de lucru - în PSET 5 sprintf ai folosit sau orice altceva. Dar vrei să faci 001.jpg 002.jpg și. Deci, pentru acest fel de lucru în cazul în care eu de fapt vreau să formatați textul mi-ar folosi printf. Dar altfel mi-ar folosi doar concatenare șir. Eu nu folosesc niciodată cu adevărat printf. Suntem doar diferențierea între ghilimele simple detalii și citate duble. Cea mai mare diferență este că ghilimele simple, acesta va fi imprimat literal. Nu există nici un tip de date char în PHP, spre deosebire de C, astfel încât acesta este echivalentă cu prezenta. Sunt ambele șiruri. Și mai frumos lucru despre șiruri de oferta unică este am putea spune "Hello world!" bla, bla, bla, $ $ Wooo. Ce se întâmplă atunci când am imprima acesta este literalmente va imprima. Să scăpăm de toate lucrurile noastre. Deci, echo $ str1; Acesta tipărit literalmente toate aceste lucruri: semne dolar, backslash n, care v-ar crede ar fi liniile noi - toate aceste lucruri se imprimă literalmente. Singurul lucru care aveți nevoie pentru a scăpa sunt ghilimele simple deoarece în caz contrar s-ar crede că e închiderea ghilimele simple. Citate duble, complet diferite. Vedem deja o sintaxă de evidențiere ne cluing pe ceea ce e pe cale de a merge teribil de greșit. php.unique. Undefined variabila: wooo, deoarece aceasta este interpretată ca o variabilă numită wooo. Citate duble vă permit să inserați variabile în - Să zicem $ name = "Rob"; Deci, echo "Buna, numele meu este $ nume!"; Acesta recunoaște acest lucru ca pe o variabilă. Când m-am alerga ca - si eu va introduce un newline - Bună, numele meu este Rob! și salut lume! Acest lucru se datorează faptului că nu am scos de imprimare de wooo de mai sus. Există 1 pas mai departe poți face. $ Array = [1, 2, 3]; Ce se întâmplă dacă doriți să imprimați primul indice de tablou? Tu faci $ array [0]. Evidențierea sintaxei este un indiciu. Ce este acest gând să faci? php.unique. Bună, numele meu este 1! care nu este ceea ce am vrut. Evidențierea sintaxei ma mințit. Să încercăm "a" -> 1, 'b' -> 2. Asta e modul în care mi-ar trebui să-l scrie. Citat neașteptată unică (T_ENCAPSED bla, bla, bla, bla, bla). Ideea este că nu este recunoscut acest lucru ca parte a tabloului. Nu este recunoscut acest lucru ca matrice indexate printr-o scrisoare o. Vrei să faci asta, înconjurată de între acolade, și acum tot ceea ce este în acest bretele cret va fi interpolate, care este cuvântul care le folosim pentru a introduce magic aceste variabile în locurile potrivite. Acum acest lucru, php.unique, si Hi, numele meu este 1! cum era de asteptat sau Hi, numele meu este Rob! Un lucru care e un fel de frumos despre ghilimele simple este faptul că - Există unele costuri la interpolarea. Dacă utilizați ghilimele duble, interpretul trebuie să meargă peste acest șir, asigurându-vă că, "Oh, aici este o variabilă Acum am nevoie pentru a merge obține că variabila și introduceți-l aici.". Chiar dacă nu folosiți variabile, nimic în interiorul acestor citate duble trebuie să fie interpolate, dar va fi în continuare mai lent, deoarece trebuie să meargă de-a lungul ghilimele duble In cautare de lucruri care trebuie să fie interpolate. Citate astfel încât o persoană poate fi un pic mai repede în cazul în care nu trebuie să fie interpolate, si chiar am tendința de a utiliza ghilimele simple pentru, "Bună, numele meu este". $ Array ['a'] oricum. Asta va fi echivalent cu ceea ce am avut înainte. Dar este o chestiune de preferinta. Dacă utilizați PHP, probabil că nu le pasă de diferenta de viteza. Nu este suficient să-i motiveze pentru a începe cu. Alte întrebări finale? Noi de fapt nu am primit nici prin toate, dar chestia asta a fost plictisitor. Ultimul lucru pe care e un fel de frumos în PHP este atunci când ai de a face cu HTML, vei folosi un pic, asa ca sintaxa de comenzi rapide frumos pentru imprimarea unei variabile. Fără a pune PHP aici, aceasta se numește tag-uri scurte. Oficial ca PHP 5.4, aceasta este depreciată. Vi se recomandă să afișezi php. Acest lucru este încă susținută, atât de tag-uri scurte, cu <= sunt încă foarte bine?. Acesta este sprijinit în mod implicit, astfel încât să puteți utiliza aceste ca doriti, si sunt destul de convenabil. Alte întrebări? Bine. Rămâi elegant, San Diego. [Chicotește] Pa. [Râde] [Aplauze] [rade] [CS50.TV]