1 00:00:00,000 --> 00:00:02,610 [Powered by Google Translate] [Secció 8 - Més Còmode] 2 00:00:02,610 --> 00:00:04,910 [Rob Bowden - Harvard University] 3 00:00:04,910 --> 00:00:07,070 [Aquesta és CS50. - CS50.TV] 4 00:00:11,520 --> 00:00:14,160 >> Aquestes notes de la secció setmanes seran molt breu, 5 00:00:14,160 --> 00:00:19,070 així que només vaig a seguir parlant, vostès seguiran fent preguntes, 6 00:00:19,070 --> 00:00:22,720 i intentarem omplir el temps tant com sigui possible. 7 00:00:22,720 --> 00:00:31,950 Molta gent pensa que aquest conjunt de processadors no és necessàriament difícil, però és molt llarg. 8 00:00:31,950 --> 00:00:37,070 L'especificació conjunt de processadors es pren una hora per llegir. 9 00:00:40,530 --> 00:00:45,730 Li donem una gran part d'SQL que pugui necessitar per al seu ús. 10 00:00:45,730 --> 00:00:50,520 Explica el procés d'una gran quantitat d'aquesta, pel que no ha de ser massa dolent. 11 00:00:50,520 --> 00:00:54,560 Algú ha començat o acabat? 12 00:00:55,380 --> 00:00:59,710 És el conjunt de processadors passat. Oh, Déu meu. 13 00:00:59,710 --> 00:01:05,400 En general, hi ha un JavaScript, un després d'això, però les coses canvien calendari 14 00:01:05,400 --> 00:01:09,560 fa que tot sigui una setmana més curta, i ja no tenim un conjunt de processadors JavaScript. 15 00:01:09,560 --> 00:01:12,310 No sé com això afecta si JavaScript apareixerà en l'examen 16 00:01:12,310 --> 00:01:15,510 o Qüestionari 1. 17 00:01:15,510 --> 00:01:22,260 M'imagino que serà una cosa semblant al que necessita saber coses d'alt nivell sobre JavaScript, 18 00:01:22,260 --> 00:01:26,460 però dubto que acabava de donar-li directament el codi JavaScript 19 00:01:26,460 --> 00:01:28,720 ja que no han tingut un conjunt de processadors al mateix. 20 00:01:28,720 --> 00:01:33,000 Però això serà matèria per a l'examen pregunta de la setmana que ve. 21 00:01:33,000 --> 00:01:36,320 >> Secció de preguntes. 22 00:01:36,320 --> 00:01:43,870 Moltes d'aquestes coses són una mica mal redactat, però anem a discutir per què. 23 00:01:43,870 --> 00:01:50,220 A diferència de C, PHP és un "tipus dinàmic" del llenguatge. Què vol dir això, et preguntaràs? 24 00:01:50,220 --> 00:01:53,830 Bé, dir adéu a tots aquells flotador char, int, i les paraules clau que vostè necessita utilitzar 25 00:01:53,830 --> 00:01:56,190 en declarar variables i funcions en C. 26 00:01:56,190 --> 00:02:00,420 En PHP, el tipus d'una variable es determina pel valor que s'està duent a terme actualment. 27 00:02:00,420 --> 00:02:04,990 Així que abans d'escriure el codi en un arxiu anomenat dynamic.php, 28 00:02:04,990 --> 00:02:12,670 PHP és tipus dinàmics. Això és cert. 29 00:02:12,670 --> 00:02:17,590 Estic en desacord amb el fet que això vol dir que estem dient adéu a char, float, int, 30 00:02:17,590 --> 00:02:20,620 i altres paraules clau. 31 00:02:20,620 --> 00:02:25,510 La diferència exacta entre els tipus dinàmics i l'alternativa, 32 00:02:25,510 --> 00:02:32,010 que és estàtic de tipus, és que el tipus dinàmics, tota la comprovació de tipus i altres coses 33 00:02:32,010 --> 00:02:37,350 ocorre en temps d'execució, mentre estàtic de tipus ocorre en temps de compilació. 34 00:02:37,350 --> 00:02:43,030 La paraula estàtica en general sembla tenir significats temps de compilació. 35 00:02:43,030 --> 00:02:48,170 Suposo que hi ha altres usos per a ella, però al carrer quan es declara una variable estàtica, 36 00:02:48,170 --> 00:02:52,650 seu emmagatzematge s'assigna en temps de compilació. 37 00:02:52,650 --> 00:02:59,260 Aquí, tipus dinàmics només vol dir que - 38 00:02:59,260 --> 00:03:04,350 En C si intenta afegir una cadena i un enter, quan es compila, 39 00:03:04,350 --> 00:03:11,000 es queixarà perquè dirà que no es pot afegir un enter i un punter. 40 00:03:11,000 --> 00:03:14,710 No és només una operació vàlida. 41 00:03:14,710 --> 00:03:21,170 Aquesta és una altra cosa que arribarem a en un segon. 42 00:03:21,170 --> 00:03:24,860 Però aquest tipus de control, el fet que es queixa en temps de compilació, 43 00:03:24,860 --> 00:03:29,220 és la comprovació de tipus estàtics. 44 00:03:29,220 --> 00:03:35,220 Hi ha llengües en què no necessito dir flotador char, int, i totes aquestes coses, 45 00:03:35,220 --> 00:03:40,940 però el llenguatge pot dir del context del que tipus se suposa que ha de ser, 46 00:03:40,940 --> 00:03:43,980 però segueix sent estàtic de tipus. 47 00:03:43,980 --> 00:03:49,000 Així que si vostè pren 51, Ocaml, no cal utilitzar cap d'aquests tipus, 48 00:03:49,000 --> 00:03:58,700 però seguirà en temps de compilació diu que no pot fer-ho perquè va a barrejar un enter i una cadena. 49 00:03:58,700 --> 00:04:05,650 Tipus dinàmics només significa que en algun moment durant el temps d'execució que en tindrà una queixa. 50 00:04:05,650 --> 00:04:13,430 Si heu utilitzat Java abans, en general, gairebé qualsevol llenguatge de tipus C 51 00:04:13,430 --> 00:04:20,070 serà estàtic de tipus, de manera que C, C + +, Java, tots els que són generalment estàtic de tipus. 52 00:04:20,070 --> 00:04:22,910 En Java en compilar alguna cosa i dius 53 00:04:22,910 --> 00:04:26,670 cadena s és igual a una cosa nova que no és una cadena, 54 00:04:26,670 --> 00:04:28,950 això va a queixar perquè aquests tipus simplement no coincideixen. 55 00:04:28,950 --> 00:04:31,180 Això va a queixar en temps de compilació. 56 00:04:31,180 --> 00:04:36,750 Però també té una mica de temps dinàmic coses com si tracta de llançar alguna cosa 57 00:04:36,750 --> 00:04:40,500 a un tipus que és més específic que el tipus actual, 58 00:04:40,500 --> 00:04:45,610 no hi ha res pot fer en temps de compilació per comprovar si aquest repartiment tindrà èxit. 59 00:04:45,610 --> 00:04:51,130 Java també té algun tipus dinàmic comprovar que tan aviat com es posa a la línia de codi 60 00:04:51,130 --> 00:04:54,130 quan en realitat està executant, que farà el repartiment, 61 00:04:54,130 --> 00:04:56,260 de comprovar si eixa repartiment era vàlid, en primer lloc, 62 00:04:56,260 --> 00:04:59,890 i si no ho era, llavors va a queixar-se que vostè té un tipus no vàlid. 63 00:04:59,890 --> 00:05:03,200 Tipus dinàmic de xecs. 64 00:05:03,200 --> 00:05:07,010 Escriu això en un arxiu anomenat dynamic.php. 65 00:05:10,130 --> 00:05:12,380 Dynamic.php. 66 00:05:14,580 --> 00:05:17,190 Vaig a descomprimir aquest format. 67 00:05:18,750 --> 00:05:21,880 Tenim una variable, que estableix l'sencer 7, 68 00:05:21,880 --> 00:05:27,930 llavors anem a imprimir i% s - 69 00:05:27,930 --> 00:05:32,830 Oh, estem imprimint el tipus de la mateixa, de manera que gettype tornarà el tipus de la variable. 70 00:05:32,830 --> 00:05:35,720 Només estem imprimint el tipus una i altra vegada. 71 00:05:35,720 --> 00:05:39,440 Acabem de php.dynamic.php. 72 00:05:39,440 --> 00:05:45,920 Veurem que canvia de nombre sencer a cadena a Boolean com els que passem. 73 00:05:45,920 --> 00:05:54,590 En C no hi ha cap tipus de dades Boolean, no hi ha cap tipus de dades de cadena. 74 00:05:54,590 --> 00:06:00,500 Hi ha char * i booleans només tendeix a ser int o char o alguna cosa així. 75 00:06:00,500 --> 00:06:05,690 En PHP aquests tipus existeixen, i aquesta és una de les grans avantatges de PHP més de C - 76 00:06:05,690 --> 00:06:13,290 que les operacions de cadenes són infinitament més fàcil en PHP que C. Només treballen. 77 00:06:13,290 --> 00:06:18,290 >> Així que tornar aquí. 78 00:06:18,290 --> 00:06:21,260 Vam córrer dynamic.php. 79 00:06:21,260 --> 00:06:26,710 Això li diu a l'intèrpret de PHP, anomenat php, per executar el codi PHP en dynamic.php. 80 00:06:26,710 --> 00:06:30,250 Si vostè té qualsevol error en l'arxiu, l'intèrpret li dirà! 81 00:06:30,250 --> 00:06:39,110 L'intèrpret, aquesta és una altra gran diferència entre PHP i C. 82 00:06:39,110 --> 00:06:48,200 En C cal compilar alguna cosa i després executar aquest arxiu compilat. 83 00:06:48,200 --> 00:06:50,490 En PHP no compila res. 84 00:06:50,490 --> 00:06:57,200 Així que l'intèrpret PHP és bàsicament llegint aquesta línia per línia. 85 00:06:57,200 --> 00:07:02,900 Es realitza var = 7 llavors es realitza printf llavors es realitza var llavors es realitza printf i així successivament. 86 00:07:02,900 --> 00:07:10,910 Hi ha una mica de compilar ho fa, i l'emmagatzema en memòria cau els resultats 87 00:07:10,910 --> 00:07:15,510 pel que si s'executa l'script més tard que pot fer alguna cosa, 88 00:07:15,510 --> 00:07:19,280 però bàsicament es tracta d'una línia per línia espècie de cosa. 89 00:07:19,280 --> 00:07:25,280 Això vol dir que moltes de les optimitzacions que obtenim en C, 90 00:07:25,280 --> 00:07:31,920 com la compilació, és només en general el compilador pot fer un munt de trucs per a tu. 91 00:07:31,920 --> 00:07:36,110 Pot dur a terme les variables utilitzades, es pot fer tot aquest tipus de coses, 92 00:07:36,110 --> 00:07:38,660 que pot fer la recursió de cua. 93 00:07:38,660 --> 00:07:42,550 En PHP no aconseguiràs aquest avantatge 94 00:07:42,550 --> 00:07:45,690 perquè només començarà a executar línia per línia per línia, 95 00:07:45,690 --> 00:07:49,950 i que en realitat no reconèixer aquestes coses tan fàcilment 96 00:07:49,950 --> 00:07:54,440 ja que no és un pas de gran compilació sobre la cosa i l'execució; 97 00:07:54,440 --> 00:07:56,860 és només línia per línia. 98 00:08:00,730 --> 00:08:02,750 Així que aquest és l'intèrpret. 99 00:08:02,750 --> 00:08:06,840 >> De tornada al nostre tipus dinàmics: molt bé, eh? 100 00:08:06,840 --> 00:08:08,640 Definitivament no podia fer això en C! 101 00:08:08,640 --> 00:08:11,860 Ara, a veure si es pot esbrinar el tipus de cada un dels següents valors. 102 00:08:11,860 --> 00:08:14,760 Veure la referència. 103 00:08:14,760 --> 00:08:19,420 Així 3,50. Quin tipus creus que serà? 104 00:08:24,480 --> 00:08:26,370 Aquests són els tipus que tenim. 105 00:08:26,370 --> 00:08:30,430 Tenim Bools, sencers, punts flotants, cadenes, matrius, objectes, 106 00:08:30,430 --> 00:08:38,370 i recursos, a continuació, que és una espècie de vague. 107 00:08:38,370 --> 00:08:41,010 Crec que en realitat és un exemple aquí. 108 00:08:41,010 --> 00:08:43,740 Després hi NULL. NULL és un tipus especial. 109 00:08:43,740 --> 00:08:47,140 A diferència de C, on NULL és un punter amb l'adreça 0, 110 00:08:47,140 --> 00:08:54,930 en PHP, NULL és el seu propi tipus on l'única vàlid d'aquest tipus és NULL. 111 00:08:57,560 --> 00:09:00,670 Això és molt més útil per a la comprovació d'errors. 112 00:09:00,670 --> 00:09:04,310 En C, on vam tenir aquest problema en el qual si torna NULL, 113 00:09:04,310 --> 00:09:08,660 Vol dir que vostè està tornant un punter NULL o utilitzant NULL per indicar error 114 00:09:08,660 --> 00:09:12,380 o tota la confusió que hi havia en un punt. 115 00:09:12,380 --> 00:09:18,440 En aquest cas, torni NULL significa generalment error. 116 00:09:20,860 --> 00:09:27,300 Un munt de coses també tornarà false per l'error. 117 00:09:27,300 --> 00:09:33,140 Però el punt és el tipus NULL, l'única del tipus NULL és NULL. 118 00:09:33,140 --> 00:09:40,090 Després de devolució de trucada és com es pot definir algunes funcions anònimes. 119 00:09:40,090 --> 00:09:46,420 No ha de proveir la funció d'un nom, però vostè no haurà de bregar amb això aquí. 120 00:09:46,420 --> 00:09:53,940 Quant als tipus que no esperis que sapiguem, 121 00:09:53,940 --> 00:09:59,000 Què et sembla el tipus de 3,50 és? >> [Estudiant] Float. 122 00:09:59,000 --> 00:10:00,370 Si. 123 00:10:00,370 --> 00:10:06,290 Així que aquí, què et sembla el tipus que és això? >> [Estudiant] Array. 124 00:10:06,290 --> 00:10:09,890 Si. La primera va ser flotador, el segon és una matriu. 125 00:10:09,890 --> 00:10:14,500 Tingueu en compte que aquesta sèrie no és com una matriu C 126 00:10:14,500 --> 00:10:19,610 on vostè té l'índex 0 té algun valor, índex 1 té algun valor. 127 00:10:19,610 --> 00:10:26,320 Aquí, els índexs són a, b, i c, i els valors són 1, 2, i 3. 128 00:10:26,320 --> 00:10:33,980 En PHP no hi ha diferència entre una matriu associativa i només una matriu regular 129 00:10:33,980 --> 00:10:36,740 com es podria pensar d'ell en C. 130 00:10:36,740 --> 00:10:43,040 No només això, i sota la caputxa d'una matriu regular és una matriu associativa 131 00:10:43,040 --> 00:10:50,000 on 0 mapes a algun valor de la mateixa manera s'assigna a un cert valor. 132 00:10:50,000 --> 00:11:00,410 Per això, PHP pot ser molt dolent per realment ràpids codi / avaluació comparativa de les coses 133 00:11:00,410 --> 00:11:07,930 ja que en C quan s'utilitza una matriu de saber que l'accés a un membre és la constant de temps. 134 00:11:07,930 --> 00:11:11,860 En PHP per accedir a un membre és qui sap quant de temps? 135 00:11:11,860 --> 00:11:18,970 És probable que sigui constant si hashes correctament. 136 00:11:18,970 --> 00:11:21,620 Qui sap el que està fent en realitat per sota de la caputxa? 137 00:11:21,620 --> 00:11:25,600 Segur que necessitat d'examinar l'aplicació per veure com va a lluitar amb això. 138 00:11:25,600 --> 00:11:28,550 Llavors fopen. 139 00:11:28,550 --> 00:11:36,420 Crec que aquí fopen Instruccions de PHP només per mirar el tipus de retorn. 140 00:11:36,420 --> 00:11:41,260 Veiem aquí pots consultar gairebé qualsevol funció en el manual de PHP 141 00:11:41,260 --> 00:11:47,540 i això és una espècie de la pàgina del manual de PHP. 142 00:11:47,540 --> 00:11:51,060 El tipus de canvi es requerirà molts recursos. 143 00:11:51,060 --> 00:11:56,050 És per això que el vaig buscar, perquè en realitat no definir els recursos. 144 00:11:56,050 --> 00:12:04,110 La idea dels recursos, al carrer que té un tipus de FILE * o el que sigui; 145 00:12:04,110 --> 00:12:07,200 PHP en el recurs és seu arxiu *. 146 00:12:07,200 --> 00:12:10,360 És el que llegirem, que és el que estarem escrivint. 147 00:12:10,360 --> 00:12:20,710 En general és externa, pel que és un recurs que pot tirar coses des i llençar coses a. 148 00:12:20,710 --> 00:12:26,520 I finalment, quin és el tipus de NULL? >> [Estudiant] NULL. 149 00:12:26,520 --> 00:12:30,650 Si. Així que l'única cosa que és NULL és NULL. 150 00:12:30,650 --> 00:12:33,480 NULL és NULL. 151 00:12:35,490 --> 00:12:41,170 >> Una característica del sistema de tipus de PHP (per bé o per mal) és la seva capacitat de fer malabars amb els tipus. 152 00:12:41,170 --> 00:12:44,390 En escriure una línia de codi PHP que combina els valors de diferents tipus, 153 00:12:44,390 --> 00:12:46,670 PHP intentarà fer el més sensat. 154 00:12:46,670 --> 00:12:48,920 Proveu cadascuna de les següents línies de codi PHP. Què està imprès? 155 00:12:48,920 --> 00:12:51,000 És el que esperaves? Per què o per què no? 156 00:12:51,000 --> 00:12:58,600 Aquest fet sobre PHP és el que el fa ser el que anomenem tipus febles. 157 00:12:58,600 --> 00:13:04,610 Tipus febles i fortament tipat, 158 00:13:04,610 --> 00:13:06,840 existeixen diferents aplicacions d'aquests termes, 159 00:13:06,840 --> 00:13:12,020 però la majoria de la gent fa servir tipus febles i fortament tipat en el sentit d'aquest tipus de coses 160 00:13:12,020 --> 00:13:15,920 on ("1" + 2), que funciona. 161 00:13:15,920 --> 00:13:18,290 En C que no anava a funcionar. 162 00:13:18,290 --> 00:13:22,490 Vostè pot imaginar això no funciona. 163 00:13:22,490 --> 00:13:29,200 Moltes persones barregen tipus dinàmics i tipificació feble i tipus estàtics i tipat fort. 164 00:13:29,200 --> 00:13:34,050 Python és un exemple més d'un idioma que s'escriu de forma dinàmica. 165 00:13:34,050 --> 00:13:41,770 Vostè pot llançar al voltant dels tipus de les variables i que determinarà en temps d'execució 166 00:13:41,770 --> 00:13:44,680 les comprovacions d'error. 167 00:13:44,680 --> 00:13:50,740 En Python s'executarà això i veurà ("1" + 2); 168 00:13:50,740 --> 00:13:55,920 i es produirà un error, ja que diu que no es pot afegir una cadena i un enter. 169 00:13:55,920 --> 00:14:00,860 En PHP, que és igual de tipus dinàmics, això no fallarà. 170 00:14:00,860 --> 00:14:04,220 Tipificació feble té a veure amb el fet que fa coses amb tipus 171 00:14:04,220 --> 00:14:07,800 que en realitat no té sentit necessàriament. 172 00:14:07,800 --> 00:14:17,420 Així ("1" + 2), puc imaginar que sent la cadena 12, m'imagino que és la cadena 3, 173 00:14:17,420 --> 00:14:20,710 M'imagino que és el nombre enter 3. 174 00:14:20,710 --> 00:14:24,530 No és necessàriament ben definida, i probablement anem a veure aquí 175 00:14:24,530 --> 00:14:29,140 que en imprimir ("1" + 2), que probablement acabarà sent diferent 176 00:14:29,140 --> 00:14:32,320 d'impressió (1 + "2"). 177 00:14:32,320 --> 00:14:39,700 I això tendeix a ser, al meu entendre, per pitjor. 178 00:14:39,700 --> 00:14:44,240 Aquí podem tractar aquests. 179 00:14:44,240 --> 00:14:48,740 Un altre petit truc sobre PHP és que no cal escriure realment l'arxiu. 180 00:14:48,740 --> 00:14:52,790 Sense haver corregut aquesta manera de comandament. 181 00:14:52,790 --> 00:14:57,710 Així php-r, llavors podem llençar l'ordre aquí: 182 00:14:57,710 --> 00:15:06,610 "Print ('1 '+ 2)," i vaig a llançar una nova línia. 183 00:15:19,550 --> 00:15:23,970 Aquest imprès 3. 184 00:15:31,100 --> 00:15:35,330 Sembla que imprimeix 3 i és el nombre enter 3. 185 00:15:35,330 --> 00:15:38,420 Així que ara anem a tractar a l'inrevés: 186 00:15:38,420 --> 00:15:42,970 "Lletra (1 + '2 '); 187 00:15:45,560 --> 00:15:50,490 Tenim 3, i ho està també serà un nombre enter 3? Honestament, no tinc idea. 188 00:15:50,490 --> 00:15:54,030 Sembla que és consistent. 189 00:15:54,030 --> 00:15:59,550 Mai hi ha alguna possibilitat que sigui el 12 cordes ni res d'això 190 00:15:59,550 --> 00:16:08,080 PHP perquè, a diferència de JavaScript i Java també, 191 00:16:08,080 --> 00:16:11,670 té un operador independent per a la concatenació. 192 00:16:11,670 --> 00:16:14,930 Concatenació en PHP és punt. 193 00:16:14,930 --> 00:16:22,950 Així impressió (1 '2 '.), Ens donarà 12. 194 00:16:25,790 --> 00:16:32,420 Això tendeix a crear confusió on la gent tracta de fer alguna cosa com str + = 195 00:16:32,420 --> 00:16:37,840 altra cosa que vulgueu afegir a la final de la cadena, i això va a fracassar. 196 00:16:37,840 --> 00:16:40,770 Que ha de fer str. = 197 00:16:42,000 --> 00:16:46,240 Així que no t'oblidis de concatenació en PHP és un punt. 198 00:16:46,240 --> 00:16:52,100 Altres coses per intentar: print ("CS" + 50); 199 00:16:55,750 --> 00:17:03,610 Ja t'he dit que no hi ha esperança que això impliqui CS50 200 00:17:03,610 --> 00:17:06,119 des concatenació no és +. 201 00:17:06,119 --> 00:17:08,440 Què et sembla que això acabarà sent? 202 00:17:10,359 --> 00:17:13,460 Sincerament, no tenen absolutament cap idea. 203 00:17:14,250 --> 00:17:16,460 Sembla que és només 50. 204 00:17:16,460 --> 00:17:21,490 Ves a la corda, i jo aposto a que si posem 123CS - 205 00:17:21,490 --> 00:17:29,640 Vés a la primera cadena, es tracta de llegir un nombre enter d'ella o d'un codi d 'aquesta. 206 00:17:29,640 --> 00:17:31,710 En aquest cas es veu 123CS. 207 00:17:31,710 --> 00:17:35,190 "Això no té sentit com un enter, així que només vaig a pensar en 123". 208 00:17:35,190 --> 00:17:38,580 Així 123 + 50 serà 173. 209 00:17:38,580 --> 00:17:40,740 I aquí comença a llegir això com un sencer. 210 00:17:40,740 --> 00:17:45,690 No es veu res, de manera que només el tracta com a 0. Llavors, 0 +50 serà 50. 211 00:17:45,690 --> 00:17:51,600 Això que estic assumint que farà alguna cosa semblant. 212 00:17:51,600 --> 00:17:54,310 Estic pensant en 99. 213 00:17:54,310 --> 00:17:57,580 Sí, perquè va a prendre la primera - 214 00:18:12,880 --> 00:18:15,730 Així 99. 215 00:18:15,730 --> 00:18:21,970 Aquí (10/7), si això fos C, quin seria tornar? 216 00:18:23,700 --> 00:18:29,630 [Estudiant] 1. >> Sí, seria una causa 10/7 està dividint dos nombres enters. 217 00:18:29,630 --> 00:18:32,910 Sencer dividit per un enter tornarà un enter. 218 00:18:32,910 --> 00:18:37,750 No es pot tornar un punt qualsevol que sigui, de manera que només tornarà 1. 219 00:18:37,750 --> 00:18:46,120 Aquí impressió (10/7), que interpretarà en realitat això. 220 00:18:46,120 --> 00:18:53,760 I això vol dir que si vostè realment vol fer arrodoniment sencer i coses per l'estil, 221 00:18:53,760 --> 00:18:59,950 que ha de fer print (pis (10/7)); 222 00:18:59,950 --> 00:19:08,460 En C és probablement estrany que vostè pot confiar en el truncament sencer amb regularitat, 223 00:19:08,460 --> 00:19:12,260 però en PHP no es pot perquè automàticament es convertirà en un flotador. 224 00:19:13,430 --> 00:19:17,610 I llavors (7 + true); què et sembla que serà? 225 00:19:18,550 --> 00:19:23,640 Suposo 8 si es va a interpretar com una veritat. 226 00:19:23,640 --> 00:19:25,740 Sembla que són les 8. 227 00:19:25,740 --> 00:19:31,710 >> Així que tot el que hem fet en els últims 10 minuts no ha absolutament fer. 228 00:19:31,710 --> 00:19:39,870 Veurà el codi que fa això. 229 00:19:39,870 --> 00:19:42,700 No cal que sigui tan senzill com aquest. 230 00:19:42,700 --> 00:19:47,240 Vostè podria tenir dues variables, i 1 variable passa a ser una cadena 231 00:19:47,240 --> 00:19:51,310 i l'altra variable passa a ser un int, i després s'afegeixen aquestes variables. 232 00:19:51,310 --> 00:20:00,120 A partir de PHP és tipus dinàmics i no farà cap comprovació de tipus per a vostè 233 00:20:00,120 --> 00:20:03,640 I ja que és tipus febles i com s'acaba de llançar automàticament aquestes coses juntes 234 00:20:03,640 --> 00:20:11,490 i tot es va a treballar, és difícil saber fins que aquesta variable ha de ser una cadena ara, 235 00:20:11,490 --> 00:20:14,930 pel que no ha de afegir a aquesta variable, que és un enter. 236 00:20:18,780 --> 00:20:24,560 La millor pràctica és si una variable és una cadena, es mantindrà com una cadena per sempre. 237 00:20:24,560 --> 00:20:26,980 Si una variable és un enter, mantenir com un int per sempre. 238 00:20:26,980 --> 00:20:30,770 Si vostè vol tractar amb nombres enters i cadenes, 239 00:20:30,770 --> 00:20:36,970 pot utilitzar varsint - això és JavaScript. 240 00:20:36,970 --> 00:20:42,520 Intval. Ho faig tot el temps. PHP i JavaScript barrejo tot. 241 00:20:42,520 --> 00:20:47,600 Així intval tornarà el valor sencer d'una variable. 242 00:20:47,600 --> 00:20:56,550 Si passem a "print (intval ('123 ')), s'obté 123. 243 00:21:06,820 --> 00:21:15,850 Intval si mateix no farà el xec per a nosaltres que és exclusivament un enter. 244 00:21:15,850 --> 00:21:20,460 El manual de PHP, hi ha funcions només disponibles per a molts, 245 00:21:20,460 --> 00:21:26,560 asique crec que el que jo faria servir és is_numeric primer. 246 00:21:26,560 --> 00:21:32,590 Suposo que retorna false. 247 00:21:32,590 --> 00:21:35,780 Aquesta és una altra cosa que hem d'anar més és. === 248 00:21:37,850 --> 00:21:44,020 Així is_numeric ('123df '), no se li ocorreria que a mesura que is_numeric. 249 00:21:44,020 --> 00:21:46,720 En C hauries de iterar sobre tots els caràcters 250 00:21:46,720 --> 00:21:50,410 i comprovar per veure si cada caràcter és el dígit o el que sigui. 251 00:21:50,410 --> 00:21:53,850 Aquí is_numeric farà això per nosaltres, 252 00:21:53,850 --> 00:21:56,520 i es retorna false. 253 00:21:56,520 --> 00:22:02,120 Així que quan em impresa, s'imprimirà res, així que aquí estic comparant a veure, 254 00:22:02,120 --> 00:22:05,490 se t'ha acudit que és falsa? I pel que ara s'està imprimint 1. 255 00:22:05,490 --> 00:22:10,060 Pel que sembla, s'imprimeix 1 com veritable lloc d'imprimir veritable com a veritable. 256 00:22:10,060 --> 00:22:15,790 Em pregunto si ho faig print_r. No, encara ho fa 1. 257 00:22:15,790 --> 00:22:26,760 >> Tornant a ===, == encara existeix, 258 00:22:26,760 --> 00:22:32,260 i si vostè parla amb Tommy dirà == està perfectament bé. 259 00:22:32,260 --> 00:22:37,700 Vaig a dir que == és terrible i mai s'ha d'utilitzar. == 260 00:22:37,700 --> 00:22:44,870 La diferència és que == compara coses 261 00:22:44,870 --> 00:22:48,450 on pot ser cert fins i tot si no són del mateix tipus, 262 00:22:48,450 --> 00:22:53,810 mentre === compara les coses i primer es comprova que són del mateix tipus? 263 00:22:53,810 --> 00:22:58,010 Sí Bé, ara vaig a veure si realment comparar a ser igual. 264 00:22:58,010 --> 00:23:08,890 Vostè aconsegueix coses rares com 10 és igual a - anem a veure el que diu. 265 00:23:08,890 --> 00:23:15,570 Així que ('10 '== '1 e1'); 266 00:23:15,570 --> 00:23:17,980 Retorna true. 267 00:23:17,980 --> 00:23:21,420 Algú té alguna idea per què això torna true? 268 00:23:25,180 --> 00:23:27,120 No es tracta només d'això. Potser això és una indirecta. 269 00:23:27,120 --> 00:23:33,170 Però si puc canviar això a un f - és maleït! Segueixo utilitzant cometes dobles. 270 00:23:33,170 --> 00:23:38,780 La raó de les cometes dobles estan cridant a mi és perquè m'he posat aquesta entre cometes dobles. 271 00:23:38,780 --> 00:23:43,850 Així que podria escapar de les cometes dobles a aquí, però cometes simples fan que sigui més fàcil. 272 00:23:43,850 --> 00:23:49,120 Així que ('10 '== '1 f1'), no s'imprimeix cert. ('10 '== '1 E1'); imprimeix cert. 273 00:23:49,120 --> 00:23:56,330 [Estudiant] És hexadecimal? >> No és hexagonal, però gairebé que és com - 274 00:23:56,330 --> 00:24:01,060 Notació 1E1, científic. 275 00:24:01,060 --> 00:24:07,950 Es reconeix com un 1E1 * 10 ^ 1 o el que sigui. 276 00:24:07,950 --> 00:24:11,510 Aquests són nombres enters iguals. 277 00:24:11,510 --> 00:24:15,930 Si ho fem === llavors serà falsa. 278 00:24:15,930 --> 00:24:28,490 En realitat tinc ni idea de si ho fem == què passa amb (10 i'' 10abc); Està bé. Així que això és cert. 279 00:24:28,490 --> 00:24:35,940 Així com quan ho va fer (10 + '10abc »), i que seria 20, 280 00:24:35,940 --> 00:24:38,800 aquí (10 '10abc == '), és veritat. 281 00:24:38,800 --> 00:24:45,350 Pitjor encara són coses com (fals == NULL); és cert 282 00:24:45,350 --> 00:24:52,210 o (false == 0), és cert, (false == []); 283 00:24:52,210 --> 00:25:00,970 Hi ha casos rars de - Aquest és un d'aquests casos rars. 284 00:25:00,970 --> 00:25:08,110 Observeu que (false == []), és veritat. 285 00:25:08,110 --> 00:25:11,950 ('0 '== False), és veritat. 286 00:25:11,950 --> 00:25:16,090 ('0 '== []); És fals. 287 00:25:16,090 --> 00:25:19,090 Així == és de cap manera transitiva. 288 00:25:19,090 --> 00:25:26,830 una pot ser igual a B i A pot ser igual a c, 289 00:25:26,830 --> 00:25:29,340 però b pot no ser igual a c. 290 00:25:29,340 --> 00:25:35,580 Això és una abominació per a mi, i sempre s'ha d'utilitzar. === 291 00:25:35,580 --> 00:25:38,590 [Estudiant] Podem fer-ho! == També? >> [Bowden] Sí 292 00:25:38,590 --> 00:25:44,600 L'equivalent seria! = I! ==. 293 00:25:44,600 --> 00:25:48,230 Això és realment educat en l'especificació de conjunt de processadors 294 00:25:48,230 --> 00:25:52,000 on una gran quantitat de funcions retornen - 295 00:25:52,000 --> 00:25:53,890 El manual de PHP és bo sobre això. 296 00:25:53,890 --> 00:25:59,140 Es posa en una caixa vermella gran "Això retornarà false si hi ha un error." 297 00:25:59,140 --> 00:26:03,940 Però tornant 0 és una cosa perfectament raonable per tornar. 298 00:26:03,940 --> 00:26:08,250 Penseu en qualsevol funció que s'espera que torni un nombre enter. 299 00:26:11,250 --> 00:26:17,880 Suposem que aquesta funció ha de comptar el nombre de línies en un arxiu o alguna cosa. 300 00:26:17,880 --> 00:26:23,490 En circumstàncies normals, es passa a aquesta funció un arxiu 301 00:26:23,490 --> 00:26:27,120 i que va a tornar un nombre sencer que representa el nombre de línies. 302 00:26:27,120 --> 00:26:30,820 Així que 0 és un nombre perfectament raonable si l'arxiu és només buit. 303 00:26:30,820 --> 00:26:36,810 Però el que si se li passa un arxiu no vàlid i la funció passa a retornar false 304 00:26:36,810 --> 00:26:38,860 si se li passa un arxiu no vàlid? 305 00:26:38,860 --> 00:26:46,500 Si vostè acaba de fer == no està diferenciant així entre l'arxiu invàlid i arxiu buit. 306 00:26:48,870 --> 00:26:51,350 Utilitzeu sempre. === 307 00:26:55,690 --> 00:26:58,000 Això és tot d'ells. 308 00:26:58,000 --> 00:27:01,660 >> En PHP, el tipus de matriu és diferent del que estem acostumats a C. 309 00:27:01,660 --> 00:27:06,650 De fet, és possible que ja han donat compte d'això anteriorment, quan es va adonar que això és de tipus array. 310 00:27:06,650 --> 00:27:15,640 La sintaxi de suport és nou a partir de PHP 5.4, que és la nova versió de PHP. 311 00:27:15,640 --> 00:27:36,960 Abans d'això, sempre havia d'escriure array ('a' -> 1, 'b' -> 2. 312 00:27:36,960 --> 00:27:41,160 Aquest va ser el constructor d'una matriu. 313 00:27:41,160 --> 00:27:45,950 Ara PHP per fi es va decidir a la sintaxi agradable de tot just entre claudàtors, 314 00:27:45,950 --> 00:27:50,900 que és simplement molt millor que la matriu. 315 00:27:50,900 --> 00:27:54,480 Però tenint en compte PHP 5/4 és la versió més recent, 316 00:27:54,480 --> 00:27:59,090 pot trobar llocs que no tenen ni tan sols PHP 5.3. 317 00:27:59,090 --> 00:28:08,220 Durant l'estiu ens trobem amb aquest problema al PHP 5.3 era el que teníem en l'aparell, 318 00:28:08,220 --> 00:28:14,480 però el servidor que despleguem tota la nostra llibreta de qualificacions i presentar i totes aquestes coses a 319 00:28:14,480 --> 00:28:16,750 PHP va ser 5,4. 320 00:28:16,750 --> 00:28:23,060 Sense saber això, es va desenvolupar en el 5,3, empènyer a 5,4, 321 00:28:23,060 --> 00:28:25,660 i ara, de sobte res del nostre codi funciona 322 00:28:25,660 --> 00:28:28,680 perquè allí va passar a haver estat els canvis entre 5,3 i 5,4 323 00:28:28,680 --> 00:28:31,030 que no són compatibles, 324 00:28:31,030 --> 00:28:35,770 i hem d'anar a arreglar totes les nostres coses que no funcionen per PHP 5.4. 325 00:28:39,210 --> 00:28:42,320 Per aquesta classe, ja que l'aparell té PHP 5.4, 326 00:28:42,320 --> 00:28:45,490 és perfectament possible utilitzar claudàtors. 327 00:28:47,240 --> 00:28:50,440 Però si vostè està mirant les coses a Internet, 328 00:28:50,440 --> 00:28:54,880 si vostè està buscant algun tipus de material de matriu, més probable és que vostè va a veure 329 00:28:54,880 --> 00:29:02,020 l'encanteri fora sintaxi array constructor des que ha existit des de PHP va néixer 330 00:29:02,020 --> 00:29:07,340 i la sintaxi de claudàtors ha estat durant els últims dos mesos 331 00:29:07,340 --> 00:29:10,020 o quan es va acostar 5,4. 332 00:29:10,020 --> 00:29:12,710 Aquesta és la forma d'índex. 333 00:29:12,710 --> 00:29:30,610 Igual que en C com ho faria amb índex entre claudàtors com $ array [0], $ array [1], $ array [2], 334 00:29:30,610 --> 00:29:36,320 que l'índex de la mateixa manera si li passa que té els seus índexs ser cadenes. 335 00:29:36,320 --> 00:29:40,440 Així que $ array ['a'] i $ array ['b']. 336 00:29:40,440 --> 00:29:47,410 $ Array [b]. Per què seria dolent? 337 00:29:52,490 --> 00:29:59,870 Probablement va a generar una advertència, però encara funcionen. PHP tendeix a fer això. 338 00:29:59,870 --> 00:30:04,890 Tendeix a poc: "Jo et vaig a advertir sobre això, però jo només vaig a seguir endavant 339 00:30:04,890 --> 00:30:07,550 "I fer tot el que pugui". 340 00:30:07,550 --> 00:30:11,500 És probable que traduir això a una cadena, 341 00:30:11,500 --> 00:30:15,000 però és possible que en algun moment en el passat algú va dir 342 00:30:15,000 --> 00:30:20,180 b definir com 'Hola Món'. 343 00:30:20,180 --> 00:30:28,740 Així que ara b podria ser una constant de matriu i $ [b] en realitat farà 'hola món'. 344 00:30:28,740 --> 00:30:32,380 Crec que en aquest punt, o si més no la nostra configuració de PHP, 345 00:30:32,380 --> 00:30:37,870 si tractes d'índex en una matriu i que la clau no existeix, es produirà un error. 346 00:30:37,870 --> 00:30:40,150 Jo no crec que sigui només un advertiment. 347 00:30:40,150 --> 00:30:44,560 O almenys vostè pot configurar perquè no només t'adverteixo que no només cap amunt. 348 00:30:44,560 --> 00:30:49,290 >> La forma de comprovar si realment existeix aquest índex és isset. 349 00:30:49,290 --> 00:30:54,690 Així isset ($ array ['hola món']) retorna fals. 350 00:30:54,690 --> 00:30:59,160 isset ($ array ['b']) retorna veritable. 351 00:31:06,830 --> 00:31:09,880 Vostè pot barrejar aquestes sintaxi. 352 00:31:15,060 --> 00:31:22,440 Estic bastant segur del que aquesta matriu acabaria sent és - Podem provar-ho. 353 00:31:43,290 --> 00:31:45,700 Oh, necessito PHPWord. 354 00:31:53,960 --> 00:32:00,260 Això és barrejar la sintaxi on s'especifica quina és la clau 355 00:32:00,260 --> 00:32:03,330 i no s'especifica quina és la clau. 356 00:32:03,330 --> 00:32:05,520 Així que aquí 3 és un valor. 357 00:32:05,520 --> 00:32:08,080 No ha dit explícitament quina és la seva clau serà. 358 00:32:08,080 --> 00:32:11,670 Què et sembla la clau serà? 359 00:32:11,670 --> 00:32:21,410 [Estudiant] 0. >> Suposo 0 només perquè és la primera que no s'ha especificat. 360 00:32:21,410 --> 00:32:23,500 De fet, podem fer un parell d'aquests casos. 361 00:32:23,500 --> 00:32:28,030 Així és print_r imprimir recursiva. S'imprimirà tota la matriu. 362 00:32:28,030 --> 00:32:32,700 Seria imprimir submatrius de la matriu si n'hi ha. 363 00:32:32,700 --> 00:32:36,630 Així print_r ($ array); php.test.php. 364 00:32:36,630 --> 00:32:38,810 S'assembla a ella li donava 0. 365 00:32:38,810 --> 00:32:43,530 De fet, hi ha alguna cosa a tenir en compte aquí, però ens posarem en contacte amb ell en un segon. 366 00:32:43,530 --> 00:32:45,850 Però el que si se m'acut fer aquest índex 1? 367 00:32:45,850 --> 00:32:51,170 PHP no fa diferència entre els índexs de cadenes i índexs sencers, 368 00:32:51,170 --> 00:33:00,280 el que en aquest moment m'acaba de definir un índex 1 i puc fer les dues coses array $ [1] i $ array [1 "] 369 00:33:00,280 --> 00:33:06,250 i serà el mateix índex i la mateixa clau. 370 00:33:06,250 --> 00:33:13,000 I ara què creu vostè que 3 serà? >> [Estudiant] 2. >> [Bowden] Estic endevinant 2. 371 00:33:16,000 --> 00:33:18,690 Si. Són les 2. 372 00:33:18,690 --> 00:33:24,790 Què passaria si féssim això és 10, això és 4? Què et sembla l'índex de 3 serà? 373 00:33:27,360 --> 00:33:29,110 Estic pensant en 11. 374 00:33:29,110 --> 00:33:33,060 La meva conjectura pel que fa al que fa PHP - i crec que ho he vist abans - 375 00:33:33,060 --> 00:33:39,760 es tracta simplement d'un seguiment del que el major índex numèric que ha utilitzat fins ara és. 376 00:33:39,760 --> 00:33:44,230 Mai va a assignar un índex de la cadena a 3. Sempre serà un índex numèric. 377 00:33:44,230 --> 00:33:47,690 Per tant, segueix la pista de la més alta està assignada fins ara, que passa a ser 10, 378 00:33:47,690 --> 00:33:52,540 i que donarà 11 a 3. 379 00:33:52,540 --> 00:34:02,110 El que vaig dir abans, observi la manera com s'està imprimint aquesta matriu. 380 00:34:02,110 --> 00:34:06,850 Imprimeix clau 10, clau 4, clau 11, tecla d. 381 00:34:06,850 --> 00:34:09,790 Ni tan sols farem - 382 00:34:15,760 --> 00:34:22,489 Suposo que no va posar un 0, però és la impressió 1, 2, 3, 4. 383 00:34:22,489 --> 00:34:29,330 Què passa si em canvi aquí? O anem a canviar realment aquests 2. 384 00:34:29,330 --> 00:34:31,940 Ara s'imprimeix 2, 1, 3, 4. 385 00:34:31,940 --> 00:34:41,270 Arrays de PHP no són com tu taula hash regular. 386 00:34:41,270 --> 00:34:45,570 És perfectament raonable pensar-hi com taules hash 99% de les vegades. 387 00:34:45,570 --> 00:34:53,790 Però en les taules de hash no té sentit de l'ordre en què les coses es van inserir. 388 00:34:53,790 --> 00:34:56,639 Així que tan aviat com s'insereix en la taula hash, 389 00:34:56,639 --> 00:35:00,590 assumir que no hi ha llista enllaçada i es podia jutjar dins d'una llista enllaçada 390 00:35:00,590 --> 00:35:03,980 que es va inserir primer. 391 00:35:03,980 --> 00:35:10,060 Però aquí inserim 2 primer i sap quan està imprimint aquesta matriu que 2 és el primer. 392 00:35:10,060 --> 00:35:13,090 No imprimir en qualsevol ordre. 393 00:35:13,090 --> 00:35:17,550 L'estructura de dades tècniques que s'està utilitzant és un mapa ordenat, 394 00:35:17,550 --> 00:35:24,690 pel que mapeja claus als valors i recorda l'ordre en què les claus s'insereixen. 395 00:35:24,690 --> 00:35:31,600 Bàsicament es tracta que algunes de les complicacions en què és realment molest - 396 00:35:31,600 --> 00:35:34,510 Diguem que vostè té una matriu 0, 1, 2, 3, 4, 5 397 00:35:34,510 --> 00:35:37,700 i vol treure índex 2. 398 00:35:37,700 --> 00:35:47,750 Una forma de fer-ho, anem a veure el que sembla. 399 00:35:47,750 --> 00:35:50,410 0, 2, 1, 3, 4. 400 00:35:50,410 --> 00:35:54,880 Desactivar passa a desarmar les dues variables i índexs de matriu. 401 00:35:54,880 --> 00:35:58,630 Així unset ($ array [2]); 402 00:35:58,630 --> 00:36:03,430 Ara, què és això semblarà? 2 és només passat, de manera que està perfectament bé. 403 00:36:03,430 --> 00:36:11,670 Més molest és que si vols que les coses siguin realment com una matriu. 404 00:36:11,670 --> 00:36:14,910 Vaig a posar nombres a l'atzar. 405 00:36:14,910 --> 00:36:20,400 Ara fixeu-vos en els meus índexs. 406 00:36:20,400 --> 00:36:26,860 Jo vull que sigui com una matriu C, on es passa de 0 a length - 1 407 00:36:26,860 --> 00:36:30,810 i puc iterar sobre ella com a tal. 408 00:36:30,810 --> 00:36:38,520 Però tan bon punt desarmar el segon índex, el que havia en l'índex 3 no convertit índex 2. 409 00:36:38,520 --> 00:36:44,790 En el seu lloc, només elimina aquest índex i ara te'n vas 0, 1, 3, 4. 410 00:36:44,790 --> 00:36:48,740 Això és perfectament raonable. 411 00:36:48,740 --> 00:36:53,950 És només una molèstia i cal fer coses com entroncament matriu. Si. 412 00:36:53,950 --> 00:36:57,200 >> [Estudiant] Què passaria si tinguessis un bucle for 413 00:36:57,200 --> 00:36:59,630 i que volia revisar tots els elements? 414 00:36:59,630 --> 00:37:02,290 Quan va colpejar dos, seria cedir mai? 415 00:37:02,290 --> 00:37:10,150 Iteració sobre una matriu. Hi ha dues maneres en què pot fer-ho. 416 00:37:10,150 --> 00:37:12,770 Podeu utilitzar un bucle for normal. 417 00:37:12,770 --> 00:37:22,000 Aquesta és una altra complexitat de PHP. 418 00:37:22,000 --> 00:37:27,420 La majoria dels idiomes, jo diria, tenir algun tipus de longitud o llengua o alguna cosa 419 00:37:27,420 --> 00:37:30,470 indica la longitud d'una matriu. 420 00:37:30,470 --> 00:37:32,820 En PHP és comte. 421 00:37:32,820 --> 00:37:36,160 Així count ($ array) $ i +) + 422 00:37:36,160 --> 00:37:42,950 Anem a print ($ array [$ i]); 423 00:37:45,920 --> 00:37:48,820 Notice: Undefined offset: 2. 424 00:37:48,820 --> 00:37:51,610 És només fallarà. 425 00:37:51,610 --> 00:38:03,020 Aquesta és la raó per la qual, en la seva major part, no és necessari per iterar sobre una matriu d'aquesta manera. 426 00:38:03,020 --> 00:38:07,110 Pot ser que sigui una exageració, però que mai necessitat d'iterar sobre un arranjament com aquest 427 00:38:07,110 --> 00:38:19,410 pel fet que PHP ofereix una sintaxi foreach on foreach ($ array com $ item). 428 00:38:19,410 --> 00:38:31,830 Ara bé, si imprimir ($ item); - ens tornarem parlar-ne en un segon - que funciona perfectament bé. 429 00:38:31,830 --> 00:38:38,960 La manera com està treballant foreach és el primer argument és la matriu que s'està interactuant sobre. 430 00:38:38,960 --> 00:38:44,060 I el segon argument, tema, a través de cada pas del bucle for 431 00:38:44,060 --> 00:38:52,690 que prendrà el següent pas en la matriu. Així que recorda que la matriu té una ordre. 432 00:38:52,690 --> 00:38:55,690 La primera vegada que el bucle for, el punt serà 123 433 00:38:55,690 --> 00:38:59,540 llavors serà 12 llavors serà 13 llavors serà 23 llavors serà 213. 434 00:38:59,540 --> 00:39:04,670 Les coses es posen realment estrany quan fas alguna cosa com foreach. 435 00:39:04,670 --> 00:39:07,480 Anem a veure què passa, perquè vostè mai ha de fer això. 436 00:39:07,480 --> 00:39:13,320 Què passaria si unset ($ array [1]); 437 00:39:20,410 --> 00:39:26,030 Això probablement s'esperava. 438 00:39:26,030 --> 00:39:30,950 Ets iterar sobre aquesta matriu, i cada vegada que estiguis desarmat el primer índex. 439 00:39:30,950 --> 00:39:39,720 Així que per l'índex 0, el primer element, pren el valor 0, així que serà 123. 440 00:39:39,720 --> 00:39:44,630 Però dins del bucle for ens unset índex 1, el que significa que 12 s'han anat. 441 00:39:44,630 --> 00:39:57,480 Així imprimir. PHP_EOL. 442 00:39:57,480 --> 00:40:03,580 PHP_EOL és sol salt de línia, però és tècnicament més fàcils de transportar 443 00:40:03,580 --> 00:40:08,890 des salts de línia en Windows és diferent de salts de línia en Mac i UNIX. 444 00:40:08,890 --> 00:40:18,040 En Windows nova línia és \ r \ n, mentre que a tot arreu es tendeix per estar \ n. 445 00:40:18,040 --> 00:40:25,150 PHP_EOL està configurat per utilitzar qualsevol que sigui la nova línia del seu sistema. 446 00:40:25,150 --> 00:40:29,310 Així que imprimir. No cal print_r ($ array) al final. 447 00:40:32,830 --> 00:40:37,390 No tenia ni idea que aquest seria el comportament. 448 00:40:41,740 --> 00:40:48,960 Article encara pren el valor 12 a pesar que desarmar 12 abans que alguna vegada va arribar-hi des de la matriu. 449 00:40:52,770 --> 00:40:58,840 No prengui la meva paraula en això, però sembla que foreach crea una còpia de la matriu 450 00:40:58,840 --> 00:41:02,160 i article assumeix tots els valors d'aquesta còpia. 451 00:41:02,160 --> 00:41:07,760 Així que fins i tot si es modifica la matriu dins del bucle for, 452 00:41:07,760 --> 00:41:17,240 no li importarà. L'article serà enfrontar-se als valors originals. 453 00:41:17,240 --> 00:41:19,240 Tractarem de desarmar aquesta. 454 00:41:19,240 --> 00:41:24,460 I si això és $ array [1] = "hola"; 455 00:41:24,460 --> 00:41:31,770 Tot i que posar "hola" a la matriu, mai tema es té en aquest valor. 456 00:41:31,770 --> 00:41:37,430 Hi ha una altra sintaxi per foreach bucles 457 00:41:37,430 --> 00:41:45,900 on poses 2 variables separades per una fletxa. 458 00:41:45,900 --> 00:41:49,680 Aquesta primera variable serà la clau d'aquest valor, 459 00:41:49,680 --> 00:41:53,050 i aquesta segona variable serà el article exacte mateix. 460 00:41:53,050 --> 00:42:01,610 Això no és interessant aquí, però si tornem al nostre cas original de 'a' - 1>, 461 00:42:01,610 --> 00:42:06,090 'B' -> 1, 462 00:42:06,090 --> 00:42:14,470 aquí si simplement iterar per a cada matriu com element, element que serà una cada vegada. 463 00:42:14,470 --> 00:42:18,170 Però si a més volem que coneguin la clau associada a aquest tema 464 00:42:18,170 --> 00:42:25,230 llavors fem com $ key -> $ item. 465 00:42:25,230 --> 00:42:31,980 Així que ara podem fer print ($ key. ':'. 466 00:42:31,980 --> 00:42:39,380 Ara s'està iterant sobre i imprimir cada clau i el seu valor associat. 467 00:42:39,380 --> 00:42:47,030 >> Una cosa addicional que podem fer en bucles foreach és que veu aquesta sintaxi. 468 00:42:47,030 --> 00:42:54,770 Ampersands abans dels noms de variables tendeixen a ser com PHP fa referències. 469 00:42:54,770 --> 00:43:00,460 On les referències són molt similars als punters, 470 00:43:00,460 --> 00:43:04,820 vostè no té punters, de manera que mai ocupar-se de memòria directament. 471 00:43:04,820 --> 00:43:12,620 Però tenim referències on 1 variable es refereix a la mateixa cosa com una altra variable. 472 00:43:12,620 --> 00:43:21,450 Dins d'aquí que farem $ item. Tornem a 1, 10. 473 00:43:21,450 --> 00:43:28,800 Fem $ item + +; Que encara existeix en PHP. Vostè encara pot fer + +. 474 00:43:28,800 --> 00:43:38,260 php.test.php. He de imprimir. print_r ($ array); 475 00:43:38,260 --> 00:43:42,730 S'imprimeixen 2, 11. 476 00:43:42,730 --> 00:43:49,560 Si jo acabava de fer foreach ($ array com $ item) llavors ítem serà el valor 1 477 00:43:49,560 --> 00:43:54,190 la primera vegada a través del bucle. S'incrementarà 1 a 2 i després ja està. 478 00:43:54,190 --> 00:43:57,260 Així que llavors passarà a través de la segona passada del bucle i que el tema és de 10. 479 00:43:57,260 --> 00:44:01,570 S'incrementa l'article a la 11, i després que acaba de llençar. 480 00:44:01,570 --> 00:44:06,670 Després print_r ($ array), i els veurem que això és només una de 10. 481 00:44:06,670 --> 00:44:09,070 Així, l'increment que vam fer va ser perdut. 482 00:44:09,070 --> 00:44:13,410 Però foreach ($ array com & $ item) 483 00:44:13,410 --> 00:44:21,910 ara aquest article és el mateix article com aquest aquí. És la mateixa cosa. 484 00:44:21,910 --> 00:44:26,820 Llavors, $ item + + és la modificació de matriu 0. 485 00:44:29,330 --> 00:44:41,850 Bàsicament, vostè també pot fer $ k -> array $ item i vostè pot fer $ [$ k] + +; 486 00:44:41,850 --> 00:44:48,650 >> Així que una altra manera de fer això, tenim la llibertat de modificar el punt, 487 00:44:48,650 --> 00:44:54,070 però això no modificarà la nostra matriu original. 488 00:44:54,070 --> 00:44:59,720 Però si utilitzem k, que és la clau, llavors podem simplement índex al nostre array usant aquesta clau 489 00:44:59,720 --> 00:45:01,530 i d'incrementar. 490 00:45:01,530 --> 00:45:05,410 Això més directament modifica la nostra matriu original. 491 00:45:05,410 --> 00:45:10,690 Vostè pot fins i tot fer que si per alguna raó vostè volia que la capacitat de modificar - 492 00:45:10,690 --> 00:45:13,510 En realitat, això és perfectament raonable. 493 00:45:13,510 --> 00:45:16,020 No vol haver d'escriure $ array [$ k] + +, 494 00:45:16,020 --> 00:45:27,890 que només volia escriure $ item + + però encara volia dir if ($ k === 'a') 495 00:45:27,890 --> 00:45:30,620 després incrementar article i després imprimir la nostra matriu. 496 00:45:30,620 --> 00:45:36,290 I ara què és el que esperem print_r fer? Quins valors s'han d'imprimir? 497 00:45:36,290 --> 00:45:43,770 [Estudiant] 2 i 10. >> [Bowden] Només si la clau era 'a' és el que realment imprimir això. 498 00:45:51,940 --> 00:45:55,670 >> És probable que molt poques vegades, o mai, cal definir funcions en PHP, 499 00:45:55,670 --> 00:46:03,370 però potser veureu alguna cosa similar en el qual es defineix una funció com qualsevol funció. 500 00:46:03,370 --> 00:46:09,900 En general, vostè diria ($ foo, $ bar) i després definir que sigui el que sigui. 501 00:46:09,900 --> 00:46:17,580 Però si faig això, llavors això vol dir que tot el que demana el que sigui, 502 00:46:17,580 --> 00:46:25,110 l'anomena baz, de manera que el primer argument passat al baz es pot canviar. 503 00:46:25,110 --> 00:46:38,100 Fem $ foo + +; 504 00:46:38,100 --> 00:46:48,020 ia l'interior d'aquí farem baz ($ item); 505 00:46:48,020 --> 00:46:52,250 Ara estem cridant a una funció. 506 00:46:52,250 --> 00:46:56,780 L'argument es pren com a referència, el que significa que si ho modificar 507 00:46:56,780 --> 00:47:00,390 estem modificant el que s'ha passat polz 508 00:47:00,390 --> 00:47:04,420 I aquesta impressió s'espera - si no vaig ficar la pota sintaxi - ens van donar 2, 11, 509 00:47:04,420 --> 00:47:06,300 de manera que s'incrementa realment. 510 00:47:06,300 --> 00:47:08,790 Notificació necessitem referències en 2 llocs. 511 00:47:08,790 --> 00:47:13,050 Què passa si ho va fer? Què vol dir això? 512 00:47:13,050 --> 00:47:15,810 [Estudiant] Es canviarà. Sí >>. 513 00:47:15,810 --> 00:47:18,290 L'article és simplement una còpia del valor de la matriu. 514 00:47:18,290 --> 00:47:26,670 Així element canvia a 2, però la matriu ['a'] encara serà 1. 515 00:47:26,670 --> 00:47:32,560 O què si ho faig? 516 00:47:32,560 --> 00:47:39,260 Ara element s'envia una còpia a baz. 517 00:47:39,260 --> 00:47:46,330 Així que la còpia de l'argument s'incrementa a 2, 518 00:47:46,330 --> 00:47:49,240 però el tema en si mateix mai va ser incrementat a 2. 519 00:47:49,240 --> 00:47:52,880 I el tema és el mateix que la matriu de suport que sigui, 520 00:47:52,880 --> 00:47:55,380 de manera que mai matriu es va incrementar. 521 00:47:55,380 --> 00:47:57,960 Així que aquests dos llocs que necessiti. 522 00:47:57,960 --> 00:48:03,830 >> PHP és en general bastant intel · ligent sobre això. 523 00:48:03,830 --> 00:48:06,570 Es podria pensar que vull passar per referència - 524 00:48:06,570 --> 00:48:09,560 Això era realment una pregunta d'un dels conjunts de processadors. 525 00:48:09,560 --> 00:48:14,480 Era una cosa Questions.txt on diu: 526 00:48:14,480 --> 00:48:19,280 Per què voldria passar aquesta estructura per referència? 527 00:48:19,280 --> 00:48:21,250 Quina va ser la resposta? 528 00:48:21,250 --> 00:48:25,100 [Estudiant] Així que vostè no ha de copiar alguna cosa gran. Sí >>. 529 00:48:25,100 --> 00:48:32,920 Una estructura pot ser arbitràriament gran, i quan es passa l'estructura com a argument 530 00:48:32,920 --> 00:48:36,800 ha de copiar aquesta estructura sencera per passar a la funció, 531 00:48:36,800 --> 00:48:40,410 mentre que si vostè només ha de passar l'estructura per referència 532 00:48:40,410 --> 00:48:46,530 a continuació, només ha de copiar una adreça de 4 bytes a l'argument de la funció. 533 00:48:48,520 --> 00:48:52,320 PHP és una mica més intel · ligent que això. 534 00:48:52,320 --> 00:49:00,650 Si tinc alguna funció i pas a un conjunt de 1.000 les coses, 535 00:49:00,650 --> 00:49:03,990 ¿Això vol dir que haurà de copiar tots 1.000 de aquestes coses 536 00:49:03,990 --> 00:49:10,450 per passar a la funció? No ha de fer-ho immediatament. 537 00:49:10,450 --> 00:49:15,940 Si dins d'aquesta funció en realitat mai modifica foo, 538 00:49:15,940 --> 00:49:22,660 així if ($ foo === 'hola') retornarà true.; 539 00:49:22,660 --> 00:49:26,460 Tingueu en compte que en realitat mai va modificar l'interior argument d'aquesta funció, 540 00:49:26,460 --> 00:49:30,010 el que significa que tot el que s'usa per a mai foo ha de copiar 541 00:49:30,010 --> 00:49:32,100 perquè no ho està modificant. 542 00:49:32,100 --> 00:49:39,240 Així que la forma PHP obres són els arguments es passen sempre per referència 543 00:49:39,240 --> 00:49:42,170 fins que realment tractar de modificar-lo. 544 00:49:42,170 --> 00:49:51,160 Ara bé, si per exemple $ foo + + i passarà a fer una còpia de l'original foo i modificar la còpia. 545 00:49:51,160 --> 00:49:53,090 Això estalvia algun temps. 546 00:49:53,090 --> 00:49:58,210 Si mai estàs tocant aquest arsenal massiu, mai en realitat el modifica, 547 00:49:58,210 --> 00:50:02,360 no és necessari per fer la còpia, 548 00:50:02,360 --> 00:50:06,640 mentre que si només cal posar aquest signe que significa que ni tan sols copiar 549 00:50:06,640 --> 00:50:08,640 fins i tot si vostè el modifica. 550 00:50:08,640 --> 00:50:10,680 Aquest comportament s'anomena copy-on-write. 551 00:50:10,680 --> 00:50:17,380 El veurà en altres llocs, sobretot si vostè pren un curs del sistema operatiu. 552 00:50:17,380 --> 00:50:23,880 Copy-on-write és un patró bastant usual en què no cal fer una còpia d'alguna cosa 553 00:50:23,880 --> 00:50:26,650 llevat que s'hagi canviat realment. Si. 554 00:50:26,650 --> 00:50:29,520 [Estudiant] Què passa si vostè tenia l'increment dins de la prova, 555 00:50:29,520 --> 00:50:33,700 tan sols 1 element de 1.000 hauria de ser canviat? 556 00:50:33,700 --> 00:50:38,770 No estic segur. 557 00:50:38,770 --> 00:50:51,250 Crec que seria copiar tota la cosa, però és possible que és prou intel · ligent com això - 558 00:50:51,250 --> 00:51:00,020 En realitat, el que estic pensant és imaginar que tenia una sèrie que són aquestes: $ matriz2 = [ 559 00:51:00,020 --> 00:51:11,000 Llavors 'a' índex és una matriu de [1 2 3 4], i l'índex de 'b' és una matriu del que sigui. 560 00:51:11,000 --> 00:51:15,380 Necessito comes entre tots ells. Imagina que no hi ha comes. 561 00:51:15,380 --> 00:51:21,210 Llavors 'c' és el valor 3. 562 00:51:24,210 --> 00:51:26,290 Bé. 563 00:51:26,290 --> 00:51:33,440 Ara diguem que fem $ baz ($ matriz2); 564 00:51:33,440 --> 00:51:36,540 on baz no considera aquesta per referència. 565 00:51:43,510 --> 00:51:47,370 Així que $ foo ['c'] + +; 566 00:51:47,370 --> 00:51:52,340 Aquest és un exemple en el qual s'usa per al'argument matriz2 567 00:51:52,340 --> 00:51:57,010 i després s'està modificant un índex específic de la matriu incrementant. 568 00:51:57,010 --> 00:52:01,090 Honestament no tinc idea del que PHP farà. 569 00:52:01,090 --> 00:52:07,200 Es pot fer fàcilment una còpia de tota la cosa, però si és intel · ligent, 570 00:52:07,200 --> 00:52:15,030 es farà una còpia d'aquestes claus on aquesta tindrà el seu valor diferent 571 00:52:15,030 --> 00:52:20,620 però això encara pot apuntar a la mateixa matriu 1,2,3,4 572 00:52:20,620 --> 00:52:22,320 i això encara pot apuntar a aquesta matriu. 573 00:52:22,320 --> 00:52:24,170 Vaig iPad ella. 574 00:52:28,900 --> 00:52:45,950 Passem en aquesta matriu on aquest noi a 3 punts, això apunta a guy [1,2,3,4], 575 00:52:45,950 --> 00:52:51,350 aquest noi apunta [34, ...] 576 00:52:51,350 --> 00:52:58,590 Ara que ho estem passant a baz, estem modificant això. 577 00:52:58,590 --> 00:53:03,550 Si PHP és intel · ligent, només pot fer - 578 00:53:11,850 --> 00:53:18,230 Encara havia de copiar una mica de memòria, però si no hagués aquests subconjunts niats enormes 579 00:53:18,230 --> 00:53:21,560 no necessitem fer-ne les. 580 00:53:21,560 --> 00:53:27,530 No sé si això és el que fa, però m'imagino fent això. 581 00:53:29,050 --> 00:53:36,690 Això també és un avantatge molt gran de C sobre PHP. 582 00:53:36,690 --> 00:53:40,320 >> PHP fa la vida molt més fàcil per a un munt de coses, 583 00:53:40,320 --> 00:53:45,060 però quin tipus de tenir la més mínima idea de com es durà a terme 584 00:53:45,060 --> 00:53:52,530 perquè no tinc ni idea de per sota de la caputxa quan es tracta de fer aquestes còpies de les coses, 585 00:53:52,530 --> 00:53:55,170 oh, és que serà una còpia constant de temps, 586 00:53:55,170 --> 00:54:01,140 és només canviarà un punter, és que serà una còpia lineal ridículament difícil? 587 00:54:01,140 --> 00:54:03,000 I si no pot trobar l'espai? 588 00:54:03,000 --> 00:54:06,760 Té llavors d'executar la recollida d'escombraries per obtenir espai una mica més? 589 00:54:06,760 --> 00:54:11,210 I la recollida d'escombraries pot prendre arbitràriament llarg. 590 00:54:11,210 --> 00:54:13,600 En C no ha de preocupar per aquestes coses. 591 00:54:13,600 --> 00:54:19,780 Cada línia que s'escriu pot raonar més o menys sobre com es va a realitzar. 592 00:54:26,800 --> 00:54:29,150 >> Anem a mirar cap enrere en aquests. 593 00:54:35,400 --> 00:54:37,520 Que bo és que no has de lluitar amb les funcions hash, 594 00:54:37,520 --> 00:54:39,010 llistes enllaçades, ni res d'això? 595 00:54:39,010 --> 00:54:41,980 Des que treballem amb taules hash és tan fàcil ara, heus aquí un trencaclosques divertit per treballar. 596 00:54:41,980 --> 00:54:45,920 Obriu un arxiu anomenat unique.php i hi escriu un programa PHP 597 00:54:45,920 --> 00:54:48,330 (També conegut com un "script"). 598 00:54:48,330 --> 00:54:55,700 Tendim a cridar els scripts si són coses curtes que s'executen en la línia d'ordres. 599 00:54:55,700 --> 00:55:02,950 Bàsicament, qualsevol llenguatge que no compila però vas a executar l'arxiu executable 600 00:55:02,950 --> 00:55:05,920 en la línia de comandes, pot trucar a aquest script executable. 601 00:55:05,920 --> 00:55:08,510 Jo podria molt bé escriure un programa en C que fa això, 602 00:55:08,510 --> 00:55:12,300 però jo no en dic un script des de la primera vegada que compili i executeu el fitxer binari. 603 00:55:12,300 --> 00:55:15,480 Però aquest programa PHP que anomenarem a un script. 604 00:55:15,480 --> 00:55:23,830 O si ho escrivim en Python o Perl o Node.js o qualsevol d'aquestes coses, 605 00:55:23,830 --> 00:55:26,500 ens diem tots els scripts perquè s'executen en la línia d'ordres 606 00:55:26,500 --> 00:55:30,040 però no Debian. 607 00:55:30,860 --> 00:55:33,400 Podem fer això amb bastant rapidesa. 608 00:55:36,960 --> 00:55:41,480 No utilitzarem argv. Anem a volar a través d'això. 609 00:55:41,480 --> 00:55:45,730 Llámelo únic, escriure un programa. 610 00:55:45,730 --> 00:55:49,400 Es pot suposar que l'entrada contindrà una paraula per línia. 611 00:55:49,400 --> 00:55:52,020 En realitat, argv serà bastant trivial d'usar. 612 00:56:03,730 --> 00:56:06,720 unique.php. 613 00:56:08,550 --> 00:56:13,750 Primer el primer, volem comprovar si se'ns ha passat un argument de línia d'ordres. 614 00:56:13,750 --> 00:56:20,900 Tal com era d'esperar argc i argv al carrer, tenim encara els de PHP. 615 00:56:20,900 --> 00:56:33,900 Així que si ($ argc! == 2) llavors no tractaré d'imprimir un missatge o alguna cosa així. 616 00:56:33,900 --> 00:56:37,340 Vaig a sortir, el codi d'error de 1. 617 00:56:37,340 --> 00:56:41,340 També vaig poder tornar 1. 618 00:56:41,340 --> 00:56:53,180 Poques vegades en PHP que es troben en aquest estat on estem - 619 00:56:53,180 --> 00:56:57,820 En general, vostè està en una funció anomenada per una funció anomenada per una funció anomenada per una funció. 620 00:56:57,820 --> 00:57:02,070 I si alguna cosa surt malament i el que desitja és sortir tot del tot, 621 00:57:02,070 --> 00:57:05,680 sortida just acaba el programa. 622 00:57:05,680 --> 00:57:08,160 Això també existeix en C. 623 00:57:08,160 --> 00:57:10,700 Si estàs en una funció en una funció en una funció en una funció 624 00:57:10,700 --> 00:57:17,540 i vol matar només el programa, pot trucar a la sortida i sortirà sol. 625 00:57:17,540 --> 00:57:23,120 Però en PHP és encara més estrany que ens trobem en aquest nivell superior. 626 00:57:23,120 --> 00:57:26,090 En general, estem dins d'algun tipus de funció, pel que anomenem sortida 627 00:57:26,090 --> 00:57:29,650 perquè no hagi de tornar a una cosa que s'adona que hi ha un error 628 00:57:29,650 --> 00:57:32,270 de manera que si torna fins que reconeix que va ser un error. 629 00:57:32,270 --> 00:57:35,270 No volem de lidiar amb això, així que sortir (1); 630 00:57:35,270 --> 00:57:38,240 retorn (1), en aquest cas seria equivalent. 631 00:57:38,240 --> 00:57:44,000 >> Llavors, què volem obrir volem fopen. 632 00:57:44,000 --> 00:57:46,760 Els arguments que es van a veure bastant similar. 633 00:57:46,760 --> 00:57:51,600 Volem fopen ($ argv [1], i volem obrir per a llegir. 634 00:57:51,600 --> 00:57:55,720 Retorna un recurs que anomenarem a f. 635 00:57:55,720 --> 00:58:02,180 Això es veu molt semblant a com ho fa C excepte que no has de dir * FILE. 636 00:58:02,180 --> 00:58:06,170 En el seu lloc, només dir $ f. Bé. 637 00:58:06,170 --> 00:58:17,190 En realitat, crec que fins i tot ens dóna una pista pel que fa a la funció de PHP anomenada arxiu. PHP File. 638 00:58:17,190 --> 00:58:23,990 El que això farà és llegir un arxiu sencer en una matriu. 639 00:58:23,990 --> 00:58:29,770 No tens necessitat de fopen ella. Es farà això per vostè. 640 00:58:37,450 --> 00:58:43,700 Així que $ línies = arxiu ($ argv [1]); 641 00:58:43,700 --> 00:58:49,680 Ara totes les línies de l'arxiu són a les línies. Ara volem ordenar les línies. 642 00:58:49,680 --> 00:58:52,180 Com podem classificar les línies? 643 00:58:52,180 --> 00:58:54,920 Ens ordenar les línies. 644 00:58:54,920 --> 00:58:58,080 I ara podem imprimir-les o el que sigui. 645 00:58:58,080 --> 00:59:05,580 Probablement la forma més fàcil és foreach ($ lines com $ line) echo $ line; 646 00:59:05,580 --> 00:59:10,960 [Estudiant] No ens fins i tot creuar les línies fent referència a alguna cosa a classe? 647 00:59:10,960 --> 00:59:28,850 Aquí és on l'espècie es definiria com una mena de funció (& $ array). 648 00:59:28,850 --> 00:59:32,650 Quan es crida a la funció que no passi per referència. 649 00:59:32,650 --> 00:59:36,900 És la funció que es defineix com a prenent com a referència. 650 00:59:36,900 --> 00:59:40,900 Això és en realitat exactament el que va sortir malament 651 00:59:40,900 --> 00:59:46,220 quan posem tot als nostres servidors quan vam anar 5,3-5,4. 652 00:59:46,220 --> 00:59:53,800 Fins 5,4, això era perfectament raonable. 653 00:59:53,800 --> 00:59:58,740 Una funció no té previst prendre com a referència, però es pot passar per referència 654 00:59:58,740 --> 01:00:02,860 així que si la funció es dóna a modificar, segueix sent modificat. 655 01:00:02,860 --> 01:00:05,850 A partir de 5,4, que no has de fer això. 656 01:00:05,850 --> 01:00:11,740 Així que ara l'única forma de passar per referència és si la funció explícita que fa. 657 01:00:11,740 --> 01:00:19,840 Si vostè no vol que el modifiqui, llavors vostè necessita per fer còpia $ = $ pass línies i còpia. 658 01:00:19,840 --> 01:00:24,820 Així que ara les línies es conservarà còpia i serà canviada. 659 01:00:27,670 --> 01:00:31,460 php.unique.php. Jo podria haver ficat alguna cosa. 660 01:00:31,460 --> 01:00:33,190 Inesperat 'espècie'. 661 01:00:38,320 --> 01:00:43,850 Serà alguna cosa que ho fa per nosaltres. 662 01:00:43,850 --> 01:00:45,820 Ni tan sols hi. 663 01:00:45,820 --> 01:00:52,140 Avís quan vostè llegeix el manual que el primer argument s'espera que sigui una matriu 664 01:00:52,140 --> 01:00:56,490 i es pren com a referència. 665 01:00:58,160 --> 01:01:03,540 Per què es queixen a mi? Perquè tinc aquesta espècie en funció encara aquí que no vull. 666 01:01:03,540 --> 01:01:09,210 Bé, php.unique.php. No em passa un argument perquè no tinc un arxiu. 667 01:01:09,210 --> 01:01:13,560 És php.unique.php a test.php. 668 01:01:13,560 --> 01:01:19,080 Aquí està test.php tots impresos en un ordre ben ordenats. 669 01:01:19,080 --> 01:01:24,600 Tingueu en compte que l'ordre establert és una mica estrany per a un arxiu de codi 670 01:01:24,600 --> 01:01:27,460 perquè totes les nostres línies en blanc serà el primer 671 01:01:27,460 --> 01:01:30,190 llavors vindran tots els nostres osques de nivell 1 672 01:01:30,190 --> 01:01:33,360 després vénen tots els nostres osques no. 673 01:01:33,360 --> 01:01:38,620 Si. >> [Estudiant] Així que el codi font no es passa per referència? 674 01:01:38,620 --> 01:01:42,240 És que generalment passa per valor? 675 01:01:42,240 --> 01:01:50,240 [Bowden] Quan es crida a una funció, mai es determina si es passen per referència. 676 01:01:50,240 --> 01:01:53,960 És la definició de la funció que determina si es passen per referència. 677 01:01:53,960 --> 01:01:59,450 I mirant a la definició de la funció de l'espècie, o simplement buscant en això, 678 01:01:59,450 --> 01:02:02,820 pren l'argument per referència. 679 01:02:02,820 --> 01:02:07,160 Així que, independentment de si desitja que es prengui com a referència, ho fa prendre com a referència. 680 01:02:07,160 --> 01:02:10,200 Es modifica la matriu en el seu lloc. 681 01:02:10,200 --> 01:02:17,400 Això no és només permesa. No té permís per fer-ho. >> [Estudiant] Oh, està bé. 682 01:02:17,400 --> 01:02:22,410 [Bowden] Això, més o menys es prendrà com a referència les línies i modificar-lo. 683 01:02:22,410 --> 01:02:26,850 I de nou, si vostè no vol que faci això, vostè pot fer una còpia de gènere. 684 01:02:26,850 --> 01:02:35,850 Fins i tot en aquest cas, la còpia no és realment una còpia de les línies. 685 01:02:35,850 --> 01:02:40,620 És només apunta al mateix fins que primer és modificat, 686 01:02:40,620 --> 01:02:44,430 on els primers van a modificar en la funció de classificació, 687 01:02:44,430 --> 01:02:50,940 on, perquè és copy-on-write, ara una còpia de l'exemplar que realitzarà. 688 01:02:57,500 --> 01:03:04,250 També pot fer això. Aquest és el lloc que vostè pot veure i comercial. 689 01:03:04,250 --> 01:03:07,190 Ho veus en els bucles foreach, el veus a la declaració de funcions, 690 01:03:07,190 --> 01:03:10,040 i ho veus quan l'assignació a variables. 691 01:03:10,040 --> 01:03:12,350 I nosaltres no hem fet res en fer això 692 01:03:12,350 --> 01:03:15,600 perquè la còpia i les línies són literalment la mateixa cosa. 693 01:03:15,600 --> 01:03:19,940 Vostè pot utilitzar les línies i copiar de manera intercanviable. 694 01:03:19,940 --> 01:03:25,430 Vostè pot fer unset ($ còpia), i que no les línies no definides, 695 01:03:25,430 --> 01:03:29,120 que acaba de perdre la seva referència al mateix. 696 01:03:29,120 --> 01:03:33,440 Així que a partir d'aquest punt, ara línies és l'única manera d'accedir a línies. 697 01:03:36,450 --> 01:03:38,770 >> Preguntes? 698 01:03:41,000 --> 01:03:42,460 Si. 699 01:03:42,460 --> 01:03:45,880 [Estudiant] completament fora de tema, però vostè no ha de tancar PHP amb la opció - >> No ho saps. 700 01:03:45,880 --> 01:03:47,730 Bé. 701 01:03:47,730 --> 01:03:53,790 [Bowden] Jo aniria tan lluny com per dir que és una mala pràctica per tancar. 702 01:03:53,790 --> 01:03:57,580 Això és probablement una exageració, sobretot en un script, 703 01:03:57,580 --> 01:04:03,740 però ja veurem què passa si faig això. 704 01:04:03,740 --> 01:04:08,890 Això no va fer res. Què passa si jo volia - [Sospira] 705 01:04:13,870 --> 01:04:16,960 He de passar un argument. 706 01:04:19,000 --> 01:04:22,050 Dispara. Vaig trucar malament. 707 01:04:24,340 --> 01:04:28,310 Així php.unique.php amb un argument. 708 01:04:28,310 --> 01:04:30,980 Ara ja no tens necessitat d'això. 709 01:04:34,520 --> 01:04:37,740 Vaig a passar un argument vàlid. 710 01:04:37,740 --> 01:04:42,050 Aquest imprès el que és la impressió. 711 01:04:45,260 --> 01:04:50,080 Estic imprimint còpia i la còpia no existeix. Així línies. 712 01:04:53,650 --> 01:04:58,270 S'imprimirà tot, i després es dóna compte tota aquesta brossa aquí baix, 713 01:04:58,270 --> 01:05:06,690 perquè en res PHP que es troba fora de les etiquetes PHP 714 01:05:06,690 --> 01:05:09,520 només voleu imprimir literalment. 715 01:05:09,520 --> 01:05:18,050 És per això que HTML, és tan bonic que puc fer div bla, bla, bla, classe o el que sigui, 716 01:05:18,050 --> 01:05:25,140 bla, bla, bla, i després fer una mica de codi PHP i llavors fer div fi. 717 01:05:25,140 --> 01:05:36,460 I ara això em fa l'efecte de la meva div bonic sobre de la tapa, tot el que PHP imprès, div a la part inferior. 718 01:05:36,460 --> 01:05:43,510 Desastrós quan passa alguna cosa com això, que és bastant comú, 719 01:05:43,510 --> 01:05:47,930 només una nova línia paràsita a la part inferior d'arxiu. 720 01:05:47,930 --> 01:05:50,940 No pensaria que seria tan gran d'un acord 721 01:05:50,940 --> 01:05:58,660 fins que es té en compte el fet que amb els navegadors - 722 01:05:58,660 --> 01:06:03,880 >> Com redirigir el treball o bàsicament qualsevol treball encapçalats, 723 01:06:03,880 --> 01:06:07,980 en realitzar la connexió amb un lloc web i l'envia de tornada totes aquestes capçaleres i coses 724 01:06:07,980 --> 01:06:12,020 com a resposta o la resposta de redirecció 200 o el que sigui, 725 01:06:12,020 --> 01:06:18,230 encapçalats només són vàlids fins al primer byte de dades s'envien. 726 01:06:18,230 --> 01:06:23,140 Pot redirigir milers de vegades, però tan aviat com el primer byte de dades s'envia 727 01:06:23,140 --> 01:06:26,120 que no suposa per redirigir de nou. 728 01:06:26,120 --> 01:06:31,860 >> Si té una pèrdua de nova línia a la part inferior d'un arxiu 729 01:06:31,860 --> 01:06:37,260 i diguem que utilitzi aquesta funció i llavors vostè vol - 730 01:06:41,580 --> 01:06:52,870 Diguem que és un altre arxiu que és index.php i require_once alguna cosa - 731 01:06:52,870 --> 01:06:56,920 No puc pensar en un bon exemple. 732 01:06:56,920 --> 01:07:04,740 El problema ocorre quan aquesta línia a la part inferior es va fer ressò. 733 01:07:04,740 --> 01:07:08,660 No vol que res s'ha fet ressò encara. 734 01:07:10,820 --> 01:07:15,700 Tot i que no tenia la intenció d'aconseguir qualsevol cosa es va fer ressò, cosa que sí aconseguim ressò 735 01:07:15,700 --> 01:07:17,990 i el que ara se suposa que no has de fer arribar les capçaleres de cap altra 736 01:07:17,990 --> 01:07:20,030 i vostè rebrà queixes. 737 01:07:22,170 --> 01:07:24,420 Un no necessita aquestes etiquetes de tancament. 738 01:07:24,420 --> 01:07:27,420 Si tens pensat fer alguna cosa amb HTML - 739 01:07:27,420 --> 01:07:30,490 i és perfectament raonable per fer-ho aquí div qualsevol 740 01:07:30,490 --> 01:07:39,450 i en aquest punt es pot o no es poden incloure. 741 01:07:39,450 --> 01:07:41,590 En realitat no importa. 742 01:07:41,590 --> 01:07:45,450 Però en scripts PHP és estrany per tancar-la. 743 01:07:45,450 --> 01:07:50,400 Quan tot és PHP, absolutament tot, 744 01:07:50,400 --> 01:07:55,460 vostè realment no necessita per tancar / no has tancar-lo. 745 01:08:02,030 --> 01:08:05,720 >> Tractar amb cadenes és molt més agradable que en C. 746 01:08:05,720 --> 01:08:09,470 En PHP es pot especificar una cadena amb cometes simples o dobles. 747 01:08:09,470 --> 01:08:12,820 Amb cometes simples no es pot utilitzar "escapament" seqüències. 748 01:08:12,820 --> 01:08:17,640 Constantment escapar, blah, blah, blah. 749 01:08:19,920 --> 01:08:24,010 Així que printf és molt rar en PHP. 750 01:08:24,010 --> 01:08:32,290 Suposo que m'agradaria utilitzar printf si volia fer una mena de cosa - en el conjunt de processadors que utilitza sprintf 5 o el que sigui. 751 01:08:32,290 --> 01:08:36,060 Però que vols fer 001.jpg 002.jpg i. 752 01:08:36,060 --> 01:08:40,300 Així que per a aquest tipus de coses en què realment vol formatar el text m'agradaria utilitzar printf. 753 01:08:40,300 --> 01:08:44,689 Però d'altra banda m'acaba d'utilitzar la concatenació de cadenes. 754 01:08:44,689 --> 01:08:47,000 Realment mai utilitzar printf. 755 01:08:49,229 --> 01:09:00,170 Només estem diferenciant els detalls entre cometes simples i cometes dobles. 756 01:09:00,170 --> 01:09:07,490 La major diferència és que les cometes simples, s'imprimirà literalment. 757 01:09:07,490 --> 01:09:15,390 No hi ha cap tipus de dades char en PHP, a diferència de C, així que això és equivalent a això. 758 01:09:15,390 --> 01:09:17,970 Els dos són cadenes. 759 01:09:17,970 --> 01:09:29,180 I el bo sobre les cadenes de cometes simples es podria dir 'hola món! " bla, bla, bla, 760 01:09:29,180 --> 01:09:33,340 $ $ Wooo. 761 01:09:33,340 --> 01:09:38,260 Què passa quan es tracta d'imprimir el voleu imprimir literalment. 762 01:09:38,260 --> 01:09:40,680 Anem a desfer de totes les nostres coses. 763 01:09:40,680 --> 01:09:44,700 Així que trobo $ cadena1; 764 01:09:48,569 --> 01:09:56,570 És, literalment, imprès totes aquestes coses: signes de dòlar, 765 01:09:56,570 --> 01:09:58,770 backslash n, que un pensaria que seria salts de línia - 766 01:09:58,770 --> 01:10:01,500 totes aquestes coses que s'imprimeix la lletra. 767 01:10:01,500 --> 01:10:05,650 L'única cosa que es necessita per escapar cometes simples són 768 01:10:05,650 --> 01:10:09,470 perquè si no podria pensar que tancarà les cometes simples. 769 01:10:09,470 --> 01:10:15,050 Les cometes dobles, completament diferents. 770 01:10:20,300 --> 01:10:25,870 Ja veiem el ressaltat de sintaxi se'ns cluing al que anirà molt malament. 771 01:10:25,870 --> 01:10:36,190 php.unique. Undefined variable: Wooo perquè això s'interpreta com una variable anomenada Wooo. 772 01:10:36,190 --> 01:10:42,400 Les cometes dobles permeten inserir variables en - 773 01:10:42,400 --> 01:10:52,730 Diguem que $ name = "Rob"; 774 01:10:52,730 --> 01:10:58,020 Així que trobo "Hola, em dic $ nom!"; 775 01:10:58,020 --> 01:11:09,260 Es reconeix això com una variable. 776 01:11:09,260 --> 01:11:21,210 Quan executo això - i vaig a inserir un salt de línia - Hola, em dic Rob! i hola món! 777 01:11:21,210 --> 01:11:24,910 Això és perquè mai li vaig treure la impressió de Wooo dalt. 778 01:11:24,910 --> 01:11:30,020 Hi ha un pas més que pot fer. 779 01:11:30,020 --> 01:11:39,250 $ Array = [1, 2, 3]; 780 01:11:39,250 --> 01:11:43,270 Què passa si vull imprimir el primer índex de la matriu? 781 01:11:43,270 --> 01:11:45,150 Vostè fa $ array [0]. 782 01:11:45,150 --> 01:11:49,280 El ressaltat de sintaxi és una pista. Què és això farà? 783 01:11:52,320 --> 01:11:54,510 php.unique. 784 01:11:54,510 --> 01:11:59,860 Hola, em dic 1! que no és el que jo volia. 785 01:11:59,860 --> 01:12:05,050 El ressaltat de sintaxi em va mentir. 786 01:12:05,050 --> 01:12:13,020 Anem a provar 'a' -> 1, 'b' -> 2. 787 01:12:18,450 --> 01:12:21,440 Així és com jo hauria d'escriure. 788 01:12:26,350 --> 01:12:32,160 Cita inesperada únic (T_ENCAPSED blah, blah, blah, blah, blah). 789 01:12:32,160 --> 01:12:41,780 La idea és que no es reconeix això com a part de la matriu. 790 01:12:41,780 --> 01:12:46,620 No està reconeixent això com matriu indexada per una lletra. 791 01:12:46,620 --> 01:12:49,870 Vols fer que entre claus, 792 01:12:49,870 --> 01:12:54,730 i ara el que hi ha en aquesta clau de tancament seran interpolats, 793 01:12:54,730 --> 01:13:00,340 que és la paraula que fem servir per màgicament la inserció d'aquestes variables en els llocs correctes. 794 01:13:00,340 --> 01:13:04,280 Ara fer això, php.unique i Hola, em dic 1! com s'esperava 795 01:13:04,280 --> 01:13:07,720 o Hola, em dic Rob! 796 01:13:14,110 --> 01:13:23,130 Una cosa que és una mica agradable sobre cometes simples és que - 797 01:13:23,130 --> 01:13:28,480 Hi ha algun cost per a la interpolació. 798 01:13:30,520 --> 01:13:35,100 Si utilitzeu cometes, l'intèrpret ha d'anar a través d'aquesta cadena, 799 01:13:35,100 --> 01:13:41,500 assegurant que, "Oh, aquí hi ha una variable. Ara he d'anar a buscar aquesta variable i inserir aquí." 800 01:13:41,500 --> 01:13:48,930 Encara que no utilitza cap variable, 801 01:13:48,930 --> 01:13:52,220 res dins d'aquestes cometes necessita ser interpolats, 802 01:13:52,220 --> 01:13:56,800 però encara serà més lent perquè ha d'anar a través de les cometes dobles 803 01:13:56,800 --> 01:14:00,130 a la recerca de coses que necessiten ser interpolats. 804 01:14:00,130 --> 01:14:05,360 Així cites individuals pot ser una mica més ràpid si res necessita ser interpolats, 805 01:14:05,360 --> 01:14:15,650 i tendeixo a fins i tot utilitzar cometes simples per a: 'Hola, em dic'. $ Array ['a'] de totes maneres. 806 01:14:15,650 --> 01:14:20,430 Això serà equivalent al que teníem abans. 807 01:14:24,840 --> 01:14:28,440 Però és una qüestió de preferència. 808 01:14:28,440 --> 01:14:34,750 Si utilitzeu PHP, és probable que no els importa la diferència de velocitat. 809 01:14:34,750 --> 01:14:39,480 No és suficient per raonar, per començar. 810 01:14:39,480 --> 01:14:43,030 >> Una pregunta final? 811 01:14:47,430 --> 01:14:51,710 >> En realitat, ni tan sols passar per tot això, però això era avorrit. 812 01:14:51,710 --> 01:14:59,080 L'última cosa que una espècie d'agradable en PHP és quan vostè està tractant amb HTML, 813 01:14:59,080 --> 01:15:06,450 ho vas a utilitzar una mica, així que la sintaxi bon drecera per imprimir una variable. 814 01:15:32,400 --> 01:15:36,730 Sense posar PHP aquí, això es diu etiquetes curtes. 815 01:15:36,730 --> 01:15:44,330 Oficialment a partir de PHP 5.4, aquesta no s'utilitza. 816 01:15:44,330 --> 01:15:48,640 Es recomana posar php. 817 01:15:48,640 --> 01:15:55,770 Això és tot suportada, etiqueta curtes amb el 01:16:02,480 És recolzada per defecte, així que vostè pot utilitzar aquests com vulgui, i són bastant convenients. 819 01:16:02,480 --> 01:16:05,700 >> Alguna pregunta? 820 01:16:07,780 --> 01:16:09,270 Està bé. 821 01:16:10,840 --> 01:16:13,800 >> Mantingues la classe, San Diego. 822 01:16:13,800 --> 01:16:16,070 [Rialles] 823 01:16:18,620 --> 01:16:22,660 Bye. [Rialles] 824 01:16:24,350 --> 01:16:28,470 [Aplaudiments] [riu] 825 01:22:46,460 --> 01:22:49,460 >> [CS50.TV]