[Powered by Google Translate] [Adran 8 - Mwy cyfforddus] [Rob Bowden - Harvard University] [Mae hyn yn CS50. - CS50.TV] Mae'r nodiadau wythnos adran yn mynd i fod yn eithaf byr, felly Im 'jyst yn mynd i barhau i siarad,' ch guys yn mynd i ddal i ofyn cwestiynau, a byddwn yn ceisio i lenwi amser gymaint ag y bo modd. Mae llawer o bobl yn credu nad yw hyn pset yw o reidrwydd yn anodd, ond mae'n hir iawn. Mae'r fanyleb pset ei hun yn awr i ddarllen. Rydym yn rhoi llawer o SQL gallech o bosibl angen i chi ddefnyddio. Rydym yn cerdded i chi drwy lawer ohono, felly ni ddylai fod yn rhy ddrwg. Oes unrhyw un wedi dechrau neu orffen? Mae'ny pset diwethaf. O, fy Nuw. Fel arfer mae 'na JavaScript i un fel hyn, ond mae pethau newid calendr yn gwneud popeth 1 wythnos fyrrach, ac nid oes gennym a pset JavaScript. Nid wyf yn gwybod sut mae hynny'n effeithio ar p'un a JavaScript yn mynd i ymddangos ar yr arholiad neu Cwis 1. Yr wyf yn tybio y bydd yn rhywbeth fel angen i chi wybod lefel uchel pethau am JavaScript, ond yr wyf yn amau ​​byddem yn unig yn rhoi i chi yn syth JavaScript cod gan nad ydych wedi cael pset ynddo. Ond a fydd yn stwff am cwis adolygiad yr wythnos nesaf. Adran o gwestiynau. Mae llawer o bethau hyn braidd yn wael eirio, ond byddwn yn trafod pam. Yn wahanol i C, PHP yn "ddeinamig-deipio" iaith. Beth yw ystyr hyn, byddwch yn gofyn? Wel, dweud hwyl fawr i bawb torgoch, arnofio, int, a geiriau allweddol eraill y mae angen i chi ddefnyddio wrth ddatgan newidynnau a swyddogaethau yn C. Yn PHP, math newidyn yn cael ei bennu gan werth ei fod yn dal ar hyn o bryd. Felly, cyn i ni deipio cod hwn i mewn i ffeil o'r enw dynamic.php, PHP ei deipio ddeinamig. Mae hynny'n wir. Wyf yn anghytuno â'r ffaith fod hynny'n golygu ein bod yn ffarwelio â torgoch, arnofio, int, a keywords eraill. Y gwahaniaeth rhwng yr union ddynamig deipio a'r dewis arall, sy'n cael ei deipio llonydd, yw bod teipio ddeinamig, eich holl gwirio math a phethau digwydd yn ystod amser rhedeg, tra teipio statically ei fod yn digwydd yn ystod amser crynhoi. Mae'r gair sefydlog yn gyffredinol yn ymddangos i olygu pethau amser crynhoi. Amcana mae o ffyrdd eraill ar ei gyfer, ond yn C pan fyddwch yn datgan newidyn sefydlog, ei storio yn cael ei ddyrannu yn ystod amser crynhoi. Yma, teipio ddynamig jyst yn golygu bod - Yn C os ydych yn ceisio ychwanegu llinyn a cyfanrif, pan fyddwch yn llunio ei, mae'n mynd i gwyno oherwydd ei fod yn mynd i ddweud na allwch ychwanegu int a pwyntydd. Nid yw'n un llawdriniaeth dilys. Dyna beth arall y byddwn yn dod i mewn eiliad. Ond y math o wirio, y ffaith ei bod yn cwyno ar adeg Casglu, yn gwirio fath sefydlog. Mae yna ieithoedd lle nad oes angen i chi ddweud torgoch, arnofio, int, a phob un o'r pethau hynny, ond gall yr iaith dweud o'r cyd-destun y peth pa fath y mae'n 'n dybiedig i fod, ond mae'n dal i deipio statically. Felly, os ydych yn cymryd 51, OCaml byth, mae angen i chi ddefnyddio unrhyw un o'r mathau hyn, ond bydd yn dal ar amser Casglu dweud na allwch wneud hyn oherwydd eich bod yn cymysgu yn int a llinyn. Teipio ddynamig jyst yn golygu bod rywbryd yn ystod amser rhedeg ydych yn mynd i gael cwyn. Os ydych chi hefyd wedi defnyddio Java o'r blaen, yn gyffredinol, bron unrhyw iaith C-fath yn mynd i gael eu teipio llonydd, felly C, C + +, Java, mae pawb yn gyffredinol teipio statically. Yn Java pan fyddwch yn llunio rhywbeth ac rydych yn ei ddweud llinyn s yn dychwelyd rhywbeth newydd nad yw llinyn, mae hynny'n mynd i gwyno am y mathau hynny nid yn unig yn cyfateb i fyny. Mae hynny'n mynd i gwyno yn ystod amser crynhoi. Ond mae ganddo hefyd peth amser deinamig pethau fel os ydych yn ceisio bwrw rhywbeth i fath sy'n fwy penodol na'r math hyn o bryd, does dim byd y gall ei wneud yn ystod amser Casglu i wirio a yw'r cast yn mynd i lwyddo. Java hefyd rhyw fath deinamig gwirio bod cyn gynted ag y mae'n mynd at y llinell o god pan fydd mewn gwirionedd yn gweithredu, mae'n mynd i wneud y cast, gwirio os yw'r cast yn ddilys yn y lle cyntaf, ac os nad oedd, yna mae'n mynd i gwyno bod gennych fath annilys. Fath Dynamic gwirio. Teipiwch hyn i mewn i ffeil o'r enw dynamic.php. Dynamic.php. 'N annhymerus' unzip y fformatio. Mae gennym amrywiol, rydym yn gosod i 7 cyfanrif, yna yr ydym am ei argraffu ac mae% s - O, rydym yn argraffu y math ohono, felly gettype yn mynd i ddychwelyd y math y newidyn. Rydym yn unig yn argraffu'r fath drosodd a throsodd. Rydym yn unig php.dynamic.php. Byddwn yn gweld ei fod yn newid o cyfanrif i llinyn i Boolean wrth i ni fynd drwy. Yn C, nid oes math data Boole, nid oes llinyn data fath. Mae * torgoch a Boolean yn unig yn tueddu i fod yn int neu torgoch neu rywbeth. Yn PHP mathau hyn yn bodoli, a dyna un o fanteision mawr o PHP dros C - bod gweithrediadau llinyn yn eithriadol haws mewn PHP nag C. Maent yn unig yn gweithio. Felly, rydym yn dod yn ôl yma. Rydym yn rhedeg dynamic.php. Mae hyn yn dweud y cyfieithydd PHP, a elwir yn php, i redeg y cod PHP yn dynamic.php. Os oes gennych unrhyw wallau yn y ffeil, bydd y cyfieithydd yn dweud wrthych! Mae'r cyfieithydd, mae hwn yn gwahaniaeth mawr rhwng PHP a C. Yn C rhaid i chi lunio rhywbeth ac yna rydych yn rhedeg y ffeil a luniwyd. Byth yn PHP i chi lunio unrhyw beth. Felly, y cyfieithydd PHP yn y bôn dim ond darllen hwn fesul llinell. Mae'n taro var = 7, yna mae'n taro printf yna mae'n taro var yna mae'n taro printf ac yn y blaen. Mae ychydig o gasglu mae'n ei wneud, ac y mae'n storio y canlyniadau felly os ydych yn rhedeg y sgript yn ddiweddarach, gallwch wneud rhai, ond yn y bôn mae'n llinell drwy linell math yna o beth. Mae hynny'n golygu bod llawer o optimeiddiad yr ydym yn mynd i mewn C, fel lunio, dim ond yn gyffredinol gall y casglwr yn gwneud llawer o driciau i chi. Gall gymryd allan newidynnau heb ei ddefnyddio, gall wneud pob un o'r mathau hyn o bethau, y gall ei wneud dychweliad gynffon. Yn PHP nad ydych yn mynd i gael y fantais oherwydd ei fod dim ond yn mynd i ddechrau gweithredu linell wrth linell wrth linell, ac nid yw'n wir yn cydnabod y pethau hyn yn hawdd gan nad yw'n pasio 1 casgliad mawr dros y peth ac wedyn yn gweithredu; 'i' jyst fesul llinell. Felly dyna y cyfieithydd. Cefnogwch i'n teipio deinamig: 'n bert oera, eh? Chi na allai wneud hynny yn bendant yn C! Yn awr, weld a allwch chi chyfrif i maes y math o bob un o'r gwerthoedd canlynol. Gweler hyn ar gyfer cyfeirio. Felly, 3.50. Pa fath ydych chi'n credu bod yn mynd i fod? Dyma'r mathau sydd gennym. Mae gennym bools, cyfanrifau, pwyntiau fel y bo'r angen, llinynnau, araeau, gwrthrychau, ac yna adnoddau, sy'n fath o amwys. Rwy'n credu bod yna mewn gwirionedd enghraifft yma. Yna mae NULL. NULL yn fath arbennig. Yn wahanol i C lle NULL yn unig yw pwyntydd gyda chyfeiriad 0, yn PHP, NULL yw ei fath ei hun lle yr unig beth ddilys o'r math hwnnw yn null. Mae hyn yn llawer mwy defnyddiol ar gyfer gwirio camgymeriadau. Yn C lle cawsom y mater hwn lle os byddwch yn dychwelyd NULL, mae hynny'n golygu eich bod yn dychwelyd pwyntydd NULL neu ddefnyddio NULL i ddynodi gwall neu'r cyfan o'r dryswch oedd gennym ar un adeg. Yma, dychwelyd NULL gyffredinol yn golygu gwall. Mae llawer o bethau hefyd yn dychwelyd ffug ar gyfer camgymeriadau. Ond y pwynt yw y math NULL, yr unig beth y math NULL yn null. Yna alwad yn ôl yn debyg y gallwch ddiffinio rhai swyddogaethau dienw. Nid oes rhaid i chi roi y swyddogaeth enw, ond ni fydd yn rhaid i chi ddelio â hynny yma. O edrych ar y mathau y maent yn disgwyl i ni wybod, beth ydych chi'n meddwl bod y math o 3.50 yw? >> [Myfyrwyr] arnawf. Yeah. Felly, yna yma, beth ydych chi'n feddwl y math o hyn? >> [Myfyrwyr] Array. Yeah. Mae'r un cyntaf yn arnofio, yr ail un yn arae. Hysbysiad nad yw'r casgliad yn debyg i amrywiaeth C lle mae gennych fynegai 0 rhywfaint o werth, mynegai 1 yn rhywfaint o werth. Yma, mae'r mynegeion yn a, b, c ac a gwerthoedd yw 1, 2, a 3. Yn PHP nid oes gwahaniaeth rhwng nifer cysylltiadol a dim ond casgliad rheolaidd fel y byddech yn feddwl amdano o C. Mae hyn yn unig, ac o dan y cwfl yn arae rheolaidd yn unig yw amrywiaeth cysylltiadol lle mae 0 mapiau i ryw werth yr un ffordd a mapiau i ryw werth. Am y rheswm hwn, gall PHP fod yn eithaf drwg i 'n sylweddol ymprydia cod / meincnodi pethau ers hynny yn C pan fyddwch yn defnyddio amrywiaeth chi'n gwybod bod mynediad i aelod yn cysonyn amser. Yn PHP mynediad i aelod sy'n gwybod faint o amser? Mae'n debyg gyson os yw'n hashes gywir. Pwy a ŵyr beth yw hi go wneud o dan y cwfl? Rydych yn wir angen i chi edrych ar y gweithredu i weld sut mae'n mynd i ddelio â hynny. Felly, yna fopen. Rwy'n credu yma gadewch i 'jyst PHP fopen llaw i edrych ar y math dychwelyd. Rydym yn gweld yma, gallwch edrych i fyny 'n bert lawer unrhyw swyddogaeth yn y llawlyfr PHP ac mae hyn yn fath o dudalen dyn o PHP. Mae'r math dychwelyd yn mynd i fod adnoddau. Dyna pam yr wyf yn edrych i fyny, oherwydd nid ydym ddim wir yn diffinio adnoddau. Mae'r syniad o adnoddau, yn C i chi fath o got * FILE neu beth bynnag; yn PHP yr adnodd yw eich * FILE. Mae'n beth rydych chi'n mynd i gael ei ddarllen o, dyma beth rydych chi'n mynd i gael ei ysgrifennu i. Mae'n allanol fel arfer, felly mae'n adnodd y gallwch ei dynnu pethau o a thaflu pethau i. Ac yn olaf, beth yw'r math o null? >> [Myfyrwyr] NULL. Yeah. Felly, yr unig beth sy'n NULL yn null. NULL yn null. Un nodwedd o system fath PHP (er gwell neu er gwaeth) yw ei allu i jyglo fath. Pan fyddwch yn ysgrifennu llinell o PHP cod sy'n cyfuno gwerthoedd fathau gwahanol, Bydd PHP ceisio gwneud y peth synhwyrol. Rhowch gynnig ar bob un o'r llinellau canlynol o PHP cod. Beth sy'n argraffu? A yw'n beth oeddech yn ei ddisgwyl? Pam neu pam ddim? Mae'r ffaith hon am PHP yw'r hyn yn ei gwneud yn yr hyn a alwn wan teipio. Teipio wan ac yn teipio yn gryf, mae yna wahanol ddefnyddiau ar gyfer y termau hynny, ond mae rhan fwyaf o bobl yn defnyddio teipio wan ac yn teipio yn gryf i olygu y math hwn o beth lle ("1" + 2); sy'n gweithio. Yn C na fyddai'n gweithio. Gallwch ddychmygu hyn nad ydynt yn gweithio. Mae llawer o bobl yn cymysgu i fyny teipio deinamig a theipio gwan a theipio statig a theipio cryf. Python yn enghraifft arall o iaith sydd wedi teipio ddeinamig. Gallwch daflu yn ymwneud â mathau mewn newidynnau ac mae'n mynd i benderfynu pan yn rhedeg unrhyw checkings wall. Yn Python mae'n mynd i weithredu hyn a bydd yn gweld ("1" + 2); a bydd hyn yn methu oherwydd ei fod yn dweud nad ydych yn gallu ychwanegu llinyn a cyfanrif. Yn PHP, sydd yr un mor ddynamig teipio, ni fydd hyn yn methu. Teipio gwan wedi ei wneud â'r ffaith ei fod yn gwneud pethau gyda mathau nad ydynt yn wir yn gwneud synnwyr o reidrwydd. Felly ("1" + 2); Gallaf ddychmygu bod y llinyn 12, gallaf ddychmygu ei fod yn y llinyn 3, Gallaf ddychmygu ei fod yn y 3 gyfanrif. Dyw hi ddim o reidrwydd yn bendant, ac rydym yn fwy na thebyg yn mynd i weld yma pan fyddwn yn argraffu ("1" + 2); mae'n debyg yn mynd i roi diwedd ar i fyny fod yn wahanol nag argraffu (1 + "2"). Ac mae hyn yn tueddu i fod, yn fy marn i, er gwaeth. Yma, gallwn roi cynnig ar y rhain. Arall castia ychydig am PHP yw nad oes angen i chi ysgrifennu mewn gwirionedd y ffeil. Yw'n wedi rhedeg y dull hwn gorchymyn. Felly, php-r, yna gallwn daflu yn y gorchymyn yma: "Print ('1 '+ 2);" a byddaf yn taflu llinell newydd. Mae hyn yn argraffu 3. Mae'n edrych fel y bydd yn argraffu 3 a 'i' y 3 gyfanrif. Felly nawr gadewch i ni roi cynnig ar y ffordd arall o gwmpas: "Print (1 + '2 '); Rydym yn cael 3, ac a yw'n hefyd yn mynd i fod yn gyfanrif 3? Rwyf yn onest i ddim syniad. Mae'n edrych fel 'na yn gyson. Nid oes byth unrhyw siawns o ei fod yn y 12 llinyn neu unrhyw beth fel 'na oherwydd PHP, yn wahanol i JavaScript a Java hefyd, Mae gweithredwr ar wahân ar gyfer concatenation. Concatenation yn PHP yn dot. Felly argraffu (1 '2 '.); Yn mynd i roi i ni 12. Mae hyn yn tueddu i arwain at ddryswch lle mae pobl yn ceisio gwneud rhywbeth fel str + = rhyw beth arall y maent yn awyddus i ychwanegu at ddiwedd eu llinyn, ac mae hynny'n mynd i fethu. Mae angen i chi wneud str. = Felly, peidiwch ag anghofio concatenation yn PHP yn dot. Pethau eraill i roi cynnig ar: argraffu ("CS" + 50); Rwyf wedi dweud wrthych nad oes unrhyw obaith o hyn arwain at CS50 gan nad yw concatenation +. Beth ydych chi'n meddwl bod hyn yn mynd i roi diwedd ar i fyny fod yn? Yr wyf yn wir wedi gwbl ddim syniad. Mae'n edrych fel ei fod dim ond 50. Mae'n gweld y llinyn, ac fe fentraf os ydym yn rhoi 123CS - Mae'n gweld y llinyn cyntaf, mae'n ceisio i ddarllen cyfanrif ohono neu nifer ohono. Yn yr achos hwn mae'n gweld 123CS. "Nid yw hynny'n gwneud synnwyr fel cyfanrif, felly Im 'jyst yn mynd i feddwl o 123." Felly 123 + 50 yn mynd i fod yn 173. Ac yma mae'n dechrau darllen hwn fel cyfanrif. Nid yw'n gweld unrhyw beth, felly dim ond yn ei drin fel 0. Felly 0 + 50 yn cael ei mynd i fod yn 50. Mae hyn yr wyf i'n tybio yn mynd i wneud rhywbeth tebyg. Rydw i'n meddwl 99. Yeah, oherwydd ei fod yn mynd i gymryd y cyntaf - Felly 99. Yma (10/7), os yw hyn yn C, beth fyddai hynny'n ei dychwelyd? [Myfyrwyr] 1. >> Yeah, byddai'n 1 oherwydd 10/7 yn rhannu 2 gyfanrifau. Cyfanrif wedi'i rannu gan cyfanrif yn mynd i ddychwelyd yn gyfanrif. Ni all ddychwelyd 1 pwynt beth bynnag byddai hynny, felly mae'n jyst yn mynd i ddychwelyd 1. Yma argraffu (10/7); mae'n mynd i mewn gwirionedd yn dehongli hynny. Ac mae hyn yn golygu, os ydych ei eisiau mewn gwirionedd i wneud talgrynnu cyfanrif a phethau fel 'na, angen i chi wneud print (llawr (10/7)); Yn C mae'n debyg 'n annaearol y gallwch ddibynnu ar cwtogi cyfanrif yn rheolaidd, ond yn PHP nad ydych yn gallu oherwydd ei fod yn awtomatig yn troi i mewn i arnofio. Ac yna (7 + wir); beth ydych chi'n feddwl sy'n mynd i fod? Rwy'n dyfalu 8 os mae'n mynd i ddehongli wir fel 1. Mae'n edrych fel ei fod yn 8. Felly unrhyw beth yr ydym wedi ei wneud yn y 10 munud diwethaf ddylid byth byddwch yn llwyr yn ei wneud. Byddwch yn gweld cod sy'n gwneud hyn. Nid oes rhaid i fod mor syml â hyn. Gallech gael 2 newidynnau, ac 1 newidyn yn digwydd i fod yn llinyn a'r newidyn arall yn digwydd i fod yn int, ac yna fyddwch yn ychwanegu hyn at ei gilydd newidynnau. Ers PHP ei deipio ddynamig ac ni fydd yn gwneud unrhyw fath gwirio i chi ac ers ei fod yn wan ac yn teipio gan y bydd yn dim ond yn awtomatig taflu pethau at ei gilydd y a bydd popeth yn unig yn gweithio, mae'n anodd i hyd yn oed yn gwybod bod yn rhaid newidyn hwn fod yn llinyn yn awr, felly ni ddylwn ei ychwanegu at y newidyn, sydd yn gyfanrif. Yr arfer gorau yw os yw newidyn yn llinyn, cadwch ef fel llinyn am byth. Os newidyn yn int, ei gadw fel int am byth. Os ydych am i ddelio gyda chyfanrifau a llinynnau, gallwch ddefnyddio varsint - dyna JavaScript. Intval. Rwy'n gwneud hyn drwy'r amser. PHP a JavaScript I cymysgu i fyny bopeth. Felly intval yn mynd i ddychwelyd y gwerth cyfanrifol newidyn. Os byddwn yn pasio yn "print (intval ('123 ')); byddwch yn cael 123. Nid Intval ei hun yn mynd i wneud y siec i ni ei fod yn unig yn gyfanrif. Mae'r llawlyfr PHP, mae swyddogaethau a dim ond cymaint sydd ar gael, felly dyma wyf yn meddwl beth byddwn yn ei ddefnyddio yn is_numeric gyntaf. Rwy'n dyfalu a ddychwelodd ffug. Dyna'r peth arall mae'n rhaid i ni fynd drosodd yn ===. Felly is_numeric ('123df '), fyddech chi ddim yn meddwl am hynny fel is_numeric. Yn C byddai'n rhaid i chi ailadrodd dros yr holl gymeriadau ac yn gwirio i weld os yw pob cymeriad yn digid neu beth bynnag. Yma is_numeric yn mynd i wneud hynny i ni, ac mae'n dychwelyd ffug. Felly, pan fyddaf yn argraffedig, ei hargraffu ddim, felly dyma yr wyf yn ei gymharu i weld, wnaethoch chi yn digwydd bod yn ffug? Ac felly, yn awr ei fod yn argraffu 1. Mae'n debyg y bydd yn argraffu 1 fel gwir yn hytrach na argraffu yn wir yn wir. Tybed os wyf yn gwneud print_r. Na, mae'n dal i wneud 1. Fynd yn ôl at ===, == yn dal i fodoli, ac os ydych yn siarad â Tommy bydd e'n == yn berffaith iawn. Rydw i'n mynd i ddweud bod == yn ofnadwy ac ni ddylech fyth ddefnyddio ==. Y gwahaniaeth yw bod == cymharu pethau lle gall fod yn wir hyd yn oed os nad ydynt yn yr un math, tra === cymharu pethau ac yn gyntaf mae'n gwiriadau ydynt yr un fath? Ydw. Iawn, nawr rwy'n mynd i weld os ydynt mewn gwirionedd cymharu i fod yn gyfartal. Byddwch yn cael pethau od fel 10 yn dychwelyd - gadewch i ni weld beth mae hynny'n ei ddweud. Felly ('10 ''1 == e1'); Mae hyn yn wir yn dychwelyd. A oes gan unrhyw un ddyfalu pam mae hyn yn dychwelyd yn wir? Nid dim ond am hynny. Efallai mai dyma awgrym. Ond os byddaf yn newid hynny i f - asio ei! Rwy'n cadw defnyddio dyfynodau dwbl. Y rheswm y dyfynodau dwbl yn gweiddi arna i yw am fy mod wedi rhoi hyn mewn dyfynodau dwbl. Felly, gallwn ddianc rhag y dyfynodau dwbl mewn yma, ond dyfyniadau sengl yn ei gwneud yn haws. Felly ('10 ''1 == f1'), nid yw'n wir argraffu. ('10 ''1 == E1'); printiau wir. [Myfyrwyr] A yw'n hecs? >> Dyw hi ddim yn felltith, ond mae'n agos y mae fel - 1e1, nodiant gwyddonol. Mae'n cydnabod 1e1 fel 1 * 10 ^ 1 neu beth bynnag. Mae'r rhai yn gyfanrifau cyfartal. Os ydym yn ei wneud === yna mae'n mynd i fod yn ffug. Fi 'n weithredol yn cael unrhyw syniad os ydym yn ei wneud == beth am (10 a '10abc');? Mae pob hawl. Felly, mae hynny'n wir. Felly, yn union fel pan wnaethoch chi (10 + '10abc '), a fyddai'n 20, yma (10 == '10abc '); yn wir. Hyd yn oed yn waeth yw pethau fel (ffug == NULL); yn wir neu (ffug == 0); yn wir, (ffug == []); Mae yna achosion rhyfedd - Dyna un o'r achosion hynny 'n annaearol. Sylwch fod (ffug == []); yn wir. ('0 '== Ffug); yn wir. ('0 '== []); Yn ffug. Felly == mewn unrhyw ffordd transitive. gall fod yn hafal i b a gall fod yn hafal i c, ond efallai na b yn hafal i c. Dyna ffiaidd i mi, a dylech bob amser ddefnyddio ===. [Myfyrwyr] Allwn ni wneud! == Hefyd? >> [Bowden] Ydw. Byddai'r cyfwerth fod! = A! ==. Mae hyn yn cael ei ddwyn i fyny mewn gwirionedd yn y fanyleb pset lle mae llawer o swyddogaethau dychwelyd - Mae'r llawlyfr PHP yn dda ynglŷn â hyn. Mae'n rhoi mewn blwch coch mawr, "Bydd hyn yn dychwelyd ffug os oes gwall." Ond 0 yn dychwelyd yn beth hollol resymol i ddychwelyd. Meddyliwch am unrhyw swyddogaeth y disgwylir iddo ddychwelyd yn gyfanrif. Lets 'ddeud y swyddogaeth hon i fod i gyfrif y nifer o linellau mewn ffeil neu rywbeth. O dan amgylchiadau arferol, byddwch yn mynd heibio swyddogaeth hon ffeil ac mae'n mynd i ddychwelyd yn gyfanrif sy'n cynrychioli nifer y llinellau. Felly 0 yn nifer berffaith resymol os yw'r ffeil yn unig wag. Ond beth os ydych yn ei drosglwyddo ffeil annilys a swyddogaeth yn digwydd dychwelyd ffug os byddwch yn ei throsglwyddo ffeil annilys? Os ydych yn unig yn gwneud == nad ydych yn gwahaniaethu rhwng yr achos ffeil annilys a ffeil gwag. Bob amser yn defnyddio ===. Dyna'r cyfan o'r rheiny. Yn PHP, y math amrywiaeth yn wahanol i'r hyn rydych chi'n ei ddefnyddio yn C. Yn wir, efallai eich bod wedi sylwi ar hyn eisoes uchod pan fyddwch chi'n gweld bod hyn o amrywiaeth fath. Mae'r gystrawen braced yn newydd fel o PHP 5.4, sef y fersiwn diweddaraf o PHP. Cyn hyn i chi bob amser wedi ysgrifennu array ('a' -> 1, 'b' -> 2. Dyna oedd y Constructor am arae. Nawr PHP wedi dod o'r diwedd at y gystrawen 'n glws o ychydig cromfachau sgwâr, sydd ychydig yn well o lawer nag amrywiaeth. Ond o ystyried PHP 5.4 yw'r fersiwn mwyaf newydd, efallai y byddwch yn dod ar draws lleoedd nad ydynt hyd yn oed PHP 5.3. Dros yr haf, rydym yn rhedeg i mewn i'r mater lle roedd PHP 5.3 Beth rydym yn ei gael ar yr offer, ond y gweinydd ein bod yn defnyddio ein holl lyfr gradd a chyflwyno a'r holl bethau i Roedd PHP 5.4. Ddim yn gwybod hyn, rydym wedi datblygu yn 5.3, gwthio i 5.4, ac erbyn hyn i gyd o un sydyn o'n cod yn gweithio oherwydd yno y digwyddodd newidiadau wedi bod rhwng 5.3 a 5.4 nad ydynt yn gydnaws yn ôl, a rhaid i ni fynd a gosod ein holl bethau nad ydynt yn gweithio ar gyfer PHP 5.4. Ar gyfer y dosbarth, gan fod yr offer yn cael PHP 5.4, mae'n berffaith iawn i ddefnyddio cromfachau sgwâr. Ond os ydych yn chwilio am bethau o amgylch y Rhyngrwyd, os ydych chi'n edrych i fyny rhyw fath o bethau amrywiaeth, yn fwyaf tebygol ydych yn mynd i weld y cyfnod diweddar allan cystrawen Constructor amrywiaeth ers hynny wedi bod o gwmpas ers PHP ei eni a chystrawen braced sgwâr wedi bod o gwmpas ers y misoedd diwethaf cwpl neu bryd bynnag 5.4 Daeth o gwmpas. Dyma sut rydych mynegai. Yn union fel yn C sut y byddech yn mynegai cromfachau sgwâr fel $ array [0], $ array [1], $ array [2], chi fynegai yr un modd os ydych yn digwydd i gael eich mynegeion cael eu llinynnau. Amrywiaeth Felly $ array ['a'] a $ ['b']. $ Array [b]. Pam y byddai hyn yn anghywir? Mae'n debygol y bydd yn cynhyrchu rhybudd ond yn dal i weithio. PHP yn tueddu i wneud hynny. Mae'n tueddu i ychydig, "Rydw i'n mynd i eich rhybuddio am hyn, ond Im 'jyst yn mynd i gadw i fynd "Ac yn gwneud beth bynnag y gallaf." Mae'n debyg y bydd cyfieithu hyn i llinyn, ond mae'n bosibl bod ar ryw adeg yn y gorffennol rhywun ddweud diffinio b i fod yn 'HELO BYD'. Felly, yn awr y gallai fod b amrywiaeth cyson a $ [b] mewn gwirionedd yn ei wneud 'HELO BYD'. Rwy'n credu ar y pwynt hwn, neu o leiaf ein lleoliadau PHP, os ydych yn ceisio mynegai i mewn i amrywiaeth ac nad yw allwedd yn bodoli, bydd yn methu. Nid wyf yn credu y bydd yn dim ond eich rhybuddio. Neu o leiaf gallwch ei osod fel nad yw dim ond yn eich rhybuddio, 'i jyst yn syth i fyny yn methu. Y ffordd eich bod yn gwirio i weld a oes gwirionedd yn fath mynegai yn ISSET. Felly, bydd ISSET ($ array ['HELO BYD']) yn dychwelyd ffug. ISSET ($ array ['b']) yn dychwelyd yn wir. Gallwch gymysgu hyn chystrawennau. Rwy'n eithaf siwr beth fyddai hyn yn amrywiaeth y pen draw yn cael yw - Gallwn brofi 'ii maes. O, rwy'n angen PHPWord. Mae hyn yn cymysgu y gystrawen lle rydych yn nodi beth yw'r allweddol yw ac nad ydych yn nodi beth yw'r allweddol yw. Hynny 3 dde yma yn werth. Nad ydych wedi dweud yn benodol beth yw ei allwedd yn mynd i fod. Beth ydych chi'n meddwl ei allwedd yn mynd i fod? [Myfyrwyr] 0. >> Rwy'n dyfalu 0 dim ond am ei fod y cyntaf nid ydym wedi nodi. Gallwn ei wneud mewn gwirionedd ychydig o'r achosion hyn. Felly print_r yn argraffu ailadroddus. Bydd yn argraffu'r amrywiaeth gyfan. Byddai'n argraffu subarrays y rhesi os oedd unrhyw. Felly print_r ($ array); php.test.php. Yw'n edrych fel ei fod yn rhoi ei 0. Mae mewn gwirionedd yn rhywbeth i gadw mewn cof yma, ond byddwn yn mynd yn ôl ato mewn eiliad. Ond beth os wyf yn digwydd i wneud hyn yn mynegai 1? Nid yw PHP yn gwahaniaethu rhwng mynegeion llinyn a mynegeion cyfanrif, hynny ar y pwynt hwn rwyf wedi diffinio dim ond mynegai 1 a gallaf wneud y ddau arae $ [1] a $ array ['1 '] a bydd yn y mynegai un a'r un allweddol. Felly, nawr beth yn eich barn chi 3 yn mynd i fod? >> [Myfyrwyr] 2. >> [Bowden] Rwy'n dyfalu 2. Yeah. Mae'n 2. Beth os ydym yn gwneud hyn yw 10, mae hyn yn 4? Beth ydych chi'n meddwl y mynegai o 3 yn mynd i fod? Rydw i'n meddwl 11. Fy ddyfalu ynghylch yr hyn PHP yn ei wneud - ac yr wyf yn meddwl fy mod i wedi gweld hyn o'r blaen - a yw'n dim ond yn cadw golwg ar yr hyn y mynegai uchaf rhifol caiff ei ddefnyddio hyd yn hyn. Nid yw byth yn mynd i neilltuo mynegai llinyn i 3. Bydd bob amser yn mynegai rhifol. Felly mae'n cadw golwg ar yr un uchaf ei fod yn neilltuo hyd yn hyn, sy'n digwydd i fod yn 10, ac mae'n mynd i roi 11-3. Yr hyn a ddywedais o'r blaen, sylwi ar y ffordd y caiff ei argraffu y casgliad. Mae'n printiau 10 allweddol, allweddol 4, allweddol 11, allweddol d. Neu hyd yn oed gadewch i ni ei wneud - Amcana Doeddwn i ddim yn rhoi 0, ond mae'n argraffu 1, 2, 3, 4. Beth os byddaf yn newid yma? Neu gadewch i ni mewn gwirionedd yn newid hyn 2. Nawr bydd yn argraffu 2, 1, 3, 4. Nid yw PHP yn araeau yn union fel eich bwrdd rheolaidd hash. Mae'n berffaith resymol i feddwl amdanynt fel tablau hash 99% o'r amser. Ond yn eich tablau hash oes unrhyw synnwyr o drefn y mae pethau'n cael eu mewnosod. Felly, cyn gynted ag y byddwch yn mewnosod i mewn i'ch bwrdd hash, cymryd yn ganiataol nad oes rhestr cysylltiedig a gallech farnu o fewn rhestr cysylltiedig a fewnosodwyd yn gyntaf. Ond dyma ni fewnosod cyntaf 2 ac yn gwybod pryd mae'n argraffu hon amrywiaeth bod 2 yn dod yn gyntaf. Nid yw'n ei hargraffu mewn dim ond unrhyw drefn. Mae strwythur y data technegol ei fod yn defnyddio map yn archebu, felly mae'n mapio allweddi i werthoedd ac mae'n cofio ym mha drefn y allweddi yn cael eu mewnosod. Yn y bôn mae'n rhai cymhlethdodau lle mae'n blino i mewn gwirionedd - Lets 'ddeud oes gennych amrywiaeth 0, 1, 2, 3, 4, 5 ac rydych eisiau mynd allan mynegai 2. Un ffordd o wneud hynny, gadewch i ni weld beth sy'n edrych fel. 0, 2, 1, 3, 4. Datosod digwydd i Datosod yn y ddwy newidynnau a mynegeion amrywiaeth. Felly unset ($ array [2]); Nawr beth hyn yn mynd i edrych fel? 2 yn mynd yn unig, felly dyna berffaith iawn. Mwy o blino yw os ydych am i bethau fod fel mewn gwirionedd arae. Byddaf yn rhoi rhifau ar hap. Nawr sylwi fy mynegeion. Yr wyf am iddo yr un fath ag amrywiaeth C ble mae'n mynd o 0 i hyd - 1 a gallaf ailadrodd drosto fel y cyfryw. Ond nid cyn gynted ag y Datosod yn y mynegai ail beth oedd yn y mynegai 3 yn dod yn awr mynegai 2. Yn hytrach, 'i jyst yn cael gwared ar y mynegai ac yn awr ydych yn mynd 0, 1, 3, 4. Mae hyn yn gwbl resymol. 'I' jyst yn blino, ac mae'n rhaid i chi wneud pethau fel sbleis amrywiaeth. Yeah. [Myfyrwyr] Beth fyddai'n digwydd os ydych wedi cael ar gyfer dolen ac rydych eisiau mynd dros yr holl elfennau? Pan cyrraedd 2, a fyddai'n ildio erioed? Ailadrodd dros arae. Mae 2 ffordd y gallwch wneud hynny. Gallwch ddefnyddio rheolaidd ar gyfer dolen. Mae hyn yn un arall cymhlethdod PHP. Rhan fwyaf o ieithoedd, byddwn yn dweud, cael rhyw fath o hyd neu len neu rywbeth dangos hyd arae. Yn PHP mae'n cyfrif. Felly cyfrif ($ array); $ i + +) Gadewch i 'jyst print ($ array [$ i]); Rhybudd: amhenodol gwrthbwyso: 2. Mae'n dim ond yn mynd i fethu. Dyma'r rheswm, ar gyfer y rhan fwyaf erioed, mae angen i chi ailadrodd dros amrywiaeth fel hyn. Gallai fod yn gor-ddweud, ond dydych chi byth angen i chi ailadrodd dros amrywiaeth fel hyn oherwydd PHP yn darparu ei cystrawen foreach lle foreach ($ array â $ eitem). Nawr, os ydym yn argraffu ($ eitem); - we'll ei drafod mewn eiliad - sy'n gweithio 'n anhyfreg ddirwya. Mae'r ffordd y foreach yn gweithio yn y ddadl gyntaf yw'r amrywiaeth eich bod yn ailadrodd drosodd. A'r ail ddadl, eitem, drwy bob tocyn y ddolen ar gyfer mae'n mynd i gymryd y peth nesaf yn y rhesi. Felly cofiwch yr amrywiaeth yn gorchymyn. Y tro cyntaf drwy'r gyfer ddolen, eitem yn mynd i fod yn 123 yna bydd fod yn 12, yna bydd yn fod yn 13, yna bydd yn fod yn 23, yna bydd yn 213. Pethau ca 'n sylweddol' n annaearol pan fyddwch yn gwneud rhywbeth fel foreach. Gadewch i ni weld beth sy'n digwydd oherwydd ni ddylech wneud hyn. Beth os ydym yn unset ($ array [1]); A oedd yn disgwyl yn ôl pob tebyg. Rydych yn ailadrodd dros y array, a phob tro y byddwch chi'n Llwybrau byr y Bysellfwrdd y mynegai cyntaf. Felly, ar gyfer mynegai 0, y peth cyntaf, ar eitem yn werth 0, felly mae'n mynd i fod yn 123. Ond tu mewn i'r ddolen ydym am unset mynegai 1, felly mae hynny'n golygu 12 yn mynd. Felly argraffu. PHP_EOL. PHP_EOL yn unig Newline, ond mae'n dechnegol, yn fwy cludadwy ers newlines i mewn Ffenestri yn wahanol newlines ar Mac a UNIX. Ar Windows Newline yn \ r \ n, ond ym mhob man arall mae'n tueddu yn unig i fod \ n. PHP_EOL ei ffurfweddu fel ei fod yn defnyddio beth bynnag y Newline eich system yn. Felly argraffu hynny. Gadewch i ni beidio print_r ($ array) ar y diwedd. Doedd gen i ddim syniad y byddai hynny'n cael yr ymddygiad. Eitem dal i gymryd ar werth 12 er ein bod yn Datosod yn 12 cyn ydym byth yn cael oddi wrth y rhesi. Peidiwch â chymryd fy ngair ar hyn, ond mae'n edrych fel foreach yn creu copi o'r amrywiaeth ac yna yr eitem yn cymryd yr holl werthoedd y copi hwnnw. Felly, hyd yn oed os ydych yn addasu'r amrywiaeth y tu mewn i'r ddolen ar gyfer, ni fydd yn gofalu. Bydd yr eitem yn cymryd ar y gwerthoedd gwreiddiol. Gadewch i ni geisio Llwybrau byr y Bysellfwrdd iddo. Beth os yw hyn yn $ array [1] = "helo"; Er ein bod yn rhoi "helo" yn y casgliad byth, eitem yn cymryd ar y gwerth. Mae arall chystrawen i foreach dolenni lle rydych yn rhoi 2 newidyn gwahanu gan saeth. Mae'r newidyn cyntaf yn mynd i fod yn allweddol o'r gwerth hwnnw, ac mae'r newidyn ail yn mynd i fod yr union eitem yr un. Mae hyn yn anniddorol yma, ond os ydym yn mynd yn ôl at ein achos gwreiddiol o 'a' -> 1, 'B' -> 1, yma os ydym yn unig ailadrodd ar gyfer pob amrywiaeth fel eitem, eitem yn mynd i fod yn 1 bob tro. Ond os ydym hefyd eisiau gwybod y allweddol sy'n gysylltiedig â'r eitem honno yna rydym yn ei wneud â $ allweddol -> $ eitem. Felly, yn awr gallwn wneud print ($ allweddol. ':'. Nawr mae'n ailadrodd drosodd ac argraffu pob allweddol a'i werth cysylltiedig. Mae beth ychwanegol y gallwn ei wneud yn foreach dolenni yw efallai y byddwch yn gweld y gystrawen. Ampersands cyn enwau amrywiol yn tueddu i fod sut PHP yn gwneud cyfeiriadau. Pan gyfeirir yn debyg iawn i awgrymiadau, nad oes gennych awgrymiadau, er mwyn i chi byth yn delio gyda'r cof uniongyrchol. Ond oes gennych gyfeiriadau lle mae 1 newidyn yn cyfeirio at yr un peth â newidyn arall. Y tu mewn yma gadewch i ni wneud $ eitem. Gadewch i ni fynd yn ôl i 1, 10. Gadewch i ni wneud $ eitem + +; Mae hynny'n dal yn bodoli yn PHP. Gallwch ddal i wneud + +. php.test.php. Rhaid i mi ei argraffu. print_r ($ array); Rydym yn argraffu 2, 11. Os wyf wedi gwneud yr union foreach ($ array â $ eitem), yna bydd yr eitem yn y gwerth 1 y tro cyntaf yn y ddolen. Bydd yn codiad 1-2 ac yna rydym ni'n ei wneud. Felly, yna bydd yn mynd trwy y tocyn ail ddolen a bod eitem yn 10. Mae'n codiadau eitem i 11, ac yna ei daflu i ffwrdd. Yna rydym yn print_r ($ array), a gadewch i ni weld bod hyn yn dim ond 1, 10. Felly, y cynyddiad wnaethom ei golli. Ond foreach ($ array fel & $ eitem) awr yr eitem hon yr un eitem gan fod hyn yn iawn yma. Mae yr un peth. Felly, $ eitem + + yn addasu amrywiaeth 0. Yn y bôn, gallwch hefyd wneud $ k - amrywiaeth> $ eitem a gallwch wneud $ [$ k] + +; Felly, ffordd arall o wneud hynny, rydym yn rhad ac am ddim i addasu eitem, ond ni fydd yn newid ein casgliad gwreiddiol. Ond os ydym yn defnyddio k, sef ein prif, yna rydym yn gall dim ond mynegai yn ein amrywiaeth defnyddio'r allweddol ac codiad hynny. Mae hyn yn fwy uniongyrchol yn addasu ein casgliad gwreiddiol. Gallwch hyd yn oed wneud hynny os am ryw reswm eich bod am y gallu i addasu - Mewn gwirionedd, mae hyn yn gwbl resymol. Doeddech chi ddim eisiau gorfod ysgrifennu $ array [$ k] + +, 'ch jyst eisiau ysgrifennu $ eitem + + ond rydych yn dal yn awyddus i ddweud os yw ($ k ===' a ') yna ychwanegiad eitem ac yna ei argraffu ein casgliad. Felly, yn awr beth ydym yn ei ddisgwyl print_r ei wneud? Beth ddylai gwerthoedd yn cael eu hargraffu? [Myfyrwyr] 2 a 10. >> [Bowden] Dim ond os yw'r allwedd oedd 'a' rydym yn argraffu mewn gwirionedd yn hynny. Mae'n debyg y byddwch yn anaml iawn, os o gwbl, bydd angen i ddiffinio swyddogaethau yn PHP, ond efallai y byddwch yn gweld rhywbeth tebyg lle yr ydych yn diffinio swyddogaeth fel beth bynnag swyddogaeth. Fel arfer byddech yn dweud ($ foo, $ bar) ac yna diffinio ei fod yn beth bynnag. Ond os wyf yn gwneud hyn, yna mae hynny'n golygu bod beth bynnag galw beth bynnag, beth bynnag galw Baz, felly mae'r ddadl cyntaf a basiwyd i Baz ellir ei newid. Gadewch i ni wneud $ foo + +; ac y tu mewn yma gadewch i ni wneud Baz ($ eitem); Nawr rydym yn galw swyddogaeth. Mae'r ddadl yn cael ei gymryd drwy gyfeirio, sy'n golygu os byddwn yn addasu ei rydym yn addasu'r peth a basiwyd mewn Ac argraffu hyn rydym yn ei ddisgwyl - oni bai fy mod cyboledig i fyny cystrawen - rydym yn cael 2, 11, felly roedd mynd i fyny mewn gwirionedd. Rhybudd arnom angen cyfeiriadau yn 2 le. Beth os ydw i'n gwneud hyn? Beth yw ystyr hyn? [Myfyrwyr] Bydd yn newid. >> Yeah. Eitem yn unig yw copi o werth yn y rhesi. Felly, bydd yn newid i eitem 2, ond y casgliad ['a'] yn dal i fod 1. Neu beth os ydw i'n gwneud hyn? Nawr eitem yn cael ei anfon fel copi i Baz. Felly, bydd y copi y ddadl yn cael ei cynyddran i 2, ond byth yn eitem ei hun yn mynd i fyny i 2. A yw'r eitem yr un peth â braced array beth bynnag, felly ni bod amrywiaeth yn mynd i fyny. Felly, y rhai lleoedd ei angen. PHP fel arfer yn eithaf smart am hyn. Efallai y byddwch yn meddwl fy mod am i basio drwy gyfeirio - Hyn oedd mewn gwirionedd yn gwestiwn ar un o'r psets. Roedd yn beth questions.txt lle mae'n dweud, Pam y byddai eisiau trosglwyddo hyn strwythur drwy gyfeirio? Beth oedd yr ateb i hynny? [Myfyrwyr] Felly nid oes rhaid i chi gopïo rhywbeth mawr. >> Yeah. Gall strwythur fod yn fympwyol fawr, a phan fyddwch yn pasio y strwythur mewn fel dadl mae angen i copi y strwythur cyfan i ei throsglwyddo i'r swyddogaeth, ond os ydych yn unig yn pasio'r strwythur drwy gyfeirio yna mae'n dim ond angen i gopïo cyfeiriad 4-beit gan fod y ddadl i'r swyddogaeth. PHP yw ychydig yn gallach na hynny. Os byddaf yn cael rhywfaint o swyddogaeth a dwi'n pasio iddo amrywiaeth o 1,000 o bethau, mae hynny'n golygu ei fod yn mynd i gael i gopïo pob un o'r 1,000 o'r pethau hynny ei throsglwyddo i'r swyddogaeth? Nid yw'n rhaid i chi wneud hynny ar unwaith. Os nad mewnol y swyddogaeth y mae'n mewn gwirionedd yn addasu foo, felly os ($ foo === 'helo') yn dychwelyd yn wir.; Hysbysiad ni fyddwn byth yn newid mewn gwirionedd y tu mewn dadl y swyddogaeth hon, sy'n golygu bod beth bynnag ei ​​basio yn byth fel foo angen i gael ei gopïo oherwydd nad yw'n ei newid. Felly, y ffordd PHP gwaith yn y dadleuon yn cael eu pasio bob amser drwy gyfeirio hyd nes y byddwch mewn gwirionedd yn ceisio ei newid. Nawr, os wyf yn dweud $ foo + +; bydd yn awr yn gwneud copi o foo gwreiddiol ac addasu y copi. Mae hyn yn arbed peth amser. Os nad ydych yn cyffwrdd y casgliad enfawr byth, rydych mewn gwirionedd yn addasu, Nid oes angen i wneud y copi, ond os ydym yn unig roi hyn ampersand sy'n golygu nad yw hyd yn oed gopïo hyd yn oed os ydych yn newid. Mae'r ymddygiad hwn yn cael ei alw'n copi-ar-ysgrifennu. Byddwch yn ei weld mewn mannau eraill, yn enwedig os ydych yn cymryd cwrs sy'n gweithredu system. Copi-on-ysgrifennu yn batrwm eithaf arferol lle nad oes angen i chi wneud copi o rywbeth oni bai ei fod yn newid mewn gwirionedd. Yeah. [Myfyrwyr] Beth os ydych yn cael y cynyddiad y tu mewn i'r prawf, felly byddai dim ond 1 elfen allan o 1,000 angen eu newid? Dwi ddim yn siŵr. Rwy'n credu y byddai'n gopïo y peth cyfan, ond mae'n bosibl ei fod yn smart ddigon - A dweud y gwir, yr hyn yr wyf i'n meddwl ei ddychmygu, a chawsom nifer sy'n edrych fel hyn: $ arae2 = [ Yna mynegai 'a' yn amrywiaeth o [1 2 3 4], a mynegai 'b' yn amrywiaeth o beth bynnag. Fi angen atalnodau rhwng pawb. Dychmygwch mae atalnodau. Yna 'c' yn y 3 gwerth. Iawn. Nawr gadewch i ni ddweud rydym yn ei wneud $ Baz ($ arae2); lle nad yw Baz yn manteisio ar hyn trwy gyfeirio. Felly, $ foo ['c'] + +; Mae hwn yn fath yn enghraifft lle yr ydym yn pasio arae2 fel dadl ac yna mae'n cael ei addasu mynegai penodol o'r casgliad trwy ei incrementing. Rwyf yn onest i ddim syniad beth PHP yn mynd i'w wneud. Gall yn hawdd gwneud copi o'r peth cyfan, ond os yw'n smart, bydd yn gwneud copi o'r allweddi lle bydd hyn yn cael ei werth arbennig ond gall hyn yn dal i gyfeirio at yr amrywiaeth un 1,2,3,4 a gall hyn yn dal i gyfeirio at yr amrywiaeth un. 'N annhymerus' iPad hynny. Rydym yn pasio yn y casgliad lle mae hyn yn guy pwynt i 3, mae hyn yn guy pwyntiau i [1,2,3,4], y boi yn cyfeirio at [34, ...] Nawr ein bod yn ei throsglwyddo i mewn i Baz, rydym yn addasu'r hyn. Os PHP yn smart, gall dim ond gwneud - Rydym yn dal i gopïo rhai cof, ond os oedd hyn subarrays enfawr nythu Nid oedd angen i gopïo rhai. Nid wyf yn gwybod os dyna beth mae'n ei wneud, ond gallaf ddychmygu y mae'n gwneud hynny. Mae hyn hefyd yn fantais eithaf mawr o C dros PHP. PHP yn gwneud bywyd gymaint yn haws ar gyfer llawer o bethau, ond rydych fath o wedi gwbl ddim syniad pa mor dda y bydd yn perfformio oherwydd nid oes gennyf unrhyw syniad o dan y cwfl pan mae'n gwneud y copïau o bethau, oh, yw bod yn mynd i fod yn gopi cysonyn amser, mae'n jyst yn mynd i newid 1 pwyntydd, mae'n mynd i fod yn gopi chwerthinllyd anodd llinol? Beth os na all ddod o hyd i le? A oes yna angen i redeg casgliad garbage i gael lle rhagor? A gall casglu garbage gymryd fympwyol hir. Yn C Nid oes rhaid i chi boeni am y pethau hyn. Mae pob un llinell i chi ysgrifennu gallwch reswm 'n bert lawer am sut y mae'n mynd i berfformio. Gadewch i ni edrych yn ôl ar y rhain. Pa mor braf yw hi nad oes rhaid i chi ddelio â swyddogaethau hash, rhestrau cysylltiedig, neu unrhyw beth fel 'na? Ers i weithio gyda thablau hash mor hawdd yn awr, dyma pos hwyl i weithio ar. Agor i fyny ffeil o'r enw unique.php ac ynddo ysgrifennu rhaglen PHP (A elwir hefyd yn "sgript"). Rydym yn tueddu i'w galw sgriptiau os ydynt yn bethau byr y byddwch yn rhedeg ar y llinell orchymyn. Yn y bôn, unrhyw iaith nad ydych yn llunio ond rydych chi'n mynd i redeg y gweithredadwy ar y llinell orchymyn, gallwch ffonio y sgript gweithredadwy. Gallai Fi jyst yn ogystal ysgrifennu rhaglen C sy'n gwneud hyn, ond nid wyf yn ei alw sgript ers tro cyntaf i mi lunio ac yna rhedeg y deuaidd. Ond mae hyn yn rhaglen PHP rydym yn mynd i alw sgript. Neu os ydym yn ysgrifennu mewn Python neu Perl neu Node.js neu unrhyw un o'r pethau hynny, byddem yn galw nhw i gyd sgriptiau oherwydd eich bod yn eu rhedeg ar y llinell orchymyn ond nid ydym yn llunio nhw. Gallem wneud hyn yn weddol gyflym. Nid ydym yn mynd i ddefnyddio argv. Gadewch i 'jyst chwythu drwy hyn. Ffoniwch yn unigryw, ysgrifennu rhaglen. Gallwch gymryd yn ganiataol y bydd y mewnbwn yn cynnwys un gair fesul llinell. Mewn gwirionedd, bydd argv fod yn eithaf dibwys i ddefnyddio. unique.php. Y peth cyntaf yn gyntaf, rydym am i wirio os ydym wedi bod yn dros 1 gorchymyn-lein ddadl. Yn union fel y byddech yn disgwyl argc a argv yn C, rydym yn dal i gael rhai yn PHP. Felly, os yw ($ argc! == 2), yna ni wnaf ddelio ag argraffu neges neu unrhyw beth. 'N annhymerus' jyst gadael, cod gwall o 1. Gallwn hefyd ddychwelyd 1. Yn anaml iawn yn PHP ydych chi ar hyn o gyflwr lle rydym yn - Fel arfer, rydych chi mewn swyddogaeth a elwir gan swyddogaeth a elwir gan swyddogaeth a elwir gan swyddogaeth. Ac os bydd rhywbeth yn mynd o'i le ac nid oes ond eisiau gadael popeth yn gyfan gwbl, allanfa yn unig yn dod i ben y rhaglen. Mae hyn hefyd yn bodoli yn C. Os ydych chi mewn swyddogaeth yn swyddogaeth mewn swyddogaeth yn swyddogaeth ac a ydych dim ond lladd y rhaglen, gallwch ffonio allanfa a bydd yn dim ond gadael. Ond yn PHP mae hyd yn oed yn fwy prin ein bod ar y lefel uchaf. Fel arfer rydym yn y tu mewn i ryw fath o swyddogaeth, felly rydym yn galw allanfa fel nad oes rhaid i ni ddychwelyd i fyny 1 peth sydd wedyn yn sylweddoli mae gwall fel sy'n dychwelyd i fyny os sy'n cydnabod bod camgymeriad. Nid ydym am i ddelio â hynny, felly gadewch (1); ddychwelyd (1); yn yr achos hwn fod yn gyfwerth. Yna beth rydym am ei agor ydym am fopen. Mae'r dadleuon yn mynd i edrych yn eithaf tebyg. Rydym yn awyddus i fopen ($ argv [1], ac rydym am i agor ar gyfer darllen. Mae hynny'n dychwelyd adnodd yr ydym yn mynd i alw f. Mae hyn yn edrych yn eithaf tebyg i sut mae'n C ac eithrio nid oes raid i ni ddweud * FILE. Yn hytrach, rydym yn unig yn dweud $ f. Iawn. A dweud y gwir, yr wyf yn credu bod hyn hyd yn oed yn rhoi i ni awgrym ynghylch PHP swyddogaeth o'r enw ffeil. PHP Ffeil. Beth mae hyn yn mynd i wneud yw darllen ffeil gyfan yn arae. Nid oes hyd yn oed angen i fopen hynny. Mae'n mynd i wneud hynny ar eich rhan. Felly, $ llinellau = ffeil ($ argv [1]); Nawr holl linellau y ffeil mewn llinellau. Nawr rydym am i ddatrys y llinellau. Sut allwn ni ddatrys y llinellau? Rydym yn datrys y llinellau. Ac yn awr y gallwn ni eu hargraffu neu beth bynnag. Mae'n debyg mai'r ffordd hawsaf yw foreach ($ $ llinellau fel llinell) adleisio $ llinell; [Myfyrwyr] Ni fyddem hyd yn oed yn croesi llinellau drwy gyfeirio rhywbeth yn fath? Dyma lle y byddai fath yn cael ei ddiffinio fel math swyddogaeth (& $ array). Pan fyddwch yn ffonio y swyddogaeth nad ydych yn ei drosglwyddo trwy gyfeirio. Mae'n swyddogaeth sy'n diffinio fel ei gymryd fel cyfeirnod. Mae hyn mewn gwirionedd yn union beth aeth o'i le pan fyddwn yn rhoi popeth at ein gweinyddion pan aethon ni 5.3-5.4. Hyd at 5.4, roedd hyn yn gwbl resymol. Nid yw swyddogaeth yn disgwyl ei gael fel cyfeirio, ond gallwch ei drosglwyddo fel cyfeiriad felly os yw'r swyddogaeth yn digwydd i addasu, mae'n dal i addasu. Fel o 5.4, nid ydych yn fod i wneud hyn. Felly, yn awr yr unig ffordd i chi basio trwy gyfeirio yw os bydd y swyddogaeth benodol yn ei wneud. Os nad ydych am ei addasu, yna mae angen i chi wneud copi $ = $ llinellau a chopi pasio. Felly nawr Bydd llinellau yn cael eu cadw, a bydd copi yn cael ei newid. php.unique.php. Efallai fy mod wedi cyboledig i fyny rhywbeth. Annisgwyl 'fath'. Mae mynd i fod yn rhywbeth sy'n gwneud hyn i ni. Dyw hi ddim hyd yn oed yno. Hysbysiad pan fyddwch yn darllen y llawlyfr bod y ddadl gyntaf yn disgwyl i fod yn arae ac mae wedi cymryd trwy gyfeirio. Pam mae hyn yn cwyno i mi? Gan fy mod yn cael y fath swyddogaeth yn dal i mewn yma nad wyf yn dymuno. Iawn, php.unique.php. Doeddwn i ddim yn ei drosglwyddo ddadl gan nad oes gen i ffeil. Mae'n php.unique.php ar test.php. Dyma test.php argraffu i gyd allan mewn trefn 'n glws datrys. Hysbysiad bod drefn datrys yn fath o 'n annaearol am ffeil cod oherwydd bod ein holl linellau gwag yn mynd i ddod yn gyntaf wedyn yn mynd i ddod pob un o'n 1 indentations lefel yna dewch ein holl indentations ddim. Yeah. >> [Myfyrwyr] Felly, ar gyfer y cod ffynhonnell nad oedd yn pasio trwy gyfeirio? A yw hynny'n pasio yn gyffredinol gan werth? [Bowden] Pan fyddwch yn ffonio swyddogaeth byth, mae'n penderfynu a gaiff ei basio trwy gyfeirio. Dyma'r diffiniad swyddogaeth sy'n penderfynu a gaiff ei basio trwy gyfeirio. Ac edrych ar y diffiniad swyddogaeth fath neu dim ond yn edrych ar hyn, mae'n cymryd y ddadl drwy gyfeirio. Felly, ni waeth a ydych am i gymryd iddo gan gyfeirio, mae'n mynd ag ef drwy gyfeirio. Mae'n addasu'r amrywiaeth yn ei le. Mae hyn nid yn unig yn cael ei ganiatáu. Dydych chi ddim hawl i wneud hyn. >> [Myfyrwyr] O, iawn. [Bowden] Mae hyn, math yn mynd i gymryd llinellau drwy gyfeirio a'i addasu. Ac eto, os nad ydych chi ddim eisiau iddo wneud hynny, fe allech chi wneud copi o'r fath. Hyd yn oed yn yr achos hwn, nid copi mewn gwirionedd yn gopi o linellau. 'I jyst yn cyfeirio at yr un peth hyd nes yn gyntaf yn cael ei haddasu, lle mae'n cyntaf yn mynd i gael haddasu yn y swyddogaeth fath, lle, oherwydd ei fod yn gopi-ar-ysgrifennu, sydd bellach yn gopi o gopi yn mynd i gael eu gwneud. Gallwch hefyd wneud hyn. Dyna y lle arall gallwch weld ampersand. Byddwch yn gweld yn dolenni foreach, byddwch yn ei weld yn y datganiadau swyddogaeth, a byddwch yn ei weld pan dim ond neilltuo newidynnau. Nawr rydym wedi cyflawni unrhyw beth drwy wneud hyn oherwydd bod copi a llinellau yn llythrennol yr un peth. Gallwch ddefnyddio llinellau a chopïo gyfnewidiol. Gallwch wneud unset ($ copi), ac nad yw'n llinellau ei osod, caiff 'ch jyst yn colli eich cyfeirio at yr un peth. Felly, fel y pwynt hwn, yn awr llinellau yw'r unig ffordd y gallwch gael mynediad llinellau. Cwestiynau? Yeah. [Myfyrwyr] Hollol oddi ar y pwnc, ond nid oes rhaid i chi gau'r PHP gyda - >> Nid ydych yn ei wneud. Iawn. [Bowden] byddwn yn mynd mor bell â dweud ei fod yn arfer gwael i gau nhw. Dyna fwy na thebyg yn gor-ddweud, yn enwedig mewn sgript, ond gadewch i ni weld beth fydd yn digwydd os byddaf yn gwneud hyn. Dyna wnaeth ddim. Beth os ydw i eisiau - [gynt] Angen i mi basio dadl. Shoot. Gelwais yn anghywir. Felly php.unique.php gyda dadl. Nawr Dydw i ddim hyd yn oed angen hyn. 'N annhymerus' pasio ei fod yn ddadl ddilys. Mae hyn yn argraffu beth bynnag ei ​​fod yn argraffu. Rwy'n argraffu copi a chopi nid yn bodoli. Felly llinellau. Mae'n argraffu popeth, ac yna sylwi hyn i gyd junk i lawr yma, oherwydd yn PHP unrhyw beth sydd y tu allan tagiau PHP yn unig yn mynd i gael ei argraffu yn llythrennol. Dyna pam HTML, mae mor braf y gallaf ei wneud div blah, blah, blah dosbarth neu beth bynnag, blah, blah, blah, ac yna gwneud rhywfaint o cod PHP, ac yna gwneud div diwedd. Ac yn awr argraffu hyn yr wyf yn cael fy div 'n glws i fyny top, popeth a PHP printiedig, div ar y gwaelod. Trychinebus pan fydd rhywbeth fel hyn yn digwydd, sydd yn eithaf cyffredin, dim ond Newline crwydr ar waelod y ffeil. Fyddech chi ddim yn meddwl y byddai'n bod fawr o gytundeb hyd nes y byddwch yn ystyried y ffaith bod gyda phorwyr - Sut ailgyfeiriadau gwaith neu yn y bôn penawdau gwaith o gwbl, pan fyddwch yn gwneud eich cysylltiad i'r wefan ac mae'n anfon yn ôl pob un o'r penawdau a phethau fel ymateb 200 neu ymateb ailgyfeirio neu beth bynnag, penawdau yn ddilys hyd nes y beit gyntaf o ddata yn cael ei anfon. Gallwch ailgyfeirio filoedd o weithiau, ond cyn gynted ag y beit gyntaf o ddata yn cael ei anfon nad ydych yn fod i ailgyfeirio eto. Os oes gennych Newline crwydr ar waelod y ffeil a gadewch i ni ddweud eich bod yn defnyddio'r swyddogaeth hon ac yna rydych am - Lets 'ddeud ei fod yn ffeil arall sy'n index.php ac rydych require_once rhywbeth - Ni allaf feddwl am enghraifft dda o hynny. Mae'r mater yn digwydd pan fydd y llinell hon ar y gwaelod yn cael ei adleisio. Dydych chi ddim eisiau unrhyw beth i wedi eu hadleisio eto. Er nad oeddech yn bwriadu ar unrhyw beth cael adleisio, rhywbeth oedd yn cael eu hadleisio ac felly, yn awr nad ydych yn fod i anfon penawdau mwy o a ydych yn mynd i gael cwynion. Rydych nid yn unig yn angen y tagiau cau. Os ydych yn bwriadu gwneud rhywbeth gyda HTML - ac mae'n hollol resymol i'w wneud i lawr yma div beth bynnag ac yna yn y fan hon gallwch chi neu os nad ydych yn gallu eu cynnwys. Nid oes llawer o bwys. Ond mewn sgriptiau PHP ei bod yn brin i gau. Pan fydd popeth yn PHP, popeth, nad ydych yn wir angen inni ei gau / ni ddylech ei gau. Delio gyda llinynnau yn llawer brafiach nag yn C. Yn PHP, gallwch bennu llinyn gyda dyfyniadau sengl neu ddwbl. Gyda dyfynodau sengl na allwch ddefnyddio "escape" dilyniannau. Gyson ddianc, blah, blah, blah. Felly printf yn brin iawn yn PHP. Amcana byddwn yn defnyddio printf os oeddwn i eisiau gwneud rhyw fath o beth - yn pset 5 eich bod yn defnyddio sprintf neu beth bynnag. Ond rydych am ei wneud 001.jpg a 002.jpg. Felly, ar gyfer y math yna o beth lle Fi 'n weithredol am fformadu'r testun byddwn yn ei ddefnyddio printf. Ond, fel arall byddwn yn ei ddefnyddio concatenation llinyn. Dwi byth yn wir yn defnyddio printf. Rydym yn unig yn gwahaniaethu rhwng y manylion dyfyniadau sengl a dyfynodau dwbl. Y gwahaniaeth mwyaf yw bod dyfynodau sengl, bydd yn cael ei argraffu yn llythrennol. Nid oes unrhyw fath ddata torgoch yn PHP, yn wahanol i C, felly mae hyn yn cyfateb i hyn. Maent yn ddau llinynnau. A'r peth braf am llinynnau dyfyniad sengl yn y gallwn i ddweud 'helo byd!' blah, blah, blah, $ $ Wooo. Beth sy'n digwydd pan fyddaf yn argraffu hwn yw y bydd yn argraffu yn llythrennol. Gadewch i ni gael gwared o'n holl bethau. Felly adleisio $ STR1; Mae'n llythrennol argraffu pob un o'r pethau hynny: arwyddion ddoler, slaes n, y byddech yn meddwl y byddai yn newlines - pob un o'r pethau hynny y bydd yn argraffu llythrennol. Yr unig beth mae angen i chi ddianc yn dyfynodau sengl oherwydd fel arall byddai'n credu ei bod yn cau'r dyfynodau sengl. Dyfynodau dwbl, yn gyfan gwbl wahanol. Rydym eisoes yn gweld y amlygu cystrawen yn cluing i ni ar beth sydd ar fin mynd mawr o'i le. php.unique. Amhenodol amrywiol: wooo gan fod hyn yn cael ei ddehongli fel newidyn a elwir yn wooo. Dyfynodau dwbl yn gadael i chi mewnosod i mewn i newidynnau - Lets 'ddeud $ enw = "Rob"; Felly adleisio "Helo, fy enw i yw $ enw!!"; Mae'n cydnabod hyn fel newidyn. Pan fyddaf yn rhedeg hynny - a byddaf yn ychwanegu Newline - Hi, fy enw i yw Rob!! a helo byd!! Mae hyn yn byth oherwydd yr wyf gwared ar y argraffu wooo uchod. Mae yna 1 cam pellach y gallwch ei wneud. $ Array = [1, 2, 3]; Beth os ydw i eisiau argraffu mynegai cyntaf o amrywiaeth? Rydych yn gwneud $ array [0]. Mae'r amlygu cystrawen yn cliw. Beth mae hyn yn mynd i'w wneud? php.unique. Hi, fy enw i yw 1!! nad yw hyn yr wyf eisiau. Tynnu sylw at Cystrawen dweud celwydd i mi. Gadewch i ni geisio 'a' -> 1, 'b' -> 2. Dyna sut y byddai rhaid i mi ei ysgrifennu. Dyfynbris annisgwyl sengl (T_ENCAPSED blah, blah, blah, blah, blah). Y syniad yw nad yw'n cydnabod hyn fel rhan o'r casgliad. Dyw hi ddim yn cydnabod hyn fel array mynegeio gan lythyr a. Byddwch am wneud hynny amgylchynu gan braces cyrliog, ac yn awr bydd beth bynnag sydd yn y brês cyrliog yn cael ei rhyngosod, sef y gair a ddefnyddiwn ar gyfer hudol mewnosod newidynnau hyn yn y mannau cywir. Nawr gwneud hyn, php.unique, a Hi, fy enw i yw 1!! yn ôl y disgwyl neu Hi, fy enw i yw Rob!! Un peth sy'n fath o neis am dyfynodau sengl yw bod - Mae rhywfaint o gost i interpolating. Os ydych yn defnyddio dyfynodau dwbl, y cyfieithydd wedi mynd dros y llinyn, gwneud yn siŵr bod, "O, dyma amrywiol. Nawr mae angen i mi fynd yn cael y newidyn a mewnosod yma." Hyd yn oed os nad ydych yn defnyddio unrhyw newidynnau, dim byd tu mewn dyfynodau dwbl hyn sydd angen ei rhyngosod, ond bydd yn dal yn arafach oherwydd mae angen iddo fynd dros y dyfynodau dwbl chwilio am bethau y mae angen eu rhyngosod. Gall dyfyniadau Felly un fod ychydig yn gyflymach os nad oes dim angen rhyngosod, ac yr wyf yn tueddu i hyd yn oed yn defnyddio dyfynodau sengl ar gyfer, 'Helo, fy enw i yw'. $ Array ['a'] beth bynnag. Mae hynny'n mynd i fod yn cyfateb i'r hyn oedd gennym o'r blaen. Ond mae'n fater o ddewis. Os ydych yn defnyddio PHP, mae'n debyg nad ydych yn poeni am y gwahaniaeth cyflymder. Nid oes digon i resymu nhw allan i ddechrau. Unrhyw gwestiynau terfynol? Nid ydym mewn gwirionedd yn ddim hyd yn oed gael drwy y cyfan ohono, ond y pethau hyn yn ddiflas. Y peth olaf y fath o braf yn PHP yw pan fyddwch yn delio â HTML, byddwch yn ei ddefnyddio ychydig, felly mae'r gystrawen shortcut 'n glws ar gyfer argraffu newidyn. Heb roi PHP yma, gelwir hyn yn tagiau byr. Swyddogol fel o PHP 5.4, mae hyn yn anghymeradwy. Fe'ch argymhellir i roi php. Mae hyn yn dal i gael cymorth, tagiau mor fyr ag y