1 00:00:00,000 --> 00:00:02,610 [Powered by Google Translate] [Secțiunea 8 - mai confortabil] 2 00:00:02,610 --> 00:00:04,910 [Rob Bowden - Universitatea Harvard] 3 00:00:04,910 --> 00:00:07,070 [Acest lucru este CS50. - CS50.TV] 4 00:00:11,520 --> 00:00:14,160 >> Aceste note săptămâni secțiune vor fi destul de scurt, 5 00:00:14,160 --> 00:00:19,070 așa că am de gând să păstreze vorbesc, voi sunteți de gând să păstreze pună întrebări, 6 00:00:19,070 --> 00:00:22,720 și vom încerca să umple cât mai mult timp posibil. 7 00:00:22,720 --> 00:00:31,950 O mulțime de oameni cred că acest lucru nu este neapărat PSET dificil, dar e foarte lung. 8 00:00:31,950 --> 00:00:37,070 Spec. PSET în sine durează o oră pentru a citi. 9 00:00:40,530 --> 00:00:45,730 Noi vă dau o mulțime de SQL ați putea avea nevoie, eventual, de a utiliza. 10 00:00:45,730 --> 00:00:50,520 Noi te plimbi printr-o mulțime de ea, așa că nu ar trebui să fie prea rău. 11 00:00:50,520 --> 00:00:54,560 Are cineva a început sau terminat? 12 00:00:55,380 --> 00:00:59,710 E ultima PSET. Oh, Doamne. 13 00:00:59,710 --> 00:01:05,400 De obicei, există un JavaScript unul dupa asta, dar lucrurile schimbarea calendarului 14 00:01:05,400 --> 00:01:09,560 face tot ceea ce 1 săptămâni mai scurtă, iar noi nu mai avem o PSET JavaScript. 15 00:01:09,560 --> 00:01:12,310 Nu știu cum, care afectează dacă JavaScript este de gând să apară pe examenul 16 00:01:12,310 --> 00:01:15,510 sau Quiz 1. 17 00:01:15,510 --> 00:01:22,260 Îmi imaginez că va fi ceva de genul ce trebuie să știți lucruri de nivel înalt despre JavaScript, 18 00:01:22,260 --> 00:01:26,460 dar mă îndoiesc că vom da doar tu direct cod JavaScript 19 00:01:26,460 --> 00:01:28,720 din moment ce nu au avut o PSET în ea. 20 00:01:28,720 --> 00:01:33,000 Dar asta va fi ceva de reexaminare test săptămâna viitoare. 21 00:01:33,000 --> 00:01:36,320 >> Secțiunea de întrebări. 22 00:01:36,320 --> 00:01:43,870 O mulțime de aceste lucruri este oarecum prost formulată, dar vom discuta de ce. 23 00:01:43,870 --> 00:01:50,220 Spre deosebire de C, PHP este un "dinamic tastat-" limba. Ce înseamnă, vă întreb? 24 00:01:50,220 --> 00:01:53,830 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 25 00:01:53,830 --> 00:01:56,190 la declararea variabilelor și funcții în C. 26 00:01:56,190 --> 00:02:00,420 În PHP, tipul unei variabile este determinată de valoarea pe care în prezent este exploatație. 27 00:02:00,420 --> 00:02:04,990 Deci, înainte de a ne introduce acest cod într-un fișier numit dynamic.php, 28 00:02:04,990 --> 00:02:12,670 PHP este dinamic tastat. Acest lucru este adevărat. 29 00:02:12,670 --> 00:02:17,590 Eu nu sunt de acord cu faptul că ceea ce înseamnă că spunem la revedere de la char, float, int, 30 00:02:17,590 --> 00:02:20,620 și alte cuvinte cheie. 31 00:02:20,620 --> 00:02:25,510 Diferența exactă între dinamic tastat și alternativă, 32 00:02:25,510 --> 00:02:32,010 care este static tastat, este că dinamic tastat, toate verificare tip și chestii 33 00:02:32,010 --> 00:02:37,350 se întâmplă la momentul execuției, întrucât static tastat se întâmplă în timpul compilării. 34 00:02:37,350 --> 00:02:43,030 Cuvântul statică, în general, pare să însemne lucruri compilare de timp. 35 00:02:43,030 --> 00:02:48,170 Cred că există alte utilizări pentru ea, dar în C, atunci când declarați o variabilă statică, 36 00:02:48,170 --> 00:02:52,650 stocarea se alocă în timpul compilării. 37 00:02:52,650 --> 00:02:59,260 Aici, dinamic tastat înseamnă doar că - 38 00:02:59,260 --> 00:03:04,350 În C, dacă încercați să adăugați un șir și un număr întreg, atunci când îl compilați, 39 00:03:04,350 --> 00:03:11,000 o să plâng pentru că o să spun că nu se poate adăuga un int și un pointer. 40 00:03:11,000 --> 00:03:14,710 Nu este doar o operațiune validă. 41 00:03:14,710 --> 00:03:21,170 Acesta este un alt lucru pe care vom ajunge la o secundă. 42 00:03:21,170 --> 00:03:24,860 Dar acest tip de control, faptul că acesta critică la momentul compilarii, 43 00:03:24,860 --> 00:03:29,220 este verificarea de tip static. 44 00:03:29,220 --> 00:03:35,220 Există limbi în cazul în care nu aveți nevoie să spun float char, int, și toate aceste lucruri, 45 00:03:35,220 --> 00:03:40,940 dar limbajul poate spune de la contextul lucru ce tip ar trebui sa fie, 46 00:03:40,940 --> 00:03:43,980 dar e încă static tastat. 47 00:03:43,980 --> 00:03:49,000 Deci, dacă vă luați 51, OCaml, nu aveți nevoie pentru a utiliza oricare dintre aceste tipuri, 48 00:03:49,000 --> 00:03:58,700 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. 49 00:03:58,700 --> 00:04:05,650 Dinamic tastat înseamnă doar că undeva în timpul rula ai de gând pentru a obține o plângere. 50 00:04:05,650 --> 00:04:13,430 Dacă ați folosit, de asemenea, înainte de Java, în general, aproape orice limbă C-tip 51 00:04:13,430 --> 00:04:20,070 va fi introdus static, deci C, C + +, Java, toate acestea sunt, în general, static tastate. 52 00:04:20,070 --> 00:04:22,910 În Java, atunci când compilați ceva și vrei să spui că 53 00:04:22,910 --> 00:04:26,670 sirul s este egal cu ceva nou, care nu este un șir de caractere, 54 00:04:26,670 --> 00:04:28,950 care este de gând să se plângă, deoarece aceste tipuri pur și simplu nu se potrivesc. 55 00:04:28,950 --> 00:04:31,180 Asta o să se plângă în timpul compilării. 56 00:04:31,180 --> 00:04:36,750 Dar ea are, de asemenea, ceva timp dinamic lucrurile place dacă încercați să arunce ceva 57 00:04:36,750 --> 00:04:40,500 la un tip care este mai specifică decât tipul său actual, 58 00:04:40,500 --> 00:04:45,610 nu e nimic ce poate face la momentul compilarii pentru a verifica dacă această turnat se va reuși. 59 00:04:45,610 --> 00:04:51,130 Java are, de asemenea, un anumit tip dinamic, verificarea faptului că, de îndată ce ajunge la acea linie de cod 60 00:04:51,130 --> 00:04:54,130 atunci când este de fapt de executare, se va face exprimate, 61 00:04:54,130 --> 00:04:56,260 verificați dacă această exprimate a fost valabilă în primul rând, 62 00:04:56,260 --> 00:04:59,890 si daca nu a fost, atunci o să plâng de faptul că aveți un tip nevalid. 63 00:04:59,890 --> 00:05:03,200 Tip dinamic verificare. 64 00:05:03,200 --> 00:05:07,010 Tastați acest într-un fișier numit dynamic.php. 65 00:05:10,130 --> 00:05:12,380 Dynamic.php. 66 00:05:14,580 --> 00:05:17,190 Voi unzip că formatarea. 67 00:05:18,750 --> 00:05:21,880 Avem o variabilă, l-am setat la întreg 7, 68 00:05:21,880 --> 00:05:27,930 atunci vom imprima-l și% s - 69 00:05:27,930 --> 00:05:32,830 Oh, suntem imprimarea tipul de ea, așa că gettype este de gând să se întoarcă tipul de variabilă. 70 00:05:32,830 --> 00:05:35,720 Suntem imprimați doar tipul de peste si peste din nou. 71 00:05:35,720 --> 00:05:39,440 Noi doar php.dynamic.php. 72 00:05:39,440 --> 00:05:45,920 Vom vedea că acesta se schimbă de la întreg la STRING să booleană așa cum am trece prin. 73 00:05:45,920 --> 00:05:54,590 În C nu există nici un tip de date boolean, nu există nici un tip de șir de date. 74 00:05:54,590 --> 00:06:00,500 Nu e char * și Boolean doar tinde sa fie int sau char sau ceva de genul. 75 00:06:00,500 --> 00:06:05,690 În PHP aceste tipuri nu există, și că este unul dintre cele mai mari avantaje ale PHP peste C - 76 00:06:05,690 --> 00:06:13,290 că operațiunile șir sunt infinit mai ușor decât în ​​PHP C. Acestea funcționează doar. 77 00:06:13,290 --> 00:06:18,290 >> Deci, ne întoarcem aici. 78 00:06:18,290 --> 00:06:21,260 Am fugit dynamic.php. 79 00:06:21,260 --> 00:06:26,710 Aceasta spune PHP interpret, numit php, pentru a rula cod PHP în dynamic.php. 80 00:06:26,710 --> 00:06:30,250 Dacă aveți orice erori în fișierul, interpretul va spune! 81 00:06:30,250 --> 00:06:39,110 Interpret, aceasta este o altă mare diferență între PHP și C. 82 00:06:39,110 --> 00:06:48,200 În C, trebuie să compilați ceva și apoi executați fișierul compilat. 83 00:06:48,200 --> 00:06:50,490 În PHP nu doriți să compilați nimic. 84 00:06:50,490 --> 00:06:57,200 Deci, interpretorul PHP este practic doar citind aceasta linie cu linie. 85 00:06:57,200 --> 00:07:02,900 Ea lovește var = 7, apoi loveste printf apoi hit-uri var apoi loveste printf și așa mai departe. 86 00:07:02,900 --> 00:07:10,910 Există un pic de compilarea o face, și memorează în cache rezultatele 87 00:07:10,910 --> 00:07:15,510 așa că, dacă rulați scriptul mai tarziu poti sa faci unele, 88 00:07:15,510 --> 00:07:19,280 dar în esență este o linie de linie fel de lucruri. 89 00:07:19,280 --> 00:07:25,280 Asta înseamnă că o mulțime de optimizări pe care le vom obține în C, 90 00:07:25,280 --> 00:07:31,920 cum ar fi colectarea, e doar, în general, compilatorul poate face o mulțime de trucuri pentru tine. 91 00:07:31,920 --> 00:07:36,110 Se poate scoate variabilele neutilizate, se poate face toate aceste tipuri de lucruri, 92 00:07:36,110 --> 00:07:38,660 se poate face recursivitate coadă. 93 00:07:38,660 --> 00:07:42,550 În PHP nu ești mergi la a lua acest avantaj 94 00:07:42,550 --> 00:07:45,690 deoarece este doar de gând să înceapă de executare linie cu linie cu linie, 95 00:07:45,690 --> 00:07:49,950 și nu recunoaște într-adevăr aceste lucruri la fel de ușor 96 00:07:49,950 --> 00:07:54,440 din moment ce nu este o trecere de compilare mare peste lucru și apoi de execuție; 97 00:07:54,440 --> 00:07:56,860 e doar linie cu linie. 98 00:08:00,730 --> 00:08:02,750 Așa că e interpretul. 99 00:08:02,750 --> 00:08:06,840 >> Copii de la tastarea noastre dinamice: destul de tare, nu-i așa? 100 00:08:06,840 --> 00:08:08,640 Tu cu siguranta nu ar putea face asta in C! 101 00:08:08,640 --> 00:08:11,860 Acum, a se vedea dacă vă puteți da seama de tipul de fiecare dintre următoarele valori. 102 00:08:11,860 --> 00:08:14,760 A se vedea acest lucru pentru referință. 103 00:08:14,760 --> 00:08:19,420 Deci, 3.50. Ce tip crezi că va fi? 104 00:08:24,480 --> 00:08:26,370 Aici sunt tipurile pe care le avem. 105 00:08:26,370 --> 00:08:30,430 Avem bools, întregi, cu puncte plutitoare, siruri de caractere, tablouri, obiecte, 106 00:08:30,430 --> 00:08:38,370 și apoi a resurselor, care este un fel de vag. 107 00:08:38,370 --> 00:08:41,010 Cred că e de fapt un exemplu aici. 108 00:08:41,010 --> 00:08:43,740 Apoi, nu e NULL. NULL este un tip special. 109 00:08:43,740 --> 00:08:47,140 Spre deosebire de C, unde NULL este doar un pointer cu adresa 0, 110 00:08:47,140 --> 00:08:54,930 în PHP, este NULL propriul său tip în cazul în care singurul lucru valabil de acest tip este NULL. 111 00:08:57,560 --> 00:09:00,670 Acest lucru este mult mai util pentru verificarea erorilor. 112 00:09:00,670 --> 00:09:04,310 În C, unde am avut această problemă în cazul în care, dacă te vei întoarce NULL, 113 00:09:04,310 --> 00:09:08,660 înseamnă asta te întoarce un pointer NULL NULL sau folosind pentru a semnifica eroare 114 00:09:08,660 --> 00:09:12,380 sau toate pe care am avut confuzie la un moment dat. 115 00:09:12,380 --> 00:09:18,440 Aici, revenind NULL înseamnă, în general, de eroare. 116 00:09:20,860 --> 00:09:27,300 O mulțime de lucruri se întoarcă, de asemenea, falsă pentru eroare. 117 00:09:27,300 --> 00:09:33,140 Dar ideea este de tip NULL, singurul lucru de tip NULL este NULL. 118 00:09:33,140 --> 00:09:40,090 Apoi, callback este ca poti defini unele funcții anonime. 119 00:09:40,090 --> 00:09:46,420 Nu trebuie să dau un nume funcției, dar nu va avea de a face cu asta aici. 120 00:09:46,420 --> 00:09:53,940 Privind la tipurile pe care ei nu se așteaptă ca noi să știm, 121 00:09:53,940 --> 00:09:59,000 ce crezi tipul de 3,50 este? >> [Elev] Float. 122 00:09:59,000 --> 00:10:00,370 Da. 123 00:10:00,370 --> 00:10:06,290 Deci aici, ce crezi tipul de acest lucru este? >> [Elev] Array. 124 00:10:06,290 --> 00:10:09,890 Da. Primul a fost float, cea de a doua este o matrice. 125 00:10:09,890 --> 00:10:14,500 Observați că această matrice nu este ca o matrice C 126 00:10:14,500 --> 00:10:19,610 în cazul în care aveți indicele 0 are o valoare, indicele 1 are o anumită valoare. 127 00:10:19,610 --> 00:10:26,320 Aici sunt indicii a, b, și c și valorile sunt 1, 2, și 3. 128 00:10:26,320 --> 00:10:33,980 În PHP există nici o diferență între un tablou asociativ și la doar o matrice regulat 129 00:10:33,980 --> 00:10:36,740 cum v-ar gândi la ea în C. 130 00:10:36,740 --> 00:10:43,040 Nu este doar acest lucru, iar sub capota o matrice regulat este doar un tablou asociativ 131 00:10:43,040 --> 00:10:50,000 unde 0 hărți la o anumită valoare acelasi mod, un hărțile la o anumită valoare. 132 00:10:50,000 --> 00:11:00,410 Din acest motiv, PHP poate fi destul de rău pentru foarte repede cod / benchmarking lucruri 133 00:11:00,410 --> 00:11:07,930 deoarece în C atunci când utilizați o matrice știți că accesarea unui membru este constanta de timp. 134 00:11:07,930 --> 00:11:11,860 În PHP accesarea unui membru este cine știe cât de mult timp? 135 00:11:11,860 --> 00:11:18,970 Este, probabil, constantă dacă aceasta hash-uri în mod corect. 136 00:11:18,970 --> 00:11:21,620 Cine știe ce este într-adevăr face sub capota? 137 00:11:21,620 --> 00:11:25,600 Chiar ai nevoie să te uiți la punerea în aplicare a vedea cum se va face cu asta. 138 00:11:25,600 --> 00:11:28,550 Deci, atunci fopen. 139 00:11:28,550 --> 00:11:36,420 Cred că aici sa fopen doar PHP manualul să se uite la tipul de retur. 140 00:11:36,420 --> 00:11:41,260 Noi vedem aici poti sa te uiti destul de mult orice funcție în manualul PHP 141 00:11:41,260 --> 00:11:47,540 și acest lucru este un fel de pagina de manual a PHP. 142 00:11:47,540 --> 00:11:51,060 Tipul de întoarcere va fi de resurse. 143 00:11:51,060 --> 00:11:56,050 De aceea l-am privit în sus, pentru că nu a definit cu adevarat de resurse. 144 00:11:56,050 --> 00:12:04,110 Ideea de resurse, în C ai un fel de ai o * FILE sau orice altceva; 145 00:12:04,110 --> 00:12:07,200 în PHP este resursa de fișiere *. 146 00:12:07,200 --> 00:12:10,360 E ceea ce ai de gând să fie citit de la, este ceea ce ai de gând să fie scris. 147 00:12:10,360 --> 00:12:20,710 E de obicei extern, deci este o resursă poti trage si arunca lucruri de la lucruri la. 148 00:12:20,710 --> 00:12:26,520 Și, în sfârșit, ceea ce este tipul de NULL? >> [Elev] NULL. 149 00:12:26,520 --> 00:12:30,650 Da. Deci, singurul lucru care este NULL este NULL. 150 00:12:30,650 --> 00:12:33,480 NULL este NULL. 151 00:12:35,490 --> 00:12:41,170 >> O caracteristică a sistemului de tip PHP (pentru o mai bună sau mai rău pentru) este capacitatea sa de a jongla tipuri. 152 00:12:41,170 --> 00:12:44,390 Când scrieți o linie de cod PHP care combină valori de diferite tipuri, 153 00:12:44,390 --> 00:12:46,670 PHP va încerca să facă lucrul sensibil. 154 00:12:46,670 --> 00:12:48,920 Încercați fiecare din următoarele linii de cod PHP. Ce se tipărit? 155 00:12:48,920 --> 00:12:51,000 Este ceea ce v-ați așteptat? De ce da sau de ce nu? 156 00:12:51,000 --> 00:12:58,600 Acest fapt despre PHP este ceea ce face ca ceea ce noi numim slab tastat. 157 00:12:58,600 --> 00:13:04,610 Slab și puternic tastat tastat, 158 00:13:04,610 --> 00:13:06,840 există utilizări diferite pentru acești termeni, 159 00:13:06,840 --> 00:13:12,020 dar cei mai mulți oameni folosesc slab și puternic tastat tastat pentru a înțelege acest fel de lucru 160 00:13:12,020 --> 00:13:15,920 în cazul în care ("1" + 2), că funcționează. 161 00:13:15,920 --> 00:13:18,290 În C, care nu ar funcționa. 162 00:13:18,290 --> 00:13:22,490 Vă puteți imagina acest lucru nu funcționează. 163 00:13:22,490 --> 00:13:29,200 O mulțime de oameni se amestecă până tastarea dinamic și dactilografiere slab și dactilografiere statice și tastarea puternic. 164 00:13:29,200 --> 00:13:34,050 Python este un alt exemplu de limbaj care este dinamic tastat. 165 00:13:34,050 --> 00:13:41,770 Puteți arunca în jurul valorii de tipurile din variabile și se va stabili la momentul execuției 166 00:13:41,770 --> 00:13:44,680 orice verificări eroare. 167 00:13:44,680 --> 00:13:50,740 În Python se va executa acest lucru și-l va vedea ("1" + 2); 168 00:13:50,740 --> 00:13:55,920 și aceasta va eșua, deoarece se spune că nu se poate adăuga un șir și un număr întreg. 169 00:13:55,920 --> 00:14:00,860 În PHP, care este la fel de dinamic tastat, acest lucru nu va eșua. 170 00:14:00,860 --> 00:14:04,220 Dactilografiere slab are de a face cu faptul că aceasta face lucrurile cu diferite tipuri de 171 00:14:04,220 --> 00:14:07,800 care nu face cu adevărat sens neapărat. 172 00:14:07,800 --> 00:14:17,420 Deci, ("1" + 2), îmi pot imagina că a fi șirul 12, îmi pot imagina a fi șirul 3, 173 00:14:17,420 --> 00:14:20,710 Îmi pot imagina a fi întreg 3. 174 00:14:20,710 --> 00:14:24,530 Nu e neapărat bine definite, și vom vedea, probabil, va aici 175 00:14:24,530 --> 00:14:29,140 că, atunci când am imprima ("1" + 2); este, probabil, va sfârși prin a fi diferit 176 00:14:29,140 --> 00:14:32,320 mult decât imprimarea (1 + "2"). 177 00:14:32,320 --> 00:14:39,700 Și aceasta tinde să fie, în opinia mea, pentru mai rău. 178 00:14:39,700 --> 00:14:44,240 Aici putem încerca astea. 179 00:14:44,240 --> 00:14:48,740 Un alt mic truc despre PHP este că nu aveți nevoie pentru a scrie de fapt, fisierul. 180 00:14:48,740 --> 00:14:52,790 Aceasta nu au rulat acest modul de comanda. 181 00:14:52,790 --> 00:14:57,710 Deci, php-r, atunci putem arunca în comanda aici: 182 00:14:57,710 --> 00:15:06,610 "Print ('1 '+ 2)," și voi arunca o linie nouă. 183 00:15:19,550 --> 00:15:23,970 Acest tipărită 3. 184 00:15:31,100 --> 00:15:35,330 Se pare că imprimă 3 și e întreg 3. 185 00:15:35,330 --> 00:15:38,420 Deci, acum să încercăm un alt mod în jurul valorii de: 186 00:15:38,420 --> 00:15:42,970 "Print (1 + '2 '); 187 00:15:45,560 --> 00:15:50,490 Ajungem 3, și este, de asemenea, va fi întreg 3? Nu am nici o idee sincer. 188 00:15:50,490 --> 00:15:54,030 Se pare că este în concordanță. 189 00:15:54,030 --> 00:15:59,550 Nu există nici o șansă de a se fi 12 șir sau ceva de genul asta 190 00:15:59,550 --> 00:16:08,080 deoarece PHP, spre deosebire de JavaScript și Java prea, 191 00:16:08,080 --> 00:16:11,670 are un operator de concatenare separată pentru. 192 00:16:11,670 --> 00:16:14,930 Concatenarea în PHP este dot. 193 00:16:14,930 --> 00:16:22,950 Deci, de imprimare (1 '2 '.); Este de gând să ne dea 12. 194 00:16:25,790 --> 00:16:32,420 Acest lucru tinde să ducă la confuzii în cazul în care oamenii încearcă să facă ceva de genul + str = 195 00:16:32,420 --> 00:16:37,840 un alt lucru pe care doresc să adauge pe la sfârșitul șir lor, și că va eșua. 196 00:16:37,840 --> 00:16:40,770 Ai nevoie pentru a face Str. = 197 00:16:42,000 --> 00:16:46,240 Deci, nu uita de concatenare în PHP este un punct. 198 00:16:46,240 --> 00:16:52,100 Alte lucruri pentru a încerca: print ("CS" + 50); 199 00:16:55,750 --> 00:17:03,610 Ți-am spus că nu există nici o speranță de acest rezultat CS50 200 00:17:03,610 --> 00:17:06,119 deoarece nu este concatenarea +. 201 00:17:06,119 --> 00:17:08,440 Ce crezi că se va termina prin a fi? 202 00:17:10,359 --> 00:17:13,460 Nu am absolut nici o idee sincer. 203 00:17:14,250 --> 00:17:16,460 Se pare ca e doar 50. 204 00:17:16,460 --> 00:17:21,490 Se vede șir, și Pun pariu că dacă punem 123CS - 205 00:17:21,490 --> 00:17:29,640 Se vede primul șir, încearcă să citească un număr întreg de la el sau de un număr din ea. 206 00:17:29,640 --> 00:17:31,710 În acest caz, se vede 123CS. 207 00:17:31,710 --> 00:17:35,190 "Asta nu are nici un sens ca un întreg, așa că am de gând doar să se gândească de 123." 208 00:17:35,190 --> 00:17:38,580 Deci 123 + 50 va fi 173. 209 00:17:38,580 --> 00:17:40,740 Și aici începe să citească acest lucru ca pe un întreg. 210 00:17:40,740 --> 00:17:45,690 Ea nu vedea nimic, așa că tratează la fel ca 0. Deci, 0 + 50 este de gând să fie de 50. 211 00:17:45,690 --> 00:17:51,600 Această Sunt presupunând că este de gând să facă ceva asemănător. 212 00:17:51,600 --> 00:17:54,310 Mă gândesc 99. 213 00:17:54,310 --> 00:17:57,580 Da, pentru că va lua primul - 214 00:18:12,880 --> 00:18:15,730 Deci, 99. 215 00:18:15,730 --> 00:18:21,970 Aici (10/7), în cazul în care acest lucru ar fi C, ceea ce ar fi asta se întoarcă? 216 00:18:23,700 --> 00:18:29,630 [Elev] 1. Da >>, ar fi 1, deoarece 10/7 este împărțirea 2 numere întregi. 217 00:18:29,630 --> 00:18:32,910 Un întreg divizat de către un întreg este de gând să se întoarcă un întreg. 218 00:18:32,910 --> 00:18:37,750 Ea nu poate returna un punct indiferent de care ar fi, asa ca e doar de gând să se întoarcă 1. 219 00:18:37,750 --> 00:18:46,120 Aici imprimarea (10/7), ea va interpreta, de fapt asta. 220 00:18:46,120 --> 00:18:53,760 Iar acest lucru înseamnă că, dacă chiar vrei să faci rotunjirea număr întreg și chestii de genul asta, 221 00:18:53,760 --> 00:18:59,950 ce trebuie sa faci print (etaj (10/7)); 222 00:18:59,950 --> 00:19:08,460 În C e ciudat că, probabil, vă puteți baza pe întreg trunchiere în mod regulat, 223 00:19:08,460 --> 00:19:12,260 dar în PHP nu se poate, pentru că se va transforma automat într-un flotor. 224 00:19:13,430 --> 00:19:17,610 Și apoi (7 + adevărat); ce crezi că va fi? 225 00:19:18,550 --> 00:19:23,640 Bănuiesc 8 în cazul în care va interpreta adevărat ca 1. 226 00:19:23,640 --> 00:19:25,740 Se pare ca e 8. 227 00:19:25,740 --> 00:19:31,710 >> Deci, tot ce am făcut în ultimele 10 minute nu trebuie să vă facă absolut. 228 00:19:31,710 --> 00:19:39,870 Veți vedea codul care face acest lucru. 229 00:19:39,870 --> 00:19:42,700 Aceasta nu trebuie să fie la fel de simplu ca asta. 230 00:19:42,700 --> 00:19:47,240 Ai putea avea 2 variabile, și 1 variabilă se întâmplă să fie un șir de caractere 231 00:19:47,240 --> 00:19:51,310 și alte variabile se întâmplă să fie un int, iar apoi adăugați aceste variabile împreună. 232 00:19:51,310 --> 00:20:00,120 Începând cu PHP este dinamic tastat și nu va face nici o verificare de tip pentru tine 233 00:20:00,120 --> 00:20:03,640 și din moment ce este scris si slab, deoarece acesta va arunca pur și simplu în mod automat aceste lucruri împreună 234 00:20:03,640 --> 00:20:11,490 și totul va funcționa doar, că e dificil să știi chiar că această variabilă trebuie să fie un șir de acum, 235 00:20:11,490 --> 00:20:14,930 așa că nu ar trebui să-l adăugați la această variabilă, care este un număr întreg. 236 00:20:18,780 --> 00:20:24,560 Cea mai bună practică este dacă o variabilă este un șir de caractere, păstrați-l ca pe un șir pentru totdeauna. 237 00:20:24,560 --> 00:20:26,980 În cazul în care o variabilă este un int, păstrați-l ca un int pentru totdeauna. 238 00:20:26,980 --> 00:20:30,770 Dacă doriți să se ocupe cu numere întregi și siruri de caractere, 239 00:20:30,770 --> 00:20:36,970 aveți posibilitatea să utilizați varsint - asta e JavaScript. 240 00:20:36,970 --> 00:20:42,520 Intval. Eu fac asta tot timpul. PHP si JavaScript-am amesteca totul. 241 00:20:42,520 --> 00:20:47,600 Deci, intval se va returna valoarea întreagă a unei variabile. 242 00:20:47,600 --> 00:20:56,550 Dacă trecem de la "print (intval ('123 ')); te 123. 243 00:21:06,820 --> 00:21:15,850 Intval sine nu este de gând să facă verificarea pentru noi că este exclusiv un număr întreg. 244 00:21:15,850 --> 00:21:20,460 Manualul PHP, există atât de multe funcții doar disponibile, 245 00:21:20,460 --> 00:21:26,560 Deci, aici cred că ceea ce mi-ar folosi is_numeric este primul. 246 00:21:26,560 --> 00:21:32,590 Bănuiesc că sa întors fals. 247 00:21:32,590 --> 00:21:35,780 Asta e un alt lucru pe care trebuie să mergem peste === este. 248 00:21:37,850 --> 00:21:44,020 Deci is_numeric ("'123df), nu s-ar gândi că, în calitate is_numeric. 249 00:21:44,020 --> 00:21:46,720 În C va trebui să itera peste toate caracterele 250 00:21:46,720 --> 00:21:50,410 și verificați pentru a vedea dacă fiecare caracter este cifră sau orice altceva. 251 00:21:50,410 --> 00:21:53,850 Aici is_numeric este de gând să faci asta pentru noi, 252 00:21:53,850 --> 00:21:56,520 și se întoarce fals. 253 00:21:56,520 --> 00:22:02,120 Asa ca atunci cand am imprimat că, la tipărit nimic, asa ca aici am comparându-l pentru a vedea, 254 00:22:02,120 --> 00:22:05,490 ai se întâmplă să fie falsă? Și acum e de imprimare 1. 255 00:22:05,490 --> 00:22:10,060 Se pare că imprimă o ca fiind adevărat în loc de imprimare adevarat ca adevărat. 256 00:22:10,060 --> 00:22:15,790 Mă întreb dacă fac print_r. Nu, nu încă 1. 257 00:22:15,790 --> 00:22:26,760 >> Revenind la ===, == încă mai există, 258 00:22:26,760 --> 00:22:32,260 și dacă vorbești cu Tommy va spune == este perfect în regulă. 259 00:22:32,260 --> 00:22:37,700 Am de gând să spun că == este groaznică și niciodată nu ar trebui să folosească ==. 260 00:22:37,700 --> 00:22:44,870 Diferența este că == compară lucrurile 261 00:22:44,870 --> 00:22:48,450 în cazul în care acesta poate fi adevărat, chiar dacă ei nu sunt de același tip, 262 00:22:48,450 --> 00:22:53,810 întrucât === compară lucrurile și mai întâi controalele sunt ele același tip? 263 00:22:53,810 --> 00:22:58,010 Da. Bine, acum mă duc să văd dacă acestea compară de fapt, să fie egal. 264 00:22:58,010 --> 00:23:08,890 Veți obține lucruri ciudate, cum ar fi 10 este egal cu - Să vedem ce spune. 265 00:23:08,890 --> 00:23:15,570 Deci, ('10 '== '1 E1'); 266 00:23:15,570 --> 00:23:17,980 Aceasta returnează adevărat. 267 00:23:17,980 --> 00:23:21,420 Are cineva orice presupuneri de ce returneaza true? 268 00:23:25,180 --> 00:23:27,120 Nu este vorba doar despre asta. Poate că acest lucru este un indiciu. 269 00:23:27,120 --> 00:23:33,170 Dar dacă am schimba asta la un f - l naibii! I a păstra folosind ghilimele duble. 270 00:23:33,170 --> 00:23:38,780 Motivul ghilimelele duble sunt țipi la mine pentru ca am pus acest lucru în ghilimele duble. 271 00:23:38,780 --> 00:23:43,850 Așa că am putea scăpa de ghilimele duble de aici, dar ghilimele simple face mai ușor. 272 00:23:43,850 --> 00:23:49,120 Deci, ('10 '== '1 F1'); nu se imprimă adevărat. ('10 '== '1 E1'); imprimă adevărat. 273 00:23:49,120 --> 00:23:56,330 [Elev] Este hexazecimal? >> Nu e hex, dar e pe aproape că e ca și cum - 274 00:23:56,330 --> 00:24:01,060 1E1, științifice notație. 275 00:24:01,060 --> 00:24:07,950 Acesta recunoaște 1E1 ca 1 * 10 ^ 1 sau orice altceva. 276 00:24:07,950 --> 00:24:11,510 Acestea sunt numere întregi egale. 277 00:24:11,510 --> 00:24:15,930 Dacă facem === atunci va fi falsă. 278 00:24:15,930 --> 00:24:28,490 Nu am nici o idee de fapt, dacă facem ceea ce == despre (10 și "'10abc);? Bine. Deci asta e adevărat. 279 00:24:28,490 --> 00:24:35,940 Deci, la fel ca atunci cand ai facut (10 + '10abc '); și ar fi de 20, 280 00:24:35,940 --> 00:24:38,800 aici (10 == '10abc '); este adevărat. 281 00:24:38,800 --> 00:24:45,350 Chiar mai rău sunt lucruri cum ar fi fals (== NULL); este adevărat 282 00:24:45,350 --> 00:24:52,210 sau (false == 0); este adevărat, (false == []); 283 00:24:52,210 --> 00:25:00,970 Există cazuri ciudate de - Asta e unul din acele cazuri ciudate. 284 00:25:00,970 --> 00:25:08,110 Observați că (false == []); este adevărat. 285 00:25:08,110 --> 00:25:11,950 ('0 '== False); este adevărat. 286 00:25:11,950 --> 00:25:16,090 ('0 '== []); Este falsă. 287 00:25:16,090 --> 00:25:19,090 Deci, == este în nici un fel tranzitiv. 288 00:25:19,090 --> 00:25:26,830 o poate fi egal cu B și o poate fi egal cu C, 289 00:25:26,830 --> 00:25:29,340 dar b nu ar putea fi egală cu c.. 290 00:25:29,340 --> 00:25:35,580 Asta e o urâciune pentru mine, și ar trebui să folosiți întotdeauna ===. 291 00:25:35,580 --> 00:25:38,590 [Elev] Putem face la fel de bine ==!? >> [Bowden] Da. 292 00:25:38,590 --> 00:25:44,600 Echivalentă ar fi! = Si ==.! 293 00:25:44,600 --> 00:25:48,230 Aceasta este de fapt a adus în spec. PSET 294 00:25:48,230 --> 00:25:52,000 în cazul în care o mulțime de funcții retur - 295 00:25:52,000 --> 00:25:53,890 Manualul PHP este bun despre asta. 296 00:25:53,890 --> 00:25:59,140 Se pune într-o cutie roșie mare, "Acest lucru va întoarce fals dacă există o eroare." 297 00:25:59,140 --> 00:26:03,940 Dar revenind 0 este un lucru perfect rezonabil să se întoarcă. 298 00:26:03,940 --> 00:26:08,250 Gândiți-vă la orice funcție care este de așteptat să se întoarcă un întreg. 299 00:26:11,250 --> 00:26:17,880 Să spunem că această funcție ar trebui să conta numărul de linii într-un fișier sau ceva de genul. 300 00:26:17,880 --> 00:26:23,490 În condiții normale, nu treci această funcție un fișier 301 00:26:23,490 --> 00:26:27,120 și-l va returna un număr întreg care reprezintă numărul de linii. 302 00:26:27,120 --> 00:26:30,820 Deci 0 este un număr perfect rezonabilă, dacă fișierul este doar gol. 303 00:26:30,820 --> 00:26:36,810 Dar ce se întâmplă dacă se trece un fișier invalid și funcția se întâmplă să se întoarcă false 304 00:26:36,810 --> 00:26:38,860 daca treci acesta un fișier invalid? 305 00:26:38,860 --> 00:26:46,500 Dacă ai făcut == nu ești de diferențiere între cazul fișierul invalid și fișier gol. 306 00:26:48,870 --> 00:26:51,350 Folosiți întotdeauna ===. 307 00:26:55,690 --> 00:26:58,000 Asta e tot din astea. 308 00:26:58,000 --> 00:27:01,660 >> În PHP, tipul de matrice este diferit de ceea ce v-ați obișnuit în C. 309 00:27:01,660 --> 00:27:06,650 Într-adevăr, este posibil să fi observat deja această anterior, când a văzut că aceasta este de tip matrice. 310 00:27:06,650 --> 00:27:15,640 Sintaxa suportul este nou începând cu PHP 5.4, care este cea mai nouă versiune a PHP. 311 00:27:15,640 --> 00:27:36,960 Înainte de a vă prezenta întotdeauna a trebuit să scrie array ('a' -> 1, 'b' -> 2. 312 00:27:36,960 --> 00:27:41,160 Asta a fost constructorul pentru o matrice. 313 00:27:41,160 --> 00:27:45,950 Acum, PHP a ajuns în cele din urmă în jurul valorii de la sintaxa frumos de doar paranteze drepte, 314 00:27:45,950 --> 00:27:50,900 care este doar atât de mult mai bine decât matrice. 315 00:27:50,900 --> 00:27:54,480 Dar avand in vedere PHP 5.4 este cea mai nouă versiune, 316 00:27:54,480 --> 00:27:59,090 este posibil să întâlniți locuri care nu au nici măcar PHP 5.3. 317 00:27:59,090 --> 00:28:08,220 Peste vara am fugit în această problemă în cazul în care PHP 5.3 a fost ceea ce am avut pe aparat, 318 00:28:08,220 --> 00:28:14,480 dar serverul care ne desfășurat întreaga noastră rezervă de grad și să trimiteți și toate chestiile alea la 319 00:28:14,480 --> 00:28:16,750 a fost PHP 5.4. 320 00:28:16,750 --> 00:28:23,060 Nu se știe acest lucru, ne-am dezvoltat la pct. 5.3, împins la 5,4, 321 00:28:23,060 --> 00:28:25,660 și acum, dintr-o nici unul bruscă a codului nostru de lucrări 322 00:28:25,660 --> 00:28:28,680 pentru că acolo sa întâmplat să fi fost schimbări între 5.3 și 5.4 323 00:28:28,680 --> 00:28:31,030 care nu sunt compatibil, 324 00:28:31,030 --> 00:28:35,770 și noi trebuie să mergem și să fixeze toate lucrurile noastre, care nu lucrează pentru PHP 5.4. 325 00:28:39,210 --> 00:28:42,320 Pentru această clasă, deoarece aparatul are PHP 5.4, 326 00:28:42,320 --> 00:28:45,490 e perfect în regulă să utilizați paranteze pătrate. 327 00:28:47,240 --> 00:28:50,440 Dar, dacă sunteți în căutarea lucruri în jurul valorii de internet, 328 00:28:50,440 --> 00:28:54,880 dacă sunteți în căutarea de până un fel de chestii matrice, cel mai probabil ai de gând să vadă 329 00:28:54,880 --> 00:29:02,020 vraja din sintaxa constructorul matrice de la care a fost în jurul valorii începând cu PHP sa nascut 330 00:29:02,020 --> 00:29:07,340 și sintaxa suportul patrat a fost în jurul valorii în ultimile luni 331 00:29:07,340 --> 00:29:10,020 sau ori de câte ori a venit în jurul valorii de 5.4. 332 00:29:10,020 --> 00:29:12,710 Acesta este modul în care indicele. 333 00:29:12,710 --> 00:29:30,610 La fel ca în C cum v-ar indicele de paranteze drepte, cum ar fi $ array [0], $ array [1], $ array [2], 334 00:29:30,610 --> 00:29:36,320 vă indice același mod, dacă se întâmplă să aibă indici de a fi siruri de caractere. 335 00:29:36,320 --> 00:29:40,440 Deci $ array ['a'] si $ array ['b']. 336 00:29:40,440 --> 00:29:47,410 $ Array [b]. De ce ar fi greșit? 337 00:29:52,490 --> 00:29:59,870 Acesta va genera, probabil, un avertisment, dar încă funcționează. PHP tinde să facă asta. 338 00:29:59,870 --> 00:30:04,890 Acesta tinde să doar, "am de gând să te avertizez despre acest lucru, dar eu sunt doar de gând să continui 339 00:30:04,890 --> 00:30:07,550 "Și de a face tot ce pot." 340 00:30:07,550 --> 00:30:11,500 Acesta va traduce, probabil, acest lucru un șir, 341 00:30:11,500 --> 00:30:15,000 dar este posibil ca la un moment dat, în trecut, a spus cineva 342 00:30:15,000 --> 00:30:20,180 define b pentru a fi "Hello World". 343 00:30:20,180 --> 00:30:28,740 Deci, acum B ar putea fi o constantă matrice și $ [b] va fi, de fapt face "Hello World". 344 00:30:28,740 --> 00:30:32,380 Cred că în acest moment, sau cel puțin noastre setările PHP, 345 00:30:32,380 --> 00:30:37,870 dacă încercați să indice într-o matrice și că tasta nu există, acesta va eșua. 346 00:30:37,870 --> 00:30:40,150 Nu cred că va avertiza doar tu. 347 00:30:40,150 --> 00:30:44,560 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ă. 348 00:30:44,560 --> 00:30:49,290 >> Felul în care verificați pentru a vedea dacă există de fapt, este un astfel de index este isset. 349 00:30:49,290 --> 00:30:54,690 Deci, isset ($ array ['Hello World']) va returna FALSE. 350 00:30:54,690 --> 00:30:59,160 isset ($ array ['b']) va reveni adevărat. 351 00:31:06,830 --> 00:31:09,880 Puteți amesteca aceste sintaxe. 352 00:31:15,060 --> 00:31:22,440 Sunt destul de sigur că ceea ce această matrice va sfârși prin a fi este - Putem testa. 353 00:31:43,290 --> 00:31:45,700 Oh, am nevoie de PHPWord. 354 00:31:53,960 --> 00:32:00,260 Acest lucru este amestecarea sintaxa în cazul în care să specificați ceea ce este cheia 355 00:32:00,260 --> 00:32:03,330 și nu precizează ce cheia este. 356 00:32:03,330 --> 00:32:05,520 Deci, 3 chiar aici este o valoare. 357 00:32:05,520 --> 00:32:08,080 Tu nu au în mod explicit a declarat ceea ce cheia sa va fi. 358 00:32:08,080 --> 00:32:11,670 Ce crezi că cheia sa va fi? 359 00:32:11,670 --> 00:32:21,410 [Elev] 0. >> Bănuiesc 0 doar pentru că e prima nu am specificat. 360 00:32:21,410 --> 00:32:23,500 Putem face de fapt, o pereche de aceste cazuri. 361 00:32:23,500 --> 00:32:28,030 Deci, este print_r imprima recursiv. Acesta va imprima întreaga matrice. 362 00:32:28,030 --> 00:32:32,700 Aceasta ar imprima subarrays de matrice în cazul în care ar exista vreun. 363 00:32:32,700 --> 00:32:36,630 Deci, print_r ($ array); php.test.php. 364 00:32:36,630 --> 00:32:38,810 Se pare ca acesta a dat-o 0. 365 00:32:38,810 --> 00:32:43,530 Nu e de fapt ceva pentru a păstra în minte aici, dar vom reveni la ea într-o secundă. 366 00:32:43,530 --> 00:32:45,850 Dar ce se întâmplă dacă I ​​se întâmplă pentru a face acest indice 1? 367 00:32:45,850 --> 00:32:51,170 PHP nu face diferența între indicii de coarde și indici întregi, 368 00:32:51,170 --> 00:33:00,280 astfel încât în ​​acest moment am definit doar un indice 1 și eu pot face pe amândouă array $ [1] și $ array ['1 '] 369 00:33:00,280 --> 00:33:06,250 și va fi același index și aceeași cheie. 370 00:33:06,250 --> 00:33:13,000 Deci, acum ce crezi 3 va fi? >> [Elev] 2. >> [Bowden] Bănuiesc 2. 371 00:33:16,000 --> 00:33:18,690 Da. E 2. 372 00:33:18,690 --> 00:33:24,790 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? 373 00:33:27,360 --> 00:33:29,110 Mă gândesc 11. 374 00:33:29,110 --> 00:33:33,060 Parerea mea ca la ceea ce face PHP - și cred că am mai văzut asta înainte - 375 00:33:33,060 --> 00:33:39,760 este pastreaza doar evidența a ceea ce mai mare indice numeric este folosit până în prezent este. 376 00:33:39,760 --> 00:33:44,230 Niciodată nu se va atribui un indice șir la 3. Acesta va fi întotdeauna un index numeric. 377 00:33:44,230 --> 00:33:47,690 Deci, ține evidența cel mai înalt este atribuit până în prezent, care se întâmplă să fie 10, 378 00:33:47,690 --> 00:33:52,540 și se va da 11 - 3. 379 00:33:52,540 --> 00:34:02,110 Ceea ce am spus mai înainte, observați modul în care aceasta se imprimă această matrice. 380 00:34:02,110 --> 00:34:06,850 Se imprimă tasta 10, tasta 4, tasta 11, D-cheie. 381 00:34:06,850 --> 00:34:09,790 Sau chiar să facem - 382 00:34:15,760 --> 00:34:22,489 Cred că nu am pus un 0, dar e de imprimare 1, 2, 3, 4. 383 00:34:22,489 --> 00:34:29,330 Ce se întâmplă dacă am trece aici? Sau hai să comutați de fapt aceste 2. 384 00:34:29,330 --> 00:34:31,940 Acum se imprimă 2, 1, 3, 4. 385 00:34:31,940 --> 00:34:41,270 Matrice PHP nu sunt la fel ca dumneavoastră tabel hash regulat. 386 00:34:41,270 --> 00:34:45,570 E perfect rezonabil să ne gândim la ei ca tabele de dispersie 99% din timp. 387 00:34:45,570 --> 00:34:53,790 Dar în tabele de dispersie nu e nici un sens de ordinea în care lucrurile au fost inserate. 388 00:34:53,790 --> 00:34:56,639 Asa ca imediat ce îl introduceți în tabelul hash, 389 00:34:56,639 --> 00:35:00,590 Presupun că nu e legată de listă și ai putea judeca într-o listă legată 390 00:35:00,590 --> 00:35:03,980 care a fost introdus primul. 391 00:35:03,980 --> 00:35:10,060 Dar aici am inserat 2 primul și-l știe atunci când este imprimarea acestei matrice că 2 este pe primul loc. 392 00:35:10,060 --> 00:35:13,090 Ea nu-l imprimă în orice fel de ordine. 393 00:35:13,090 --> 00:35:17,550 Structura de date tehnice care se utilizează este o hartă ordonat, 394 00:35:17,550 --> 00:35:24,690 asa ca hărți cheile de la valorile și își amintește ordinea în care aceste chei au fost inserate. 395 00:35:24,690 --> 00:35:31,600 Practic e la unele complicații în cazul în care e enervant sa, de fapt - 396 00:35:31,600 --> 00:35:34,510 Să presupunem că aveți o matrice 0, 1, 2, 3, 4, 5 397 00:35:34,510 --> 00:35:37,700 și doriți să luați în indexul 2. 398 00:35:37,700 --> 00:35:47,750 O modalitate de a face aceasta, să vedem ce arata. 399 00:35:47,750 --> 00:35:50,410 0, 2, 1, 3, 4. 400 00:35:50,410 --> 00:35:54,880 Unset se întâmplă pentru a demarca starea ambele variabile și indicii matrice. 401 00:35:54,880 --> 00:35:58,630 Deci, unset ($ matrice [2]); 402 00:35:58,630 --> 00:36:03,430 Acum, ce e asta o să arate ca și cum? 2 este tocmai a trecut, așa că e perfect în regulă. 403 00:36:03,430 --> 00:36:11,670 Mai enervant este, dacă vrei ca lucrurile să fie de fapt ca un tablou. 404 00:36:11,670 --> 00:36:14,910 Voi pune numere aleatoare. 405 00:36:14,910 --> 00:36:20,400 Acum observă indici mele. 406 00:36:20,400 --> 00:36:26,860 Vreau să fie la fel ca o matrice C, unde se duce de la 0 la lungimea - 1 407 00:36:26,860 --> 00:36:30,810 și eu pot itera peste el ca atare. 408 00:36:30,810 --> 00:36:38,520 Dar, de îndată ce am demarca starea doilea indice, ceea ce a fost în indexul 3 nu acum devine indice 2. 409 00:36:38,520 --> 00:36:44,790 În schimb, doar că elimină index și acum te duci 0, 1, 3, 4. 410 00:36:44,790 --> 00:36:48,740 Acest lucru este perfect rezonabil. 411 00:36:48,740 --> 00:36:53,950 E doar enervant și ce trebuie să faci lucruri, cum ar fi lipitură matrice. Da. 412 00:36:53,950 --> 00:36:57,200 >> [Elev] Ce s-ar întâmpla dacă ați avut o buclă pentru 413 00:36:57,200 --> 00:36:59,630 și ai vrut să mergi peste toate elementele? 414 00:36:59,630 --> 00:37:02,290 Atunci când a lovit 2, l-ar ceda vreodată? 415 00:37:02,290 --> 00:37:10,150 Iterarea peste o matrice. Există 2 moduri în care puteți face acest lucru. 416 00:37:10,150 --> 00:37:12,770 Aveți posibilitatea să utilizați un regulat pentru buclă. 417 00:37:12,770 --> 00:37:22,000 Aceasta este o altă complexitate a PHP. 418 00:37:22,000 --> 00:37:27,420 Cele mai multe limbi, aș spune, avea un fel de lungime sau LEN sau ceva de genul 419 00:37:27,420 --> 00:37:30,470 indicând lungimea unui array. 420 00:37:30,470 --> 00:37:32,820 În PHP e numărătoarea. 421 00:37:32,820 --> 00:37:36,160 Deci, count ($ array); $ i + +) 422 00:37:36,160 --> 00:37:42,950 Hai să imprimare ($ array [$ i]); 423 00:37:45,920 --> 00:37:48,820 Notă: Undefined offset: 2. 424 00:37:48,820 --> 00:37:51,610 E doar de gând să eșueze. 425 00:37:51,610 --> 00:38:03,020 Acesta este motivul pentru care, pentru cea mai mare parte, nu aveți nevoie pentru a itera peste o matrice de genul asta. 426 00:38:03,020 --> 00:38:07,110 Ar putea fi o exagerare, dar niciodată nu trebuie să itera peste o matrice ca aceasta 427 00:38:07,110 --> 00:38:19,410 deoarece PHP ofera sintaxa foreach în cazul în care foreach ($ array de la $ articol). 428 00:38:19,410 --> 00:38:31,830 Acum, dacă am tipărarea ($ element); - Vom discuta într-un al doilea - care funcționează perfect în regulă. 429 00:38:31,830 --> 00:38:38,960 Modul în care foreach este de lucru este primul argument este matrice pe care îl iterarea peste. 430 00:38:38,960 --> 00:38:44,060 Și al doilea argument, articol, prin fiecare trecere a buclei de 431 00:38:44,060 --> 00:38:52,690 se va lua pe urmatorul lucru în matrice. Deci, amintiți matrice are o ordine. 432 00:38:52,690 --> 00:38:55,690 Prima dată prin bucla pentru, elementul va fi 123 433 00:38:55,690 --> 00:38:59,540 atunci acesta va fi de 12, atunci acesta va fi de 13, atunci acesta va fi 23, atunci acesta va fi 213. 434 00:38:59,540 --> 00:39:04,670 Lucrurile devin cu adevarat ciudat atunci când faci ceva de genul foreach. 435 00:39:04,670 --> 00:39:07,480 Să vedem ce se întâmplă pentru că niciodată nu ar trebui să faci asta. 436 00:39:07,480 --> 00:39:13,320 Ce se întâmplă dacă am unset ($ matrice [1]); 437 00:39:20,410 --> 00:39:26,030 Asta a fost, probabil, de așteptat. 438 00:39:26,030 --> 00:39:30,950 Te iterarea peste această matrice, și de fiecare dată când te Dezactivarea primul indice. 439 00:39:30,950 --> 00:39:39,720 Deci, pentru index 0, primul lucru, elementul ia valoarea 0, asa ca va fi 123. 440 00:39:39,720 --> 00:39:44,630 Dar în interiorul buclei de noi nesetata indice 1, astfel că înseamnă 12 este plecat. 441 00:39:44,630 --> 00:39:57,480 Deci, imprimați. PHP_EOL. 442 00:39:57,480 --> 00:40:03,580 PHP_EOL este doar linie noua, dar e mult mai portabil punct de vedere tehnic 443 00:40:03,580 --> 00:40:08,890 deoarece liniile noi din Windows este diferit de la liniile noi de pe Mac și UNIX. 444 00:40:08,890 --> 00:40:18,040 Pe Windows newline este \ r \ n, în timp ce peste tot se tinde doar pentru a fi \ n. 445 00:40:18,040 --> 00:40:25,150 PHP_EOL este configurat astfel încât să foloseste orice newline sistemul dumneavoastră este. 446 00:40:25,150 --> 00:40:29,310 Imprima astfel încât. Să nu print_r ($ array), la sfârșitul anului. 447 00:40:32,830 --> 00:40:37,390 Am avut nici o idee că ar fi comportamentul. 448 00:40:41,740 --> 00:40:48,960 Postul încă ia valoarea 12, chiar dacă am demarca starea 12 înainte de a ne vreodată trebuie să-l de la matrice. 449 00:40:52,770 --> 00:40:58,840 Nu luați cuvântul meu în acest sens, dar se pare ca foreach creează o copie a matrice 450 00:40:58,840 --> 00:41:02,160 și apoi elementul ia toate valorile de pe acest exemplar. 451 00:41:02,160 --> 00:41:07,760 Deci, chiar dacă modificați matrice în interiorul bucla for, 452 00:41:07,760 --> 00:41:17,240 nu va pasa. Postul va prelua valorile originale. 453 00:41:17,240 --> 00:41:19,240 Să încercăm Dezactivarea-l. 454 00:41:19,240 --> 00:41:24,460 Ce se întâmplă dacă acest lucru este $ array [1] = "Hello"; 455 00:41:24,460 --> 00:41:31,770 Chiar dacă am pus "hello" în matrice, nu element ia acea valoare. 456 00:41:31,770 --> 00:41:37,430 Există o altă sintaxă la foreach bucle 457 00:41:37,430 --> 00:41:45,900 în cazul în care ați pus 2 variabile separate printr-o săgeată. 458 00:41:45,900 --> 00:41:49,680 Această variabilă primul va fi cheia acestei valori, 459 00:41:49,680 --> 00:41:53,050 și această a doua variabilă va fi elementul exact aceeasi. 460 00:41:53,050 --> 00:42:01,610 Acest lucru este neinteresant aici, dar dacă ne întoarcem la cazul nostru original "a" -> 1, 461 00:42:01,610 --> 00:42:06,090 "B" -> 1, 462 00:42:06,090 --> 00:42:14,470 aici, dacă am repeta doar pentru fiecare matrice ca element, elementul este de gând să fie de 1 de fiecare dată singur. 463 00:42:14,470 --> 00:42:18,170 Dar dacă noi, de asemenea, vreau să știu cheie asociate cu acel element 464 00:42:18,170 --> 00:42:25,230 atunci vom face de la $ cheie -> $ element. 465 00:42:25,230 --> 00:42:31,980 Deci, acum putem face de imprimare ($ cheie ":".. 466 00:42:31,980 --> 00:42:39,380 Acum este iterarea peste și imprimarea fiecare cheie și valoarea sa asociat. 467 00:42:39,380 --> 00:42:47,030 >> Un lucru suplimentar putem face în foreach bucle este posibil să vedeți această sintaxă. 468 00:42:47,030 --> 00:42:54,770 Ampersand înainte de nume de variabile tind să fie modul în care PHP se trimiteri. 469 00:42:54,770 --> 00:43:00,460 În cazul în care trimiterile sunt foarte asemanatoare cu pointerii, 470 00:43:00,460 --> 00:43:04,820 nu aveți indicii, astfel încât să nu se ocupe de memorie direct. 471 00:43:04,820 --> 00:43:12,620 Dar tu nu au referințe unde 1 este variabilă se referă la același lucru ca și o altă variabilă. 472 00:43:12,620 --> 00:43:21,450 Interiorul aici să facem $ articol. Să ne întoarcem la 1, 10. 473 00:43:21,450 --> 00:43:28,800 Să facem $ element + +; care încă există în PHP. Puteți face în continuare + +. 474 00:43:28,800 --> 00:43:38,260 php.test.php. Trebuie să-l imprimați. print_r ($ array); 475 00:43:38,260 --> 00:43:42,730 Noi imprimam 2, 11. 476 00:43:42,730 --> 00:43:49,560 Dacă aș fi făcut doar foreach ($ array de la $ element), atunci elementul va fi valoarea 1 477 00:43:49,560 --> 00:43:54,190 prima dată prin bucla. Acesta va incrementa 1 - 2 si apoi am terminat. 478 00:43:54,190 --> 00:43:57,260 Deci, atunci acesta va trece prin doua trecere a buclei și că elementul este de 10. 479 00:43:57,260 --> 00:44:01,570 Este elementul trepte la 11, și apoi că e doar aruncat. 480 00:44:01,570 --> 00:44:06,670 Apoi ne-am print_r ($ array), și să vedem că acest lucru este doar 1, 10. 481 00:44:06,670 --> 00:44:09,070 Deci, creșterea am făcut a fost pierdut. 482 00:44:09,070 --> 00:44:13,410 Dar foreach ($ array ca & $ articol) 483 00:44:13,410 --> 00:44:21,910 acum acest post este același element ca acest drept aici. E același lucru. 484 00:44:21,910 --> 00:44:26,820 Deci, elementul $ + + este modificarea matrice 0. 485 00:44:29,330 --> 00:44:41,850 Practic, puteți face, de asemenea, $ k - tablou> $ element și puteți face $ [$ k] + +; 486 00:44:41,850 --> 00:44:48,650 >> Deci, un alt mod de a face asta, suntem liberi de a modifica element, 487 00:44:48,650 --> 00:44:54,070 dar că nu va modifica gama noastră originală. 488 00:44:54,070 --> 00:44:59,720 Dar dacă vom folosi k, care este cheia noastră, atunci putem doar să indice în matrice noastră folosind cheia 489 00:44:59,720 --> 00:45:01,530 și incrementa asta. 490 00:45:01,530 --> 00:45:05,410 Acest lucru mai direct modifică gama noastră originală. 491 00:45:05,410 --> 00:45:10,690 Puteți face chiar că, dacă din anumite motive ai vrut capacitatea de a modifica - 492 00:45:10,690 --> 00:45:13,510 De fapt, acest lucru este perfect rezonabil. 493 00:45:13,510 --> 00:45:16,020 Tu nu a vrut să aibă de a scrie $ array [$ k] + +, 494 00:45:16,020 --> 00:45:27,890 ai vrut doar să scrie $ element + +, dar încă mai vrut să spun dacă ($ k === "A") 495 00:45:27,890 --> 00:45:30,620 incrementa apoi elementul și apoi imprimați gama noastră. 496 00:45:30,620 --> 00:45:36,290 Deci, acum ce ne așteptăm print_r să facem? Ce valori trebuie să fie tipărite? 497 00:45:36,290 --> 00:45:43,770 [Elev] 2 și 10. >> [Bowden] Numai în cazul în care cheia a fost "o" nu am imprima de fapt asta. 498 00:45:51,940 --> 00:45:55,670 >> Tu, probabil, foarte rar, dacă vreodată, va trebui să definească funcții în PHP, 499 00:45:55,670 --> 00:46:03,370 dar s-ar putea vedea ceva similar în cazul în care ați defini o funcție ca indiferent de funcție. 500 00:46:03,370 --> 00:46:09,900 De obicei, v-ar spune ($ foo, bar $) și apoi definiți ca acesta să fie orice. 501 00:46:09,900 --> 00:46:17,580 Dar dacă am face acest lucru, atunci înseamnă că indiferent de orice solicită, 502 00:46:17,580 --> 00:46:25,110 indiferent solicită Baz, deci primul argument a trecut la baz poate fi schimbat. 503 00:46:25,110 --> 00:46:38,100 Să facem $ foo + +; 504 00:46:38,100 --> 00:46:48,020 și în interiorul de aici să facem Baz ($ item); 505 00:46:48,020 --> 00:46:52,250 Acum suntem o functie de asteptare. 506 00:46:52,250 --> 00:46:56,780 Argumentul este luată de referință, ceea ce înseamnă că, dacă l-am modifica 507 00:46:56,780 --> 00:47:00,390 suntem modificarea lucru care a fost trecut inch 508 00:47:00,390 --> 00:47:04,420 Și tipărirea acestei ne așteptăm - dacă nu am incurcat sintaxa - avem 2, 11, 509 00:47:04,420 --> 00:47:06,300 așa că a fost de fapt crește. 510 00:47:06,300 --> 00:47:08,790 Observați avem nevoie de referințe în 2 locuri. 511 00:47:08,790 --> 00:47:13,050 Ce se întâmplă dacă am făcut asta? Ce înseamnă? 512 00:47:13,050 --> 00:47:15,810 [Elev] Se va schimba. Da >>. 513 00:47:15,810 --> 00:47:18,290 Postul este doar o copie a valorii în matrice. 514 00:47:18,290 --> 00:47:26,670 Deci, elementul se va schimba la 2, dar array ["a"] va fi în continuare 1. 515 00:47:26,670 --> 00:47:32,560 Sau ce se întâmplă dacă am face acest lucru? 516 00:47:32,560 --> 00:47:39,260 Acum, elementul este trimis ca o copie a Baz. 517 00:47:39,260 --> 00:47:46,330 Deci copie a argumentului va fi incrementat cu 2, 518 00:47:46,330 --> 00:47:49,240 dar elementul în sine nu a fost niciodată crește la 2. 519 00:47:49,240 --> 00:47:52,880 Și element este același lucru ca și categorie de matrice orice, 520 00:47:52,880 --> 00:47:55,380 astfel că nu a fost niciodată matrice crește. 521 00:47:55,380 --> 00:47:57,960 Deci, aceste două locuri nevoie de ea. 522 00:47:57,960 --> 00:48:03,830 >> PHP este de obicei destul de inteligent despre acest lucru. 523 00:48:03,830 --> 00:48:06,570 Ai putea crede că vreau să trec prin trimitere - 524 00:48:06,570 --> 00:48:09,560 Acest lucru a fost de fapt o întrebare pe unul din psets. 525 00:48:09,560 --> 00:48:14,480 A fost un lucru questions.txt în cazul în care acesta a spus, 526 00:48:14,480 --> 00:48:19,280 De ce s-ar putea doriți să treci acest struct de referință? 527 00:48:19,280 --> 00:48:21,250 Care a fost răspunsul la asta? 528 00:48:21,250 --> 00:48:25,100 [Elev] Deci, nu trebuie să copiați ceva mare. Da >>. 529 00:48:25,100 --> 00:48:32,920 Un struct poate fi arbitrar de mare, și atunci când treci în struct ca argument 530 00:48:32,920 --> 00:48:36,800 de care are nevoie pentru a copia întregul struct care să-l treacă la funcția, 531 00:48:36,800 --> 00:48:40,410 întrucât, dacă treci doar struct de referință 532 00:48:40,410 --> 00:48:46,530 atunci trebuie doar să copiați o adresă de 4-octet ca argument pentru funcția. 533 00:48:48,520 --> 00:48:52,320 PHP este un pic mai deștept decât atât. 534 00:48:52,320 --> 00:49:00,650 Dacă am o anumită funcție și am să-l treci o serie de 1.000 de lucruri, 535 00:49:00,650 --> 00:49:03,990 nu inseamna ca ea va trebui să copiați toate acele lucruri 1.000 de 536 00:49:03,990 --> 00:49:10,450 să-l treacă în funcția? Aceasta nu trebuie să faci asta imediat. 537 00:49:10,450 --> 00:49:15,940 În cazul în care în interiorul acestei funcții nu se modifică, de fapt foo, 538 00:49:15,940 --> 00:49:22,660 așa că, dacă ($ foo === "hello") return true.; 539 00:49:22,660 --> 00:49:26,460 Observați, de fapt nu am modificat interiorul argumentul acestei funcții, 540 00:49:26,460 --> 00:49:30,010 ceea ce înseamnă că tot ce a fost adoptată în foo ca niciodată trebuie să fie copiat 541 00:49:30,010 --> 00:49:32,100 pentru că nu e asta modificarea. 542 00:49:32,100 --> 00:49:39,240 Deci, modul PHP lucrărilor este argumentele sunt întotdeauna transmise prin referință 543 00:49:39,240 --> 00:49:42,170 până când încerca de fapt să-l modifice. 544 00:49:42,170 --> 00:49:51,160 Acum, dacă spun $ foo + +; se va face acum o copie a originalului foo și modifica copie. 545 00:49:51,160 --> 00:49:53,090 Acest lucru economisește timp. 546 00:49:53,090 --> 00:49:58,210 Dacă nu sunteți niciodată atingerea acestei matrice masiv, nu ai modifica de fapt, 547 00:49:58,210 --> 00:50:02,360 ea nu are nevoie pentru a face copia, 548 00:50:02,360 --> 00:50:06,640 întrucât în ​​cazul în care am pus asta ampersand că înseamnă că nu copiază chiar 549 00:50:06,640 --> 00:50:08,640 chiar dacă nu-l modificați. 550 00:50:08,640 --> 00:50:10,680 Acest comportament se numește copiere-on-write. 551 00:50:10,680 --> 00:50:17,380 Veți vedea în alte locuri, mai ales dacă vă luați un curs de sistem de operare. 552 00:50:17,380 --> 00:50:23,880 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 553 00:50:23,880 --> 00:50:26,650 excepția cazului în care de fapt se schimba. Da. 554 00:50:26,650 --> 00:50:29,520 [Elev] Ce se întâmplă dacă ai avut creștere în interiorul testului, 555 00:50:29,520 --> 00:50:33,700 astfel încât numai 1 element din 1000 ar trebui să fie schimbat? 556 00:50:33,700 --> 00:50:38,770 Nu sunt sigur. 557 00:50:38,770 --> 00:50:51,250 Cred că ar copia întregul lucru, dar e posibil e destul de deștept ca - 558 00:50:51,250 --> 00:51:00,020 De fapt, la ce mă gândesc este imaginăm am avut o matrice care arată ca aceasta: $ matrice2 = [ 559 00:51:00,020 --> 00:51:11,000 Apoi, indicele "a" este un tablou de [1 2 3 4], precum și indicele "b" este o matrice de orice. 560 00:51:11,000 --> 00:51:15,380 Am nevoie de virgule între toți cei. Imaginați-vă, există virgule. 561 00:51:15,380 --> 00:51:21,210 Apoi "c" este valoarea 3. 562 00:51:24,210 --> 00:51:26,290 Bine. 563 00:51:26,290 --> 00:51:33,440 Acum, haideți să spunem ce facem $ Baz ($ matrice2); 564 00:51:33,440 --> 00:51:36,540 în cazul în care Baz nu ia acest lucru prin referință. 565 00:51:43,510 --> 00:51:47,370 Deci $ foo ['c'] + +; 566 00:51:47,370 --> 00:51:52,340 Acesta este un astfel de exemplu în cazul în care ne trec matrice2 ca argument 567 00:51:52,340 --> 00:51:57,010 și apoi se modifica un indice specific al matrice de incrementarea-l. 568 00:51:57,010 --> 00:52:01,090 Nu am nici o idee despre ceea ce sincer PHP este de gând să facă. 569 00:52:01,090 --> 00:52:07,200 Se poate face cu ușurință o copie a întregului lucru, dar dacă e inteligent, 570 00:52:07,200 --> 00:52:15,030 se va face o copie a acestor taste în cazul în care aceasta va avea o valoare distinct 571 00:52:15,030 --> 00:52:20,620 dar acest lucru poate indica în continuare la aceeași matrice 1,2,3,4 572 00:52:20,620 --> 00:52:22,320 iar acest lucru poate indica în continuare la aceeași matrice. 573 00:52:22,320 --> 00:52:24,170 Voi iPad-l. 574 00:52:28,900 --> 00:52:45,950 Trecem în această matrice în cazul în care acest tip de puncte la 3, acest tip de puncte pentru a [1,2,3,4], 575 00:52:45,950 --> 00:52:51,350 Acest tip de puncte la [34, ...] 576 00:52:51,350 --> 00:52:58,590 Acum că suntem în aceasta trece la Baz, suntem modificarea asta. 577 00:52:58,590 --> 00:53:03,550 Dacă PHP este inteligent, se poate face doar - 578 00:53:11,850 --> 00:53:18,230 Am avut încă de a copia unele de memorie, dar dacă ar exista aceste subarrays uriașe imbricate 579 00:53:18,230 --> 00:53:21,560 nu am nevoie pentru a copia cele. 580 00:53:21,560 --> 00:53:27,530 Nu știu dacă asta e ceea ce face, dar îmi pot imagina că faci asta. 581 00:53:29,050 --> 00:53:36,690 Aceasta este, de asemenea, un avantaj destul de mare de peste C PHP. 582 00:53:36,690 --> 00:53:40,320 >> PHP face viața mult mai ușoară pentru o mulțime de lucruri, 583 00:53:40,320 --> 00:53:45,060 dar ai un fel de ai absolut nici o idee cât de bine se va efectua 584 00:53:45,060 --> 00:53:52,530 pentru că nu am nici o idee sub capota atunci când este efectuarea acestor copii de lucruri, 585 00:53:52,530 --> 00:53:55,170 oh, este că va fi o copie constanta de timp, 586 00:53:55,170 --> 00:54:01,140 este doar de gând să schimbe un pointer, se merge a fi o copie ridicol de dificil liniar? 587 00:54:01,140 --> 00:54:03,000 Ce se întâmplă dacă nu se poate găsi un spațiu? 588 00:54:03,000 --> 00:54:06,760 Are nevoie de ea, apoi pentru a rula de colectare a gunoiului pentru a obține ceva mai mult spațiu? 589 00:54:06,760 --> 00:54:11,210 Și de colectare a gunoiului poate dura mult timp arbitrar. 590 00:54:11,210 --> 00:54:13,600 În C nu trebuie să vă faceți griji despre aceste lucruri. 591 00:54:13,600 --> 00:54:19,780 Fiecare linie unică vă puteți să scrieți un motiv destul de mult despre modul în care aceasta va efectua. 592 00:54:26,800 --> 00:54:29,150 >> Să ne uităm înapoi la astea. 593 00:54:35,400 --> 00:54:37,520 Cât de frumos este faptul că nu trebuie să se ocupe cu funcții hash, 594 00:54:37,520 --> 00:54:39,010 liste legate, sau ceva de genul asta? 595 00:54:39,010 --> 00:54:41,980 Din moment ce lucrul cu tabele de dispersie este atât de ușor acum, aici, e un puzzle distractiv pentru a lucra la. 596 00:54:41,980 --> 00:54:45,920 Deschide un fișier numit unique.php și în ea scrie un program de PHP 597 00:54:45,920 --> 00:54:48,330 (De asemenea, cunoscut ca un "script"). 598 00:54:48,330 --> 00:54:55,700 Avem tendința să le numim scripturi, dacă acestea sunt lucruri pe care le execută scurt la linia de comandă. 599 00:54:55,700 --> 00:55:02,950 Practic, orice limbă pe care nu compila, dar ai de gând să ruleze executabil 600 00:55:02,950 --> 00:55:05,920 la linia de comandă, puteți apela acel script executabil. 601 00:55:05,920 --> 00:55:08,510 Aș putea la fel de bine scrie un program C care face acest lucru, 602 00:55:08,510 --> 00:55:12,300 dar eu nu-l numesc un script de când am compila prima și apoi executați binar. 603 00:55:12,300 --> 00:55:15,480 Dar acest program PHP vom apela un script. 604 00:55:15,480 --> 00:55:23,830 Sau dacă l-am scris în Python sau Perl sau Node.js sau la oricare dintre aceste lucruri, 605 00:55:23,830 --> 00:55:26,500 ne-am le numim toate script-urile pentru ca le executa la linia de comandă 606 00:55:26,500 --> 00:55:30,040 dar noi nu le compila. 607 00:55:30,860 --> 00:55:33,400 Am putea face acest lucru destul de repede. 608 00:55:36,960 --> 00:55:41,480 Noi nu suntem de gând să folosească argv. Hai să arunce în aer prin asta. 609 00:55:41,480 --> 00:55:45,730 Sună-l unic, scrie un program. 610 00:55:45,730 --> 00:55:49,400 Puteți presupune că intrarea va conține un cuvânt pe fiecare rând. 611 00:55:49,400 --> 00:55:52,020 De fapt, argv va fi destul de banal pentru a utiliza. 612 00:56:03,730 --> 00:56:06,720 unique.php. 613 00:56:08,550 --> 00:56:13,750 Primul lucru pe de o parte, dorim să verificați dacă am fost trecut de 1 linie de comandă argumentul. 614 00:56:13,750 --> 00:56:20,900 Așa cum v-ați aștepta argc și argv în C, avem în continuare cele în PHP. 615 00:56:20,900 --> 00:56:33,900 Deci, dacă ($ argc == 2!), Atunci nu se va ocupa de tipărirea unui mesaj sau ceva. 616 00:56:33,900 --> 00:56:37,340 Voi ieși doar, codul de eroare de 1. 617 00:56:37,340 --> 00:56:41,340 Aș putea reveni, de asemenea, 1. 618 00:56:41,340 --> 00:56:53,180 Rareori în PHP ești la această stare în care suntem la - 619 00:56:53,180 --> 00:56:57,820 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. 620 00:56:57,820 --> 00:57:02,070 Și dacă ceva nu merge bine și vrei doar să ieși totul în întregime, 621 00:57:02,070 --> 00:57:05,680 de ieșire se termină doar programul. 622 00:57:05,680 --> 00:57:08,160 Acest lucru, de asemenea, există în C. 623 00:57:08,160 --> 00:57:10,700 Dacă sunteți într-o funcție într-o funcție într-o funcție într-o funcție 624 00:57:10,700 --> 00:57:17,540 și doriți să-l omoare doar programul, puteți apela de ieșire și se va ieși pur și simplu. 625 00:57:17,540 --> 00:57:23,120 Dar în PHP este chiar mai rar că suntem la acest nivel de top. 626 00:57:23,120 --> 00:57:26,090 De obicei, suntem în interiorul un fel de funcții, astfel încât noi o numim de ieșire 627 00:57:26,090 --> 00:57:29,650 astfel încât să nu trebuie să se întoarcă la 1 lucru care apoi își dă seama că este o eroare 628 00:57:29,650 --> 00:57:32,270 astfel că se întoarce până în cazul în care recunoaște că a fost o eroare. 629 00:57:32,270 --> 00:57:35,270 Noi nu vrem să se ocupe cu asta, deci ieși (1); 630 00:57:35,270 --> 00:57:38,240 retur (1); în acest caz, ar fi echivalent. 631 00:57:38,240 --> 00:57:44,000 >> Atunci ce vrem să deschidă vrem să fopen. 632 00:57:44,000 --> 00:57:46,760 Argumentele sunt de gând să se uite destul de asemănătoare. 633 00:57:46,760 --> 00:57:51,600 Dorim să fopen ($ argv [1], și vrem să-l deschidă pentru citirea. 634 00:57:51,600 --> 00:57:55,720 Care returnează o resursă pe care am de gând să sun f. 635 00:57:55,720 --> 00:58:02,180 Acest lucru pare destul de similar cu modul în care o face, cu excepția C nu trebuie să spun * FILE. 636 00:58:02,180 --> 00:58:06,170 În schimb, am spune doar $ f. Bine. 637 00:58:06,170 --> 00:58:17,190 De fapt, cred că acest lucru chiar ne oferă un indiciu cu privire la funcția PHP numit fișier. PHP fișier. 638 00:58:17,190 --> 00:58:23,990 Ceea ce acest lucru este de gând să faceți este să citiți un fișier întreg într-o matrice. 639 00:58:23,990 --> 00:58:29,770 Nu aveți nevoie chiar de a fopen-l. Se va face asta pentru tine. 640 00:58:37,450 --> 00:58:43,700 Deci $ linii = file ($ argv [1]); 641 00:58:43,700 --> 00:58:49,680 Acum, toate liniile de fișier sunt în linii. Acum vrem să sortați liniile. 642 00:58:49,680 --> 00:58:52,180 Cum putem sorta liniile? 643 00:58:52,180 --> 00:58:54,920 Noi sorta liniile. 644 00:58:54,920 --> 00:58:58,080 Și acum putem să le imprimați sau orice altceva. 645 00:58:58,080 --> 00:59:05,580 Probabil cel mai simplu mod este de foreach ($ $ linii ca linie) echo $ line; 646 00:59:05,580 --> 00:59:10,960 [Elev] nu ne-am trece chiar prin corelarea linii ceva în fel? 647 00:59:10,960 --> 00:59:28,850 Acest lucru este în cazul în care ceva ar fi definit ca un fel de funcții (& $ array). 648 00:59:28,850 --> 00:59:32,650 Când apelați funcția pe care nu-l treci prin referință. 649 00:59:32,650 --> 00:59:36,900 Este funcția pe care o definește ca având ca referință. 650 00:59:36,900 --> 00:59:40,900 Aceasta este de fapt exact ceea ce a mers prost 651 00:59:40,900 --> 00:59:46,220 atunci când am pus totul pe serverele noastre atunci când ne-am dus 5.3 - 5.4. 652 00:59:46,220 --> 00:59:53,800 Până în 5.4, acest lucru a fost perfect rezonabilă. 653 00:59:53,800 --> 00:59:58,740 O functie nu se așteaptă să-l ia ca referință, dar puteți să-l dați ca referință 654 00:59:58,740 --> 01:00:02,860 așa că, dacă funcția se întâmplă să-l modifice, este încă modificat. 655 01:00:02,860 --> 01:00:05,850 Ca de 5,4, tu nu ar trebui să facă acest lucru. 656 01:00:05,850 --> 01:00:11,740 Deci, acum, singura modalitate de ai trece prin referință este în mod explicit în cazul în funcția de o face. 657 01:00:11,740 --> 01:00:19,840 Dacă nu doriți să-l modificați, atunci ai nevoie pentru a face $ $ = copie de linii și de copiere de trecere. 658 01:00:19,840 --> 01:00:24,820 Deci, acum, liniile vor fi păstrate și în copie vor fi schimbate. 659 01:00:27,670 --> 01:00:31,460 php.unique.php. S-ar putea fi incurcat ceva. 660 01:00:31,460 --> 01:00:33,190 Neașteptată "sortare". 661 01:00:38,320 --> 01:00:43,850 Nu o să fie ceva care face acest lucru pentru noi. 662 01:00:43,850 --> 01:00:45,820 Nu e chiar acolo. 663 01:00:45,820 --> 01:00:52,140 Observați atunci când ai citit manualul de faptul că primul argument este de așteptat să fie o matrice 664 01:00:52,140 --> 01:00:56,490 si este luat de referință. 665 01:00:58,160 --> 01:01:03,540 De ce este acest plange pentru mine? Pentru că am acest tip funcție încă aici că nu vreau. 666 01:01:03,540 --> 01:01:09,210 Bine, php.unique.php. Nu am să-l dați un argument pentru că nu am un fișier. 667 01:01:09,210 --> 01:01:13,560 E php.unique.php pe test.php. 668 01:01:13,560 --> 01:01:19,080 Aici este test.php toate tipărit într-o ordine frumos sortate. 669 01:01:19,080 --> 01:01:24,600 Observați că, pentru sortat este un fel de ciudat pentru un fișier de cod 670 01:01:24,600 --> 01:01:27,460 pentru că toate liniile noastre goale sunt de gând să vină mai întâi 671 01:01:27,460 --> 01:01:30,190 apoi sunt de gând să vină tot de crestături noastre de nivel 1 672 01:01:30,190 --> 01:01:33,360 vin atunci toate crestături noastre nr. 673 01:01:33,360 --> 01:01:38,620 Da. >> [Elev] Deci, pentru codul sursă nu a fost transmis prin referință? 674 01:01:38,620 --> 01:01:42,240 Este faptul că, în general, a trecut de valoare? 675 01:01:42,240 --> 01:01:50,240 [Bowden] Atunci când apelați o funcție, nu-l determină dacă acesta a fost transmis prin referință. 676 01:01:50,240 --> 01:01:53,960 Este definiția funcției care determină dacă acesta a fost transmis prin referință. 677 01:01:53,960 --> 01:01:59,450 Și se uită la definiția funcției de sortare sau doar se uită la acest lucru, 678 01:01:59,450 --> 01:02:02,820 este nevoie de argumentul de referință. 679 01:02:02,820 --> 01:02:07,160 Deci, indiferent dacă doriți să-l ia de referință, aceasta nu-l ia de referință. 680 01:02:07,160 --> 01:02:10,200 Acesta modifică matrice în loc. 681 01:02:10,200 --> 01:02:17,400 Acest lucru nu este doar permis. Tu nu ai voie să facă acest lucru. >> [Elev] Oh, bine. 682 01:02:17,400 --> 01:02:22,410 [Bowden] Aceasta, sortare este de gând să ia liniile de referință și modificați-l. 683 01:02:22,410 --> 01:02:26,850 Și din nou, dacă nu vrei să faci asta, ai putea face o copie de sortare. 684 01:02:26,850 --> 01:02:35,850 Chiar și în acest caz, copie nu este de fapt o copie de linii. 685 01:02:35,850 --> 01:02:40,620 Pur și simplu indică același lucru până când acesta devine primul modificată, 686 01:02:40,620 --> 01:02:44,430 în cazul în care primul va fi modificată în funcție de sortare, 687 01:02:44,430 --> 01:02:50,940 în cazul în care, pentru că exemplarul-pe-scrie, acum o copie a exemplarului se va face. 688 01:02:57,500 --> 01:03:04,250 Puteți face, de asemenea, acest lucru. Asta e un alt loc, puteți vedea ampersand. 689 01:03:04,250 --> 01:03:07,190 Îl vedeți în bucle foreach, îl vedeți în declarațiile funcțiilor, 690 01:03:07,190 --> 01:03:10,040 și îl vezi atunci când atribuirea doar variabile. 691 01:03:10,040 --> 01:03:12,350 Acum am realizat nimic de a face acest 692 01:03:12,350 --> 01:03:15,600 deoarece copie și liniile sunt literalmente același lucru. 693 01:03:15,600 --> 01:03:19,940 Aveți posibilitatea să utilizați linii și copia alternativ. 694 01:03:19,940 --> 01:03:25,430 Puteți face unset ($ copie); și că nu linii nesetate, 695 01:03:25,430 --> 01:03:29,120 ai pierdut doar referința la același lucru. 696 01:03:29,120 --> 01:03:33,440 Deci, ca de la acest punct, acum linii este singura cale prin care se poate accesa linii. 697 01:03:36,450 --> 01:03:38,770 >> Întrebări? 698 01:03:41,000 --> 01:03:42,460 Da. 699 01:03:42,460 --> 01:03:45,880 [Elev] Complet off topic, dar nu trebuie să închidă PHP cu - >> Tu nu faci. 700 01:03:45,880 --> 01:03:47,730 Bine. 701 01:03:47,730 --> 01:03:53,790 [Bowden], aș merge atât de departe încât să spun că e rău practică pentru a le închide. 702 01:03:53,790 --> 01:03:57,580 Asta e, probabil, o exagerare, mai ales într-un script, 703 01:03:57,580 --> 01:04:03,740 dar să vedem ce se întâmplă dacă am face acest lucru. 704 01:04:03,740 --> 01:04:08,890 Asta nu a făcut nimic. Ce se întâmplă dacă am vrut - [oftează] 705 01:04:13,870 --> 01:04:16,960 Am nevoie pentru a trece un argument. 706 01:04:19,000 --> 01:04:22,050 Trage. Am numit-o gresit. 707 01:04:24,340 --> 01:04:28,310 Deci, php.unique.php cu un argument. 708 01:04:28,310 --> 01:04:30,980 Acum, nu am nevoie nici asta. 709 01:04:34,520 --> 01:04:37,740 Voi trece un argument valid. 710 01:04:37,740 --> 01:04:42,050 Acest imprimate indiferent că e de imprimare. 711 01:04:45,260 --> 01:04:50,080 Sunt imprimați copie si copie nu există. Deci linii. 712 01:04:53,650 --> 01:04:58,270 Acesta tipărite totul, și apoi observați toate vechiturile astea aici jos, 713 01:04:58,270 --> 01:05:06,690 pentru că în orice PHP, care este în afara de tag-uri PHP 714 01:05:06,690 --> 01:05:09,520 este doar de gând să fie imprimat literal. 715 01:05:09,520 --> 01:05:18,050 De aceea HTML, e atât de frumos încât să pot face div bla, bla, bla clasa sau orice altceva, 716 01:05:18,050 --> 01:05:25,140 bla, bla, bla și apoi face unele cod PHP și apoi faceți div sfârșitul anului. 717 01:05:25,140 --> 01:05:36,460 Și tipărirea acum asta primesc div meu frumos până sus, tot ceea ce PHP imprimate, în partea de jos div. 718 01:05:36,460 --> 01:05:43,510 Dezastruoasă atunci când se întâmplă așa ceva, ceea ce este destul de comună, 719 01:05:43,510 --> 01:05:47,930 doar o linie nouă izolat de la partea de jos a fișierului. 720 01:05:47,930 --> 01:05:50,940 Tu nu ar crede că ar fi așa de mare de o afacere 721 01:05:50,940 --> 01:05:58,660 până când ia în considerare faptul că, cu browsere - 722 01:05:58,660 --> 01:06:03,880 >> Cum redirecționează muncă sau practic orice lucrare anteturile, 723 01:06:03,880 --> 01:06:07,980 atunci cand faci conexiunea la un site web și-l trimite înapoi toate aceste anteturi și lucruri 724 01:06:07,980 --> 01:06:12,020 cum ar fi răspuns 200 sau redirecționa răspuns sau orice altceva, 725 01:06:12,020 --> 01:06:18,230 anteturile sunt valabile doar până la primul octet de date este trimis. 726 01:06:18,230 --> 01:06:23,140 Puteți redirecționa de mii de ori, dar de îndată ce primul octet de date este transmis 727 01:06:23,140 --> 01:06:26,120 tu nu ar trebui să își reorienteze din nou. 728 01:06:26,120 --> 01:06:31,860 >> Dacă aveți o linie nouă izolat de la partea de jos a unui fișier 729 01:06:31,860 --> 01:06:37,260 și să spunem că utilizați această funcție și apoi doriți să - 730 01:06:41,580 --> 01:06:52,870 Să zicem că e un alt fișier care este index.php si tu ceva require_once - 731 01:06:52,870 --> 01:06:56,920 Eu nu pot gândi la un bun exemplu de ea. 732 01:06:56,920 --> 01:07:04,740 Problema se întâmplă atunci când această linie în partea de jos se ecou. 733 01:07:04,740 --> 01:07:08,660 Tu nu vrei nimic să fi fost repetat încă. 734 01:07:10,820 --> 01:07:15,700 Chiar dacă nu ați intenționat pe nimic obtinerea ecou, ​​ceva sa te ecou 735 01:07:15,700 --> 01:07:17,990 si asa ca acum tu nu ar trebui să trimită anteturi orice mai mult 736 01:07:17,990 --> 01:07:20,030 și vei primi plângeri. 737 01:07:22,170 --> 01:07:24,420 Tu chiar nu au nevoie de aceste etichete de închidere. 738 01:07:24,420 --> 01:07:27,420 Dacă aveți de gând să faci ceva cu HTML - 739 01:07:27,420 --> 01:07:30,490 și este perfect rezonabil să se facă aici div indiferent de 740 01:07:30,490 --> 01:07:39,450 și apoi la acest punct puteți sau nu le puteti include. 741 01:07:39,450 --> 01:07:41,590 Nu contează cu adevărat. 742 01:07:41,590 --> 01:07:45,450 Dar în scripturi PHP este rar pentru ao închide. 743 01:07:45,450 --> 01:07:50,400 Când totul este PHP, absolut totul, 744 01:07:50,400 --> 01:07:55,460 nu aveți nevoie într-adevăr să-l închidă / nu ar trebui să-l închidă. 745 01:08:02,030 --> 01:08:05,720 >> Confruntarea cu siruri de caractere este mult mai frumos decât în ​​C. 746 01:08:05,720 --> 01:08:09,470 În PHP puteți specifica un șir cu ghilimele simple sau duble. 747 01:08:09,470 --> 01:08:12,820 Cu ghilimele simple nu puteți utiliza "evadare" secvențe. 748 01:08:12,820 --> 01:08:17,640 În mod constant scape, bla, bla, bla. 749 01:08:19,920 --> 01:08:24,010 Deci printf este foarte rar în PHP. 750 01:08:24,010 --> 01:08:32,290 Cred că mi-ar folosi printf dacă am vrut să fac un fel de lucru - în PSET 5 sprintf ai folosit sau orice altceva. 751 01:08:32,290 --> 01:08:36,060 Dar vrei să faci 001.jpg 002.jpg și. 752 01:08:36,060 --> 01:08:40,300 Deci, pentru acest fel de lucru în cazul în care eu de fapt vreau să formatați textul mi-ar folosi printf. 753 01:08:40,300 --> 01:08:44,689 Dar altfel mi-ar folosi doar concatenare șir. 754 01:08:44,689 --> 01:08:47,000 Eu nu folosesc niciodată cu adevărat printf. 755 01:08:49,229 --> 01:09:00,170 Suntem doar diferențierea între ghilimele simple detalii și citate duble. 756 01:09:00,170 --> 01:09:07,490 Cea mai mare diferență este că ghilimele simple, acesta va fi imprimat literal. 757 01:09:07,490 --> 01:09:15,390 Nu există nici un tip de date char în PHP, spre deosebire de C, astfel încât acesta este echivalentă cu prezenta. 758 01:09:15,390 --> 01:09:17,970 Sunt ambele șiruri. 759 01:09:17,970 --> 01:09:29,180 Și mai frumos lucru despre șiruri de oferta unică este am putea spune "Hello world!" bla, bla, bla, 760 01:09:29,180 --> 01:09:33,340 $ $ Wooo. 761 01:09:33,340 --> 01:09:38,260 Ce se întâmplă atunci când am imprima acesta este literalmente va imprima. 762 01:09:38,260 --> 01:09:40,680 Să scăpăm de toate lucrurile noastre. 763 01:09:40,680 --> 01:09:44,700 Deci, echo $ str1; 764 01:09:48,569 --> 01:09:56,570 Acesta tipărit literalmente toate aceste lucruri: semne dolar, 765 01:09:56,570 --> 01:09:58,770 backslash n, care v-ar crede ar fi liniile noi - 766 01:09:58,770 --> 01:10:01,500 toate aceste lucruri se imprimă literalmente. 767 01:10:01,500 --> 01:10:05,650 Singurul lucru care aveți nevoie pentru a scăpa sunt ghilimele simple 768 01:10:05,650 --> 01:10:09,470 deoarece în caz contrar s-ar crede că e închiderea ghilimele simple. 769 01:10:09,470 --> 01:10:15,050 Citate duble, complet diferite. 770 01:10:20,300 --> 01:10:25,870 Vedem deja o sintaxă de evidențiere ne cluing pe ceea ce e pe cale de a merge teribil de greșit. 771 01:10:25,870 --> 01:10:36,190 php.unique. Undefined variabila: wooo, deoarece aceasta este interpretată ca o variabilă numită wooo. 772 01:10:36,190 --> 01:10:42,400 Citate duble vă permit să inserați variabile în - 773 01:10:42,400 --> 01:10:52,730 Să zicem $ name = "Rob"; 774 01:10:52,730 --> 01:10:58,020 Deci, echo "Buna, numele meu este $ nume!"; 775 01:10:58,020 --> 01:11:09,260 Acesta recunoaște acest lucru ca pe o variabilă. 776 01:11:09,260 --> 01:11:21,210 Când m-am alerga ca - si eu va introduce un newline - Bună, numele meu este Rob! și salut lume! 777 01:11:21,210 --> 01:11:24,910 Acest lucru se datorează faptului că nu am scos de imprimare de wooo de mai sus. 778 01:11:24,910 --> 01:11:30,020 Există 1 pas mai departe poți face. 779 01:11:30,020 --> 01:11:39,250 $ Array = [1, 2, 3]; 780 01:11:39,250 --> 01:11:43,270 Ce se întâmplă dacă doriți să imprimați primul indice de tablou? 781 01:11:43,270 --> 01:11:45,150 Tu faci $ array [0]. 782 01:11:45,150 --> 01:11:49,280 Evidențierea sintaxei este un indiciu. Ce este acest gând să faci? 783 01:11:52,320 --> 01:11:54,510 php.unique. 784 01:11:54,510 --> 01:11:59,860 Bună, numele meu este 1! care nu este ceea ce am vrut. 785 01:11:59,860 --> 01:12:05,050 Evidențierea sintaxei ma mințit. 786 01:12:05,050 --> 01:12:13,020 Să încercăm "a" -> 1, 'b' -> 2. 787 01:12:18,450 --> 01:12:21,440 Asta e modul în care mi-ar trebui să-l scrie. 788 01:12:26,350 --> 01:12:32,160 Citat neașteptată unică (T_ENCAPSED bla, bla, bla, bla, bla). 789 01:12:32,160 --> 01:12:41,780 Ideea este că nu este recunoscut acest lucru ca parte a tabloului. 790 01:12:41,780 --> 01:12:46,620 Nu este recunoscut acest lucru ca matrice indexate printr-o scrisoare o. 791 01:12:46,620 --> 01:12:49,870 Vrei să faci asta, înconjurată de între acolade, 792 01:12:49,870 --> 01:12:54,730 și acum tot ceea ce este în acest bretele cret va fi interpolate, 793 01:12:54,730 --> 01:13:00,340 care este cuvântul care le folosim pentru a introduce magic aceste variabile în locurile potrivite. 794 01:13:00,340 --> 01:13:04,280 Acum acest lucru, php.unique, si Hi, numele meu este 1! cum era de asteptat 795 01:13:04,280 --> 01:13:07,720 sau Hi, numele meu este Rob! 796 01:13:14,110 --> 01:13:23,130 Un lucru care e un fel de frumos despre ghilimele simple este faptul că - 797 01:13:23,130 --> 01:13:28,480 Există unele costuri la interpolarea. 798 01:13:30,520 --> 01:13:35,100 Dacă utilizați ghilimele duble, interpretul trebuie să meargă peste acest șir, 799 01:13:35,100 --> 01:13:41,500 asigurându-vă că, "Oh, aici este o variabilă Acum am nevoie pentru a merge obține că variabila și introduceți-l aici.". 800 01:13:41,500 --> 01:13:48,930 Chiar dacă nu folosiți variabile, 801 01:13:48,930 --> 01:13:52,220 nimic în interiorul acestor citate duble trebuie să fie interpolate, 802 01:13:52,220 --> 01:13:56,800 dar va fi în continuare mai lent, deoarece trebuie să meargă de-a lungul ghilimele duble 803 01:13:56,800 --> 01:14:00,130 In cautare de lucruri care trebuie să fie interpolate. 804 01:14:00,130 --> 01:14:05,360 Citate astfel încât o persoană poate fi un pic mai repede în cazul în care nu trebuie să fie interpolate, 805 01:14:05,360 --> 01:14:15,650 si chiar am tendința de a utiliza ghilimele simple pentru, "Bună, numele meu este". $ Array ['a'] oricum. 806 01:14:15,650 --> 01:14:20,430 Asta va fi echivalent cu ceea ce am avut înainte. 807 01:14:24,840 --> 01:14:28,440 Dar este o chestiune de preferinta. 808 01:14:28,440 --> 01:14:34,750 Dacă utilizați PHP, probabil că nu le pasă de diferenta de viteza. 809 01:14:34,750 --> 01:14:39,480 Nu este suficient să-i motiveze pentru a începe cu. 810 01:14:39,480 --> 01:14:43,030 >> Alte întrebări finale? 811 01:14:47,430 --> 01:14:51,710 >> Noi de fapt nu am primit nici prin toate, dar chestia asta a fost plictisitor. 812 01:14:51,710 --> 01:14:59,080 Ultimul lucru pe care e un fel de frumos în PHP este atunci când ai de a face cu HTML, 813 01:14:59,080 --> 01:15:06,450 vei folosi un pic, asa ca sintaxa de comenzi rapide frumos pentru imprimarea unei variabile. 814 01:15:32,400 --> 01:15:36,730 Fără a pune PHP aici, aceasta se numește tag-uri scurte. 815 01:15:36,730 --> 01:15:44,330 Oficial ca PHP 5.4, aceasta este depreciată. 816 01:15:44,330 --> 01:15:48,640 Vi se recomandă să afișezi php. 817 01:15:48,640 --> 01:15:55,770 Acest lucru este încă susținută, atât de tag-uri scurte, cu <= sunt încă foarte bine?. 818 01:15:55,770 --> 01:16:02,480 Acesta este sprijinit în mod implicit, astfel încât să puteți utiliza aceste ca doriti, si sunt destul de convenabil. 819 01:16:02,480 --> 01:16:05,700 >> Alte întrebări? 820 01:16:07,780 --> 01:16:09,270 Bine. 821 01:16:10,840 --> 01:16:13,800 >> Rămâi elegant, San Diego. 822 01:16:13,800 --> 01:16:16,070 [Chicotește] 823 01:16:18,620 --> 01:16:22,660 Pa. [Râde] 824 01:16:24,350 --> 01:16:28,470 [Aplauze] [rade] 825 01:22:46,460 --> 01:22:49,460 >> [CS50.TV]