[Powered by Google Translate] [8. jagu - mugavam] [Rob Bowden - Harvardi Ülikool] [See on CS50. - CS50.TV] Need nädala jagu märkmeid saab olema üsna lühike, nii et ma olen lihtsalt läheb edasi rääkida, kutid ei kavatse hoida küsimusi, ja püüame täita nii palju aega kui võimalik. Paljud inimesed arvavad, et see pset ei pruugi raske, aga see on väga pikk. Pset spec ise võtab aega tunni lugeda. Anname teile palju SQL mida võiks vaja kasutada. Me sõelub palju, seega ei tohiks olla liiga halb. Kas keegi on alustatud või lõpetatud? See on viimane pset. Oh, mu jumal. Tavaliselt seal JavaScript üksteise järel, kuid kalender muutus asjad teeb kõike 1 nädal lühem, ja me ei pea enam JavaScript pset. Ma ei tea, kuidas see mõjutab kas JavaScript läheb ilmuvad eksam või Viktoriin 1. Ma kujutan ette, see on midagi sellist, mida pead teadma kõrgetasemeline asju JavaScript, kuid ma kahtlen, et me tahaks lihtsalt anda teile kohe JavaScripti koodi kuna sa ei ole olnud pset ta. Aga see on kraami viktoriin läbivaatamise järgmisel nädalal. Jagu küsimusi. Palju see kraam on veidi halvasti sõnastatud, kuid me arutame miks. Erinevalt C, PHP on "dünaamiliselt trükitud" keel. Mida see tähendab, küsite? Noh, hüvasti kõik need char, float, int ja muud märksõnad, mida tuleb kasutada deklareerimisel muutujate ja funktsioonide C. PHP, muutuja tüüp määrab väärtuse, et see hoiab praegu. Nii et enne kui me kirjuta see kood faili nimega dynamic.php, PHP on dünaamiliselt kirjutatud. See on tõsi. Ma ei nõustu sellega, et see tähendab, et me ütleme hüvasti char, float, int, ja muid märksõnu. Täpse vahe dünaamiliselt trükitud ja teise võimalusena mis on staatiliselt kirjutatud, et dünaamiliselt trükkida, kõik oma tüüpi kontroll ja värki juhtub töötamise ajal, samas staatiliselt kirjutatud see juhtub kompileerimise ajal. Sõna staatiline üldiselt tundub tähendavat kompileerimise ajal asju. Ma arvan, et on ka muid kasutusvõimalusi, aga ka C, kui te deklareerite staatiline muutuja, selle ladustamine eraldatud kompileerimise ajal. Siin dünaamiliselt trükitud tähendab lihtsalt, et - C, kui püüate lisada string ja täisarv, kui sa kompileerida, see läheb kurdavad, sest see läheb öelda, et sa ei saa lisada int ja pointer. See lihtsalt ei ole kehtiv operatsiooni. See on teine ​​asi, et me jõuame teine. Aga see omamoodi kontroll, et ta kaebab kompileerimise ajal, on staatiline tüüp kontroll. On keeli, kus sa ei pea ütlema, char, float, int, ja kõik need asjad, kuid keelt ei saa öelda kontekstist tulenevalt asi, mis tüüpi see peaks olema, kuid see on ikka staatiliselt kirjutatud. Nii et kui te võtate 51, ocaml, sa ei pea kunagi kasutage seda tüüpi, kuid see ikka kompileerimise ajal ütled, ei saa seda teha, sest sa segamine int ja string. Dünaamiliselt kirjutatud lihtsalt tähendab, et millalgi läbijooksuaeg sa lähed, et saada kaebust. Kui olete ka kasutada Java enne, üldiselt peaaegu iga C-tüüpi keel saab olema staatiliselt trükkida, nii C, C + +, Java, kõik need on üldiselt staatiliselt kirjutatud. Java, kui sa kompileerida midagi ja sa räägid string s võrdub uus midagi, mis ei ole string, et läheb kurdavad, sest seda laadi lihtsalt ei sobi omavahel. See saab kurdavad kompileerimise ajal. Aga tal on ka mõned dünaamiline aeg asju meeldib, kui sa püüad koo midagi tüübile, mis on täpsem kui praegune tüüp, seal on midagi ta saab teha kompileerimise ajal kontrollida, kas seda valatud ei kavatse nõustuda. Java on ka mõned dünaamilist tüüpi kontroll, et niipea kui ta saab selle koodirida kui see on tegelikult täidesaatva, võib ta tegema hakkab enamus kontrollida, kas see enamus oli kehtiv esiteks, ja kui ei olnud, siis see läheb kurdavad, et teil on vale tüüpi. Dünaamiline tüüp kontrollida. Kirjutage see fail nimega dynamic.php. Dynamic.php. Ma unzip, et formaatimine. Meil on muutuja, seadsime selle täisarv 7, siis me ei kavatse seda trükkida ja% s - Oh, me oleme trükkimine tüüpi, nii gettype pöördub jälle tüüpi muutuja. Me lihtsalt trüki tüüp ikka ja jälle. Me lihtsalt php.dynamic.php. Me näeme, et see muutub täisarv string Boole'i ​​kui me läheme läbi. C ei ole Boole'i ​​andmetüüp, ei ole string andmetüüpi. Seal on char * ja Boole'i ​​lihtsalt kipub olema int või char või midagi. PHP tüüpi ei ole, ja see on üks suur eeliseid PHP üle C - et string toimingud on lõpmatult lihtsam PHP kui C. Nad lihtsalt tööd. Nii et me tuleme siia tagasi. Jooksime dynamic.php. See ütleb PHP tõlk, nimetatakse php, joosta PHP koodi dynamic.php. Kui teil on mingeid vigu fail, tõlk ütlen teile! Tõlk, see on teine ​​suur vahe PHP ja C. C teil on koguda midagi ja siis sa jooksed, et kompileeritud faili. PHP-s saad kunagi kompileerida midagi. Nii PHP tõlk on põhimõtteliselt lihtsalt loed seda rida-realt. See tabab var = 7, siis see tabab printf siis see tabab var siis see tabab printf ja nii edasi. Seal on natuke koostamise ta teeb, ja see vahemälu tulemused nii et kui sa käivitada skripti hiljem võite teha mõned, kuid põhimõtteliselt on see rida-realt asjad. See tähendab, et palju optimeerimist, et me saame C, nagu koostamisel, see on lihtsalt üldiselt tõlkija saab teha palju trikke teile. See võib võtta välja kasutamata muutujaid, siis saab teha kõiki neid erinevaid asju, ta võib teha saba rekursioon. PHP sa ei hakka seda eelist sest see on lihtsalt kavatse alustada täidesaatva rida-realt, ja see ei ole tegelikult ära need asjad nii lihtsalt kuna see ei ole 1 suur koostamine pass asja üle ja siis täitmist; see on lihtsalt rida-realt. Nii et tõlk. Tagasi meie dünaamiline kirjutades: päris lahe, ah? Te kindlasti ei saa seda teha, et C! Nüüd, vaata kui saad aru tüübi iga järgmise väärtused. Vaadake seda viite. Nii 3.50. Mis tüüpi sa arvad, et see saab olema? Siin on liiki meil. Meil on bools, täisarvud, ujuva punkti, stringid, massiivid, esemeid, ja siis ressursse, mis on selline ebamäärane. Ma arvan, et seal on tegelikult näiteks siin. Siis on NULL. NULL on eritüüpi. Erinevalt C, kus NULL on lihtsalt kursor aadressiga 0, PHP, NULL on oma liik, kus ainsaks kehtivaks asi seda liiki on NULL. See on palju kasulikum veatuvastuse. C, kus meil oli see teema, kus, kui sa tagasi NULL, kas see tähendab, et sa tagasi NULL pointer või kasutades NULL tähenda viga või kõik see segadus oli meil üks punkt. Siin jälle NULL tähendab üldiselt viga. Palju asju ka tagasi false viga. Aga point on NULL tüüp, ainus asi on NULL tüüp on NULL. Siis tagasihelistamise on nagu saate määratleda mõned anonüümsed funktsioonid. Sa ei pea andma funktsiooni nime, aga sa ei pea tegelema, et siin. Vaadates tüüpi, et nad ootavad, et me teaksime, Mis sa arvad tüüpi 3,50 on? >> [Üliõpilane] Float. Jah. Nii siis siin, mis sa arvad tüüpi see on? >> [Üliõpilane] massiivi. Jah. Esimene oli float, teine ​​on massiiv. Pange tähele, et see massiivi ei ole nagu C massiivi kus teil on indeks 0 on mingi väärtus, indeks 1 on mingi väärtus. Siin indeksid, b ja c ja väärtused on 1, 2 ja 3. PHP ei ole vahet assotsiatiivne massiiv ja lihtsalt tavalise massiivi kui sa arvad seda ka C. On vaid see, ja all kapuuts regulaarne massiiv on lihtsalt assotsiatiivne massiiv kus 0 kaarte mingi väärtus samal viisil kaarte mingi väärtus. Seetõttu PHP saab päris halb tõesti kiire koodi / võrdlusuuringute asjad kuna C, kui te kasutate massiivi sa tead, et tutvumise liige on pidevalt aega. PHP tutvumise liige on kes teab kui palju aega? See on ilmselt pidev kui see hashes õigesti. Kes teab, mida see tegelikult teeb selle all kapuuts? Sa tõesti vaja vaadata rakendamise näha, kuidas see läheb tegeleda sellega. Nii siis fopen. Ma arvan, et siin olgem lihtsalt PHP manuaal fopen vaadata tagastab tüüp. Me näeme siin võid otsida päris palju tahes funktsiooni PHP manuaal ja see on omamoodi mees leht PHP. Tagastab tüüp saab olema ressurss. Sellepärast ma vaatasin seda, sest me ei ole tegelikult määratleda ressurss. Idee ressurss, C teil mingi sain FILE * või mis iganes; PHP ressurss on oma faili *. See, mida sa lähed tuleb lugemine, see on, mida sa lähed tuleb kirjalikult. See on tavaliselt väline, nii et see on ressurss, mida saab tõmmata asju ja viska asju. Ja lõpuks, mida on tüüpi NULL? >> [Üliõpilane] NULL. Jah. Nii et ainus asi, mis on NULL NULL. NULL NULL. Üks tunnusjoon PHP tüüp süsteem (hea või halb) on tema võime žongleerima tüübid. Kui sa kirjutada rida PHP koodi, mis ühendab väärtusi eri tüüpi, PHP püüan teha mõistlik asi. Proovige iga järgneva rida PHP koodi. Mis välja printida? Kas see, mida sa oodata? Miks või miks mitte? See fakt PHP teebki see, mida me nimetame nõrgalt kirjutatud. Nõrgalt kirjutatud ja tugevalt trükkida, on mitmeid eri kasutusalasid sellistel tingimustel, kuid enamik inimesi kasutab nõrgalt kirjutatud ja tugevalt tipitud tähendab selline asi kus ("1" + 2); mis töötab. C, mis ei tööta. Võite ette kujutada, see ei tööta. Paljud inimesed segatakse dünaamiline kirjutades ja nõrk kirjutades ja staatiline kirjutades ja tugev kirjutades. Python on järjekordne näide keel, mis on dünaamiliselt kirjutatud. Võite viska ümber liigid muutujad ja see läheb määrata läbijooksuaeg viga kontrolli tarvis. Python see läheb täide see ja see näeb ("1" + 2); ja see ei õnnestu, sest ta ütleb, et sa ei saa lisada string ja täisarv. PHP, mis on sama dünaamiliselt kirjutatud, see ei õnnestu. Nõrk kirjutades on pistmist, et ta teeb asju liigid et ei ole tõesti mõtet tingimata. Nii ("1" + 2), ma kujutan ette, et on string 12, Ma kujutan ette, et oleks string 3, Ma kujutan ette, et oleks täisarv 3. See ei pruugi täpselt määratletud, ja me ilmselt näeme siin et kui me printida ("1" + 2), see on ilmselt läheb lõpuks on erinevad kui trükkimine (1 + "2"). Ja see kipub olema, minu arvates halvemuse poole. Siin võib proovida neid. Teine väike trikk umbes PHP on sa ei pea tegelikult kirjutada faili. See on selle käsu režiimis. Nii et php-r, siis me ei viska käsk siin: "Print ('1 '+ 2);" ja ma viskan uue rea. See trükitud 3. Tundub, et see prindib 3 ja see on täisarv 3. Nii et nüüd proovime teistpidi: "Print (1 + 2"); Me saame 3 ning see on see ka saab olema täisarv 3? Ma ausalt ei tea. Tundub, et on järjepidev. Ei ole kunagi mingit võimalust see on string 12 või midagi sellist sest PHP, erinevalt JavaScript ja Java liiga, on eraldi operaatori jaoks ahel. Ketistamine PHP on täpp. Nii trükkimine (1. '2 '); Läheb meile 12. See kipub tekitada segadust, kus inimesed püüavad teha midagi str + = mõne muu asi, et nad tahavad lisada kohta oma lõpu string, ja mis on läbi kukkunud. Sa pead tegema tn. = Nii et ärge unustage ahel PHP on punkt. Muud asjad, mida proovida: print ("CS" + 50); Ma ütlesin teile, et ei ole lootust et see põhjustaks CS50 alates ahel ei ole +. Mis sa arvad, et see läheb lõpuks on? Ma ausalt ei ole absoluutselt aimugi. Tundub, et see on vaid 50. See näeb string, ja ma võin kihla vedada, kui me paneme 123CS - See näeb esimest stringi, see üritab lugeda täisarv see või number saada. Sel juhul ta peab 123CS. "See ei ole loogiline kuna täisarv, nii et ma olen lihtsalt kavatse arvan 123". Nii et 123 + 50 saab olema 173. Ja siin see algab loed seda kui täisarv. See ei näe midagi, nii see lihtsalt kohtleb 0. Nii et 0 + 50 saab olema 50. See ma olen eeldades kavatseb teha midagi sarnast. Ma mõtlesin 99. Jah, sest see läheb tegema esimese - Nii 99. Siin (10/7), kui see oleks C, siis milline oleks selle tagasi? [Üliõpilane] 1. >> Jah, see oleks 1 sest 10/7 on jagamisel 2 täisarvud. Täisarv jagatud täisarv läheb tagasi täisarv. See ei saa naasta 1 punkt mis iganes see oleks, nii et see lihtsalt läheb tagasi 1. Siin trükkimine (10/7), see läheb tegelikult tõlgendada seda. Ja see tähendab, et kui sa tegelikult teha tahad täisarv ümardamine ja värki, sa pead tegema print (põrand (10/7)); C on ilmselt imelik, et saab toetuda täisarv kärpimise regulaarselt, aga PHP ei saa, sest see automaatselt muuta see sularahaga. Ja siis (7 + true); mis sa arvad, et see saab olema? Olen aim 8, kui see saab tõlgendada tõsi on 1. Tundub, et see on 8. Nii et kõik, mida me oleme teinud viimase 10 minuti sa peaksid kindlasti ei tee. Näete kood, mis seda teeb. See ei pea olema nii lihtne kui see. Sa oleks võinud 2 muutujate ja 1 varieeruv juhtub olema string ja muud muutuva juhtub olema int, ja siis lisada need muutujad koos. Kuna PHP on dünaamiliselt kirjutatud ja see ei tee mingit tüüpi kontroll teile Ja kuna see on nõrgalt kirjutatud ja kuna see lihtsalt automaatselt visata need asjad kokku ja kõik saab lihtsalt töö, see on raske isegi tean, et see muutuja peab olema string nüüd, nii et ma ei tohiks lisada see seda muutujat, mis on täisarv. Hea tava on, kui muutuja on string, hoida seda stringi igavesti. Kui muutuja on int, hoida seda int igavesti. Kui soovite tegeleda täisarvud ja stringid, saate varsint - see on JavaScript. Intval. Ma teen seda kogu aeg. PHP ja JavaScript ma segada kõike. Nii intval läheb tagasi täisarv muutuja väärtuse. Kui võtame ka "print (intval ('123 ')); saad 123. Intval ise ei kavatse seda teha tšeki meile, et see on ainult täisarv. PHP manuaal, seal on lihtsalt nii palju funktsioone kättesaadavad, Nii et siin ma arvan, mida ma kasutan on is_numeric esimene. Ma arvan, et tagastada vale. See on teine ​​asi, me peame minema üle on ===. Nii is_numeric ('123df "), siis ei mõtle, et kui is_numeric. C oleksite itereerima üle kõik märgid ja vaadata, kui iga märk on number või mis iganes. Siin is_numeric kavatseb teha, et meie jaoks ja see on jälle vale. Nii et kui ma trükitud, et see trükitud midagi, et siin olen võrreldes seda näha, sa juhtumisi vale? Ja nüüd see prindib 1. Ilmselt see prindib 1 tõeliste printimise asemel tõsi mis tõsi. Ma ei tea, kas ma print_r. Ei, see teeb ikka 1. Tulles tagasi ===, == endiselt olemas, ja kui sa rääkida Tommy ta ütleb == on täiesti korras. Ma ütlen, et == on kohutav ja sa ei tohi kunagi kasutada ==. Erinevus on, et == võrdleb asjad kus see võib olla tõsi, isegi kui nad ei ole sama tüüpi, arvestades === võrdleb asju ja kõigepealt kontrollid on nad sama tüüpi? Jah. Okei, nüüd ma lähen, et näha, kui nad tegelikult võrrelda olema võrdne. Sa saad imelikke asju nagu 10 võrdub - Vaatame, mida see ütleb. Nii ('10 '== '1 e1'); See tagastab tõsi. Kas kellelgi on mingeid arvailtaisiin miks see tagastab tõsi? See ei ole ainult selles. Võib-olla on see vihje. Aga kui ma seda muuta, et f - darn it! Hoian kasutades jutumärgid. Põhjus jutumärgid on karjuma mind, sest ma olen panna see jutumärgid. Nii et ma võiks põgeneda jutumärgid siin, kuid ülakoma oleks lihtsam. Nii ('10 '== '1 F1'); ei prindi õige. ('10 '== '1 E1'); prindib tõsi. [Üliõpilane] Kas see hex? >> See pole hex, kuid see on lähedal, et see on nagu - 1E1, teaduslik kuju. Ta tunnistab, 1E1 kui 1 * 10 ^ 1 või mis iganes. Need on võrdsed täisarvud. Kui me seda teeme === siis see saab olla vale. Ma tegelikult ei tea, kui me teeme == kuidas (10 ja '10abc ');? Hea küll. Nii et see on tõsi. Nii lihtsalt meeldib, kui sa tegid (10 + '10abc ") ning oleks 20, siin (10 == '10abc '); on tõsi. Isegi hullem on asjad (väär == NULL); on tõsi või (väär == 0); on tõsi, (vale == []); On imelik juhtumid - See on üks neist, imelik juhtudel. Pange tähele, et (väär == []); on tõsi. ('0 '== False); on tõsi. ('0 '== []); On vale. Nii == ei ole mingil viisil transitiivne. saab olema võrdne b ja võib olla võrdne c, aga b ei pruugi olla võrdne c. See on jõledus mulle, ja siis tuleb alati kasutada ===. [Üliõpilane] Kas me teeme! == Ka? >> [Bowden] Jah. Samaväärne oleks! = Ja! ==. See on tegelikult kasvada pset spec kus palju funktsioone tulu - PHP manuaal on hea midagi. See paneb suure punase kasti "See tagastab false, kui seal on viga." Aga tagasi 0 on täiesti mõistlik asi tagasi. Mõtle mõni funktsioon, mis eeldatavasti tagasi täisarv. Oletame, et see funktsioon peaks lugema ridade arvu fail või midagi. Tavaolukorras te kaotate seda funktsiooni faili ja see läheb tagasi täisarv, mis tähistab ridade arvu. Nii et 0 on täiesti mõistlik number, kui fail on lihtsalt tühi. Aga kui sa andke seda vigane fail ja funktsioon juhtub tagasi false kui te kaotate see vigane fail? Kui sa just ei == sa ei eristades puhul vahel vigane fail ja tühi fail. Kasutage alati ===. See on kõik need. PHP, massiivi tüüp on erinev sellest, mida sa oled harjunud C. Tõepoolest, siis võib olla juba märganud seda üle, kui nägid, et see on tüüpi massiiv. Sulg süntaks on uus nagu PHP 5.4, mis on uusim versioon PHP. Enne seda sa alati tuli kirjutada array ("a" -> 1 "b" -> 2. See oli ehitaja jaoks massiivi. Nüüd PHP on lõpuks jõudnud ümber kena süntaks lihtsalt nurksulgudesse mis on lihtsalt nii palju parem kui massiivi. Aga arvestades PHP 5.4 uusim versioon, võivad ilmneda kohad, mis ei ole isegi PHP 5.3. Suve jooksul oleme sattus see probleem, kus PHP 5.3 oli see, mida me pidime seadmele kuid server, mida me kasutusele kõik meie klassi raamat ja esitab ja kõik see kraam, et oli PHP 5.4. Ei tea seda, me töötatud 5.3, lükatakse 5.4 ja nüüd äkki keegi meie kood töötab sest seal juhtus on muutused vahel 5.3 ja 5.4 mis ei ole tahapoole ühilduvad, ja me peame minema ja fikseerida kõik meie asjad, mis ei tööta PHP 5.4. Selle klassi, kuna seade ei pea PHP 5.4, see on täiesti hea kasutada nurksulgudes. Aga kui otsite üles asjad ümber Internet, kui otsite üles mingi hulga kraami, tõenäoliselt sa lähed näha täpsustada massiivi ehitaja süntaks kuna see on olnud umbes alates PHP sündis ja nurksulg süntaks on olnud juba viimased paar kuud või siis 5,4 tuli ümber. See, kuidas sa indeks. Täpselt nagu K kuidas oleks indeks nurksulgudes nagu $ massiiv [0], $ array [1], $ array [2] sa indeks samamoodi kui juhtub, et teie indeksid on stringid. Nii et $ massiiv [""] ja $ massiiv ["b"]. $ Array [b]. Miks see vale? Tõenäoliselt luua hoiatus aga veel palju tööd. PHP kipub seda tegema. See kipub lihtsalt: "Ma lähen hoiatab Teid selle eest, aga ma lihtsalt lähen edasi minna "Ja mida iganes saan." Tõenäoliselt tõlkida seda stringi, kuid on võimalik, et mingil ajahetkel minevikus keegi ütles define b olla "Hello World". Nüüd b võib olla pidev ja $ array [b] tegelikult teeme "Hello World". Ma arvan, et sel hetkel, või vähemalt meie PHP seaded, kui sa püüad indeks array ja et võti ei ole olemas, see ei õnnestu. Ma ei usu, see lihtsalt hoiatan sind. Või vähemalt võib seda nii, et see ei ole lihtsalt hoiatan sind, see lihtsalt otse üles ebaõnnestub. Kuidas sa vaadata, kui seal tegelikult on selline indeks isset. Nii isset ($ massiiv ["Hello World"]) tagastab FALSE. isset ($ massiiv ['b']) tagastab tõsi. Võite kasutada neid syntaxes. Ma olen päris kindel, mida see massiiv oleks lõpuks on on - Me ei saa seda testida. Oh, mul on vaja PHPWord. See on segamine süntaks, kus sa täpsustada, mis võti on ja sa ei täpsusta, mida võti on. So 3 siin on väärtus. Sa ei ole selgesõnaliselt öelnud, mida selle võtme saab olema. Mis sa arvad oma võti saab olema? [Üliõpilane] 0. >> Olen aim 0 vaid sellepärast, et see on esimene me ei ole täpsustatud. Me ei saa tegelikult teha paar neist juhtudest. Nii print_r on printida rekursiivne. See trükkida kogu massiivi. Oleks printida subarrays on massiiv, kui neid oli. Nii print_r ($ massiiv); php.test.php. See ei tundu see andis 0. Seal on tegelikult midagi meeles pidada siin, kuid me võtame seda teist. Aga kui ma juhtun tegema selle indeksi 1? PHP ei erista stringi indeksid ja täisarv indeksid, nii et siinkohal ma olen lihtsalt määratletud punktides 1 ja ma saan teha nii $ array [1] ja $ array ['1 '] ja see saab olema sama indeksit ja sama võtit. Nüüd mida sa arvad 3 saab olema? >> [Üliõpilane] 2. >> [Bowden] Olen aim 2. Jah. See on 2. Mis siis, kui me seda tegime on 10, see on 4? Mis sa arvad indeks 3 saab olema? Ma mõtlesin 11. Ma arvan, et mida PHP teeb - ja ma arvan, et olen seda varem näinud - Kas see on lihtsalt jälgib, mida kõrgeim numbriline indeks seda kasutatakse siiani. See ei saa kunagi määrata stringi indeks 3. See on alati numbriline indeks. Nii et ta hoiab silma peal ka kõrgeima see on määratud nii kaugele, mis juhtub olema 10, ja see on annan 11-3. Mis ma enne ütlesin, märkate, kuidas ta prindib selle massiivi. Ta prindib võti 10 võti 4, võti 11 võti d. Või isegi teeme - Ma arvan, et ma ei pane 0, aga see on trükkimine 1, 2, 3, 4. Mida teha, kui ma saan siin? Või oletame, tegelikult minna neid 2. Nüüd ta prindib 2, 1, 3, 4. PHP massiivid ei ole nagu tavalise hash tabelit. See on täiesti mõistlik mõelda neist kui hash tabeleid 99% ajast. Aga sinu hash tabeleid pole tunnet, millises järjekorras asju lisati. Nii et niipea kui pistke see oma hash tabelit, eeldada pole seotud loetelu ja sa võiksid kohtunik jooksul seotud nimekirja mis lisati esimene. Aga siin me lisada 2 esimest ja ta teab, millal see prindib see massiiv, et 2 on esimesel kohal. See ei prindi see välja vaid suvalises järjekorras. Tehniliste andmete struktuuri, et see kasutab on tellitud kaart, nii see pakub võtmed väärtused ja see mäletab, millises järjekorras need võtmed olid sisestatud. Põhimõtteliselt on see, et mõned komplikatsioonid, kus see on tüütu tegelikult - Oletame, et teil on hulgaliselt 0, 1, 2, 3, 4, 5 ja sa tahad kutsuda indeks 2. Üks viis seda teha, vaatame, mis see välja näeb. 0, 2, 1, 3, 4. Seadmata juhtub väljalülituvad mõlema muutuja ja massiivi indeksid. Nii väljalülitatud ($ massiiv [2]); Nüüd mis see hakkab välja nägema? 2 on lihtsalt läinud, nii et on täiesti hea. Veel hullem on, kui sa tahad asju tegelikult olla nagu massiivi. Ma panen juhuslikud arvud. Nüüd pane tähele, minu indeksid. Ma tahan, et see lihtsalt olla nagu C massiivi, kus ta läheb 0 kuni pikkus - 1 ja võin kinnitada, üle teda sellisena. Aga niipea, kui ma väljalülituvad teine ​​indeks, mis oli indeks 3 ei muutunud indeks 2. Selle asemel lihtsalt eemaldab selle indeksi ja nüüd sa lähed 0, 1, 3, 4. See on täiesti mõistlik. See on lihtsalt tüütu ja sa pead tegema asju nagu massiivi Liimida. Jah. [Üliõpilane] Mis juhtuks kui sul oleks loop ja sa tahtsid minna üle kõik elemendid? Kui see tabas 2, oleks ta saagi kunagi? Itereerimise üle massiivi. On 2 võimalust, saate seda teha. Võite kasutada regulaarselt jaoks silmus. See on veel üks keerukus PHP. Enamik keeles, ma ütleksin, on mingisugune pikkus või len või midagi näidates pikkus massiivi. PHP on see arv. Nii count ($ array); $ i + +) Ütleme lihtsalt print ($ array [$ i]); Notice: Undefined offset: 2. See on lihtsalt läbi kukkunud. See on põhjus, et enamasti, sa ei pea kunagi itereerime massiivi niimoodi. See võib olla liialdus, aga sa ei pea kunagi itereerime massiivi niimoodi sest PHP pakub oma foreach süntaks kus foreach ($ array $ kirje). Nüüd, kui me printida ($ kirje); - we'll arutada seda teist - et töötab täiesti trahvi. Nii, et foreach töötab on esimene argument on massiiv, et sa itereerimise üle. Ja teine ​​argument, kirje kaudu iga liigu jaoks silmus see saab võtta järgmine asi massiiv. Seega pidage meeles massiiv on järjekorras. Esimest korda elus jaoks silmus, punkt saab olema 123 siis on see 12, siis see on 13, siis on see 23, siis on see 213. Asjad tõesti imelik, kui sa midagi foreach. Vaatame, mis juhtub, sest sa ei tohi kunagi teha. Mis siis, kui me väljalülitatud ($ massiiv [1]); See oli ilmselt oodata. Sa itereerimise üle selle massiivi, ja iga kord, kui sa väljalülitamiseks esimene indeks. Nii indeks 0, esimene asi, objekt võtab väärtuse 0, nii et see saab olema 123. Aga seest jaoks silmus me väljalülitatud indeks 1, et tähendab 12 on kadunud. Nii printida. PHP_EOL. PHP_EOL on lihtsalt reavahetust, aga see on tehniliselt rohkem kaasaskantavaid alates reavahetusi Windows erineb reavahetusi Mac ja UNIX. Windows reavahetus on \ r \ n, samas kui kõikjal mujal see kipub lihtsalt olla \ n. PHP_EOL on konfigureeritud nii, et ta kasutab sõltumata reavahetus oma süsteemi on. Nii et printida seda. Ärme print_r ($ massiiv) lõpus. Mul polnud aimugi, et see oleks käitumist. Punkt ikka võtab väärtus 12 kuigi me väljalülituvad 12 Enne me kunagi sai seda massiivi. Ärge võtke minu sõna see, aga tundub, foreach tekitab koopia massiivi ja siis kirje võtab kõik väärtused selle koopia. Nii et isegi kui sa muuta massiivi sees jaoks silmus, see ei huvita. Punkt võtab endale algsed väärtused. Proovime väljalülitamiseks ta. Mis siis, kui see on $ array [1] = "tere"; Kuigi me paneme "tere" ümber massiiv, kirje kunagi võtab selle väärtuse. Seal on teine ​​süntaks foreach ring kuhu panna 2 muutujad eraldada nool. See esimene muutuja saab olema võti selle väärtuse, ja see teine ​​muutuja saab olema sama täpne objekt. See on ebahuvitav siin, aga kui me läheme tagasi meie algse puhul "" -> 1, "B" -> 1, siin, kui me lihtsalt kinnitada, iga massiivi elemendi objekt läheb on 1 iga kord. Aga kui me tahame ka teada, võti on seotud selle kirje siis me teeme $ võti -> $ kirje. Nii et nüüd me saame teha print ($ võti. ":". Nüüd on see itereerimise üle ja trüki iga võti ja sellega seotud väärtus. Täiendav asi, mida saame teha foreach silmuseid on võite näha seda süntaksit. Ampersandid enne muutujate nimed kipuvad olema kuidas PHP ei viidetega. Kui viited on väga sarnased suunanäitajaks, Teil ei ole viiteid, et sa kunagi tegelema mälu otse. Aga sul on viiteid, kus 1 muutujas sama asi nagu teise muutuja. Siin sees teeme $ kirje. Lähme tagasi 1, 10. Teeme $ kirje + +; ikka veel eksisteerivat PHP. Võite ikka + +. php.test.php. Ma pean seda trükkida. print_r ($ massiiv); Trükime 2, 11. Kui olin just teinud foreach ($ array $ kirje) siis objekt on väärtus 1 esimest korda läbi silmuse. See juurdekasvu 1-2 ja siis me oleme valmis. Nii et siis see läheb läbi teine ​​kiht silmuse ja et objekt on 10. See sammuga kirje kuni 11 ja siis see lihtsalt ära visata. Siis me print_r ($ massiiv); ja vaatame, et see on lihtsalt 1, 10. Nii juurdekasvu me tegime oli kadunud. Aga foreach ($ array & $ kirje) nüüd see toode on sama toode nagu see siin. See on sama asi. Nii et $ kirje + + muudab massiivi 0. Põhimõtteliselt saab teha ka $ k -> $ kirje ja saate teha $ array [$ k] + +; Nii et teine ​​viis seda, et oleme vabad muuta kirje, kuid see ei muuda meie algse massiivi. Aga kui me kasutame k, mis on meie võti, siis saame lihtsalt indeks meie massiivi kasutades, et võti ja juurdekasvu seda. See otsesemalt muudab meie algse massiivi. Võite isegi seda teha, kui mingil põhjusel sa tahtsid võime muuta - Tegelikult on see täiesti mõistlik. Sa ei tahtnud kirjutada $ array [$ k] + +, sa lihtsalt tahtsin kirjutada $ kirje + + kuid ikka tahtsin öelda if ($ k === "") siis juurdekasvu kirje ja seejärel printida meie massiivi. Nüüd mida me ootame print_r teha? Milliseid väärtusi tuleks trükkida? [Üliõpilane] 2 ja 10. >> [Bowden] Ainult siis, kui võti on "" kas me tegelikult printida seda. Sa ilmselt väga harva, kui üldse, on vaja määratleda funktsioonid PHP, kuid võite näha midagi sarnast kus määrate funktsiooni nagu funktsioon iganes. Tavaliselt sa ütleksid ($ foo, $ bar) ja siis määratleda see olla mis iganes. Aga kui ma seda teen, siis see tähendab, et mis iganes nõuab iganes, mis iganes nõuab Baz, nii et esimene argument edasi Baz saab muuta. Teeme $ foo + +; ja sees siin teeme Baz ($ kirje); Nüüd kutsume funktsiooni. Argument on võetud viide, mis tähendab, et kui me seda muuta me muuta asi, mis võeti vastu sisse Ja trükkimiseks ootame - kui ma segamini süntaks - saime 2, 11, nii et see oli tegelikult suurendatakse. TEADE Me peame viiteid 2 kohta. Mis siis, kui ma tegin seda? Mida see tähendab? [Üliõpilane] See muutub. >> Jah. Toode on lihtsalt koopia väärtust massiivi. Nii kirje muutub 2, kuid massiiv [""] ikkagi 1. Või mis siis, kui ma seda teen? Nüüd objekt saadetakse selle koopia Baz. Nii koopia argument mida suurendatakse 2, aga objekt ise oli kunagi suurendatakse 2. Ja kirje on sama asi nagu massiivi sulg iganes, nii et massiivi kunagi suurendatakse. Nii et nii neid kohti vaja. PHP on tavaliselt üsna nutikas sellest. Te võite mõelda, ma tahan mööda viide - See oli tegelikult küsimus ühele psets. See oli questions.txt asi, kus ta ütles, Miks võiks soovite läbida see struct viitega? Mis oli vastus sellele? [Üliõpilane] Nii et sa ei pea kopeerida midagi suurt. >> Jah. Struct saab meelevaldselt suur, ja kui te kaotate struct aastal argumendina ta vajab, et kopeerida kogu selle struct läbida seda funktsiooni, arvestades, et kui sa lihtsalt liigu struct viitega siis peab lihtsalt kopeerida 4-baidi aadress argumendi funktsioon. PHP on natuke targem. Kui mul on mingi funktsiooni ja annan seda massiivi 1000 asju, kas see tähendab, et see saab olema, et kopeerida kõik 1000 nendest asjadest läbida see funktsioon? See ei pea seda tegema kohe. Kui sees seda funktsiooni ta ei ole kunagi tegelikult muudab suva, nii et kui ($ foo === "tere") tagastab tõsi.; Teade me tegelikult ei muutnud argument sees seda funktsiooni, mis tähendab, et mis iganes võeti vastu nagu suva kunagi tuleb kopeerida sest see ei muuda seda. Niisiis, kuidas PHP teoste argumendid on alati vastu võetud viide kuni te tegelikult proovida seda muuta. Nüüd, kui ma ütlen $ foo + +; siis nüüd teha originaali koopia suva ja muuta koopia. See säästab aega. Kui sa oled kunagi puudutamata see suur massiiv, sa tegelikult ei muuda see, seda ei ole vaja teha koopia, arvestades, et kui me lihtsalt panna see märk, mis tähendab, see ei ole isegi kopeerida isegi kui sa seda muuta. Sellist käitumist nimetatakse koopia-on-write. Näete seda teistes kohtades, eriti kui te võtate operatsioonisüsteemi muidugi. Copy-on-write on päris tavaline muster, kus sa ei pea koopia teha midagi kui see on tegelikult muutumas. Jah. [Üliõpilane] Mida teha, kui sul oli juurdekasv sees test, nii ainult 1 element 1000st oleks vaja muuta? Ma pole kindel. Ma arvan, et oleks kopeerida kogu asi, kuid on võimalik, et see on piisavalt targad, et - Tegelikult mida ma mõtlen on ette kujutada, et meil on massiiv mis näeb välja selline: $ massiiv2 = [ Siis indeks "a" on massiiv [1 2 3 4], ja indeksit "b" on array mis iganes. Ma pean komasid vahel kõik need. Kujutage ette, seal on komadega. Siis "c" on väärtus 3. Okei. Nüüd oletame, et me $ Baz ($ massiiv2); kus Baz ei võta seda viitena. Nii et $ foo ['c'] + +; See on selline näide, kus me edastame massiiv2 argumendina ja siis see muudab konkreetse indeks array incrementing ta. Ma ausalt ei tea, mida PHP kavatseb teha. Seda saab hõlpsasti teha koopia kogu asi, kuid kui ta on tark, see teeb koopia neid klahve, kus see on oma eraldiseisev väärtus kuid see saab veel viidata sama massiivi 1,2,3,4 ja seda saab veel viidata sama massiivi. Tulen iPad ta. Me liigu selles massiivis, kus see kutt punkte 3, see kutt võrra [1,2,3,4] see kutt võrra [34 ...] Nüüd, kui me möödaminnes seda, et Baz, me muuta seda. Kui PHP on tark, siis võib lihtsalt teha - Meil oli veel kopeerida mõned mälu, kuid kui oleks need suured Pesastatud subarrays me ei vaja kopeerida neid. Ma ei tea, kas see, mida ta teeb, kuid ma ei usu seda tehes. See on ka päris suur eelis C üle PHP. PHP teeb elu palju lihtsamaks palju asju, aga sa selline ei ole absoluutselt aimugi, kui hästi see toimib sest mul pole aimugi all varjukit kui see teeb neid koopiaid asju, Oh, kas saab olema pidev ajal koopia, on see lihtsalt läheb Muutus 1 pointer, see saab olema naeruväärselt raske lineaarne koopia? Mis siis, kui ta ei leia ruumi? Kas see siis on vaja käivitada Prügikoristus, et saaksin rohkem ruumi? Ja prügi kogumine võib võtta omavoliliselt pikk. C sa ei pea muretsema need asjad. Iga joon sa kirjutad saab päris palju põhjust, kuidas see läheb täita. Vaatame tagasi neile. Kui tore on see, et sa ei pea tegelema hash funktsioonid, seotud nimekirjades, või midagi sellist? Kuna töötame koos hash tabeleid on nii lihtne nüüd, siin on lõbus puzzle tööd. Ava fail nimega unique.php ja ta kirjutada PHP programm (Tuntud ka kui "script"). Me kipume kutsume neid skripte, kui nad on vähe asju, mis sa jooksed käsureal. Põhimõtteliselt mis tahes keeles, mida te ei kompileerida aga sa lähed joosta käivitatava käsureal, võite helistada, et käivitatav skript. Ma võiks sama hästi Kirjutage C programm, mis teeb seda, aga ma ei nimetaks seda skripti sest ma esimest kompileerida ja seejärel käivitage binaarne. Aga see PHP programm me ei kavatse helistada script. Või kui me kirjutasime selle Python või Perl või Node.js või neid asju, me tahaks helistada neile kõik skriptid, sest sa jooksed neid käsureal kuid me ei koguda neid. Me võiksime seda teha üsna kiiresti. Me ei kavatse kasutada argv. Ütleme lihtsalt löök läbi selle. Kõne see ainulaadne, kirjutada programm. Võite eeldada, et sisend sisaldada ühte sõna rea ​​kohta. Tegelikult argv on päris triviaalne kasutada. unique.php. Kõigepealt esimene, me tahame vaadata, kas meil on läbinud 1 käsurea argument. Nagu te eeldaks argc ja argv C, meil on veel neid, PHP. Nii et kui ($ argc! == 2) siis ma ei tegele trükkimine sõnum või midagi. Ma lihtsalt väljuda, veakood 1. Ma võiksin ka tagasi 1. Harva PHP sa oled selles riigis, kus me oleme - Tavaliselt olete funktsiooni kutsunud funktsioon kutsunud funktsioon kutsunud funktsioon. Ja kui midagi läheb valesti ja sa lihtsalt tahad väljuda kõike täielikult, väljumise lihtsalt lõpeb programm. See kehtib ka C. Kui oled funktsiooni funktsiooni funktsiooni funktsioon ja sa tahad lihtsalt tappa programmi, võite helistada väljumise ja see lihtsalt väljuda. Aga PHP see on veel haruldasemad, et me oleme selles tipptasemel. Tavaliselt oleme sees mingi funktsioon, nii et me kutsume väljumise nii et me ei pea tagastama kuni 1 asi, mis siis saab aru, seal on viga nii et naaseb üles, kui et tunnistab oli viga. Me ei taha tegeleda, et nii väljumiseks (1); return (1); sel juhul oleks samaväärne. Siis mida tahame avada tahame fopen. Argumendid ei kavatse vaadata päris sarnane. Me tahame fopen ($ argv [1], ja me tahame, et seda avada lugemiseks. See tagastab ressurss, mida me ei kavatse helistada f. See tundub üsna sarnane sellele, kuidas C see välja me ei pea ütlema FAIL *. Selle asemel me lihtsalt öelda $ f. Okei. Tegelikult, ma arvan, et see isegi annab meile vihje, PHP funktsioon nimega faili. Php faili. Mis see saab teha, on lugeda kogu faili massiivi. Sa ei pea isegi fopen ta. See saab teha teie jaoks. Nii et $ read = file ($ argv [1]); Nüüd on kõik read faili on read. Nüüd me soovime sortida read. Kuidas me saame sorteerida read? Me sortida read. Ja nüüd saame neid printida või mis iganes. Ilmselt kõige lihtsam viis on foreach ($ read nagu $ rida) echo $ rida; [Üliõpilane] Kas poleks me isegi ületavad liinide viitamine midagi võtta sorteerida? See on koht, kus omamoodi oleks määratletud funktsiooni omamoodi (& $ massiiv). Kui helistate funktsiooni sa ei liigu see viitega. See on funktsioon, mis määratleb seda kui võttes seda kui viidet. See on tegelikult täpselt, mis läks valesti kui me paneme kõik meie serverid kui me läksime 5,3-5,4. Kuni 5.4, see oli täiesti mõistlik. Funktsioon ei ole oodata, et võtke see viide, kuid võite läbida seda viidet nii et kui funktsioon ei juhtu seda muuta, see on ikka muudetud. Alates 5.4, et sa ei tohiks seda teha. Nüüd ainus võimalus teil mööda viitamise kui funktsioon selgesõnaliselt seda teeb. Kui te ei soovi ta seda muuta, siis sa pead tegema $ koopia = $ rida ja passi koopia. Nüüd read jäävad alles ja koopia muutub. php.unique.php. Ma oleks võinud messed midagi välja. Ootamatu "omamoodi". Seal saab olema midagi, mis teeb meie eest. See ei ole isegi seal. Teade, kui lugeda kasutusjuhendit, et esimene argument peaks olema massiiv ja see on tehtud viide. Miks see kurdavad mulle? Sest mul on see funktsioon omamoodi endiselt siin, et ma ei taha. Okei, php.unique.php. Ma ei liigu see argument, sest mul ei ole pilti. See on php.unique.php kohta test.php. Siin on test.php kõik välja printida kena sorteeritud järjekorras. Pange tähele, et sorteeritud et on selline imelik kood faili sest kõik meie tühje ridu ei kavatse esikohal siis hakkavad tulema kõik meie 1. tasandil süvendid siis tulevad kõik meie ei süvendid. Jah. >> [Üliõpilane] Nii lähtekoodi ei olnud vastu võetud viite? Et üldiselt vastu võetud väärtus? [Bowden] Kui helistate funktsiooni, ta ei ole kunagi kindlaks, kas see on üle teatena. See on funktsiooni definitsioon, mis määrab, kas see on üle teatena. Ja vaadates funktsiooni mõiste omamoodi või lihtsalt vaatab seda, see võtab argumentides. Nii et olenemata sellest, kas sa tahad seda teha siis, viidates, see ei võta ta viitega. See muudab massiivi paigas. See on lihtsalt keelatud. Sul ei ole lubatud seda teha. >> [Üliõpilane] Oh, okei. [Bowden] See, sorteerida see aega võtab read viitega ja seda muuta. Ja veel, kui sa ei taha seda teha, võid teha koopia omamoodi. Isegi sel juhul, koopia ei ole tegelikult koopia read. See lihtsalt osutab sama asi, kuni see muutub modifitseeritud, kus see oli algselt hakka muudetud omamoodi funktsioon, kus, sest see koopia-on-kirjutada, nüüd koopia koopia saab olema tehtud. Võite seda teha. See on teine ​​koht näete märk. Näed seda foreach silmad, näed seda funktsiooni deklaratsioonid ja te näete seda kui lihtsalt Muutujaid. Nüüd oleme saavutanud midagi tehes seda sest koopia ja read on sõna otseses mõttes sama asja. Võite kasutada ridade ja kopeerida vaheldumisi. Seda saab teha väljalülitatud ($ koopia); ja et ei väljalülitatud liinidel, sa lihtsalt kaotad oma viide sama asi. Nii nagu selle punkti, nüüd read on ainus viis pääsete read. Küsimused? Jah. [Üliõpilane] Täiesti off topic, aga sa ei pea lähedal PHP - >> Sa seda ei tee. Okei. [Bowden] ma läheks nii kaugele, et öelda, et see on halb tava, et sulgeda neid. See on ilmselt liialdus, eriti käsikirja, aga vaatame, mis juhtub, kui ma seda teha. See ei teinud midagi. Mis siis, kui ma tahtsin - [ohkab] Mul on vaja läbida argument. Tulistada. Ma kutsusin seda valesti. Nii php.unique.php koos argument. Nüüd ma isegi ei vaja seda. Ma andke seda kaalukas argument. See trükitud iganes see on värvist. Ma trükkimine koopia ja koopia ei ole olemas. Nii read. See trükitakse kõik, ja siis märkate kõik see rämps siia alla, sest PHP midagi, mis on väljaspool PHP sildid lihtsalt läheb trükitakse sõna otseses mõttes. Sellepärast HTML, see on nii tore, et ma saan div blaa, blaa, blaa klassi või mis iganes, blaa, blaa, blaa ja tehke mõned PHP kood ja tehke lõpuni div. Ja nüüd trükkimiseks ma saan kena div up üles, kõik, mis PHP trükitud, div alt. Katastroofiline, kui midagi sellist juhtub, mis on üsna levinud, lihtsalt hulkuvad reavahetus allosas faili. Sa ei arva, et oleks, et suur ja lahendamiseks kuni sa arvestama asjaolu, et brauserid - Kuidas ümbersuunamised töö või põhimõtteliselt mis tahes päised töö kui te teete oma seost veebilehe ja ta saadab tagasi kõik need pealkirjad ja asjad nagu vastuseks 200 või vastuse ümber või mis iganes, päised kehtivad ainult esimese baidi andmete saatmist. Võite suunata tuhandeid kordi, kuid niipea, kui esimene bait andmed saadetakse sa ei tohiks suunata uuesti. Kui teil on hulkuvate reavahetus allosas fail ja oletame, et te kasutate seda funktsiooni ja siis sa tahad - Oletame, et see on teine ​​fail see on index.php ja sa require_once midagi - Ma ei saa mõelda hea näide sellest. Küsimus juhtub, kui see rida allservas saab kordas. Sa ei taha, et midagi on kajasid veel. Isegi kui sa ei kavatse edasi midagi saada vastukaja, midagi ei saa kordas ja nüüd sa ei peaks saatma enam päised ja sa lähed, et saada kaebusi. Sa lihtsalt ei vaja neid sulgemise sildid. Kui te kavatsete teha midagi koos HTML - ja see on täiesti mõistlik teha siia div iganes ja siis selles punktis saab või ei saa kaasata neid. See ei ole tegelikult küsimus. Aga scripte see on haruldane sulgeda. Kui kõik on PHP, absoluutselt kõik, sa tõesti ei vaja sulgeda / te ei tohiks sulgeda. Tegelemine stringid on palju kenam kui C. PHP saab määrata stringi ühe või jutumärkidega. Mis ülakoma te ei saa kasutada "escape" järjestusi. Pidevalt põgeneda, blaa, blaa, blaa. Nii printf väga harva PHP. Ma arvan, et ma võiks kasutada printf kui ma tahtsin teha selline asi - in pset 5 võite kasutada sprintf või mis iganes. Aga mida sa teha tahad 001.jpg ja 002.jpg. Nii, et selline asi, kus ma tegelikult soovite vormindada teksti tahaksin kasutada printf. Aga muidu ma lihtsalt kasutada stringi liitmise tehe. Ma kunagi kasutada printf. Me lihtsalt eristada üksikasjad vahel ülakoma ja jutumärgid. Suurim erinevus on see, et ülakoma, siis trükitakse sõna otseses mõttes. Ei ole char andmetüüp PHP, erinevalt C, nii et see võrdub sellega. Nad on nii stringe. Ja tore asi ühekordne jutumärk stringid on mul öelda 'Hello World! " blaa, blaa, blaa, $ $ Wooo. Mis juhtub, kui ma printida see on see print seda sõna-sõnalt. Olgem vabaneda kõik meie asjad. Nii et echo $ str1; Ta sõna otseses mõttes trükitud kõik need asjad: dollari märgid, längkriips n, mis te arvate, oleks reavahetusi - kõik need asjad ta prindib sõna otseses mõttes. Ainuke asi, mida pead põgeneda on ülakoma sest vastasel juhul oleks arvan, et see sulgemine ülakoma. Jutumärgid täiesti erinevad. Meil on juba näha süntaksi esiletõstmine on cluing meid sellega, mis on umbes minna väga valesti. php.unique. Undefined variable: wooo sest see on tõlgendatav muutuja nimega wooo. Jutumärgid lase sul sisestada muutujad - Oletame, et $ nimi = "Rob"; Nii echo "Tere, minu nimi on $ name!" Ta tunnistab seda kui muutuja. Kui ma kasutan, et - ja ma reavahetust - Tere, minu nimi on Rob! ja tere! See on sellepärast, et ma kunagi ära trükkida wooo eespool. Seal on 1 samm, mida saate teha. $ Massiiv = [1, 2, 3]; Mida teha, kui ma tahan trükkida esimene indeks array? Sa teed $ massiiv [0]. Süntaksi esiletõstmine on aimugi. Mis on see kavatsed? php.unique. Tere, minu nimi on 1! mis pole see, mida ma tahtsin. Süntaksi esiletõstmine valetasid mulle. Proovime "" -> 1 "b" -> 2. See, kuidas ma oleks seda kirjutada. Ootamatu ühekordne jutumärk (T_ENCAPSED blaa, blaa, blaa, blaa, blaa). Idee on selles, et see ei ole tunnustades seda osa massiivi. See ei ole tunnustades seda massiivi indekseerimise kirjas. Sa tahad seda teha ümbritsetud looksulg, ja nüüd kõik, mis on see lokkis traksidega on interpoleeritud, mis on sõna, mida me kasutame võluväel lisades need muutujad õiges kohas. Nüüd seda teed, php.unique ja Tere, minu nimi on 1! ootuspäraselt või Tere, minu nimi on Rob! Üks asi, mis on selline tore ülakoma on see, et - Seal on mõned kulud interpoleerimise. Kui te kasutate jutumärgid, tõlk peab minema üle selle stringi, tagades, et: "Oh, siin on muutuv. Nüüd ma pean minema saama, et muutuja ja sisesta see siia." Isegi kui te ei kasuta muutujaid, midagi sees need jutumärgid tuleb interpoleeritud, kuid see on siiski aeglasem, sest ta peab minema üle jutumärgid otsin asju, mida tuleb interpoleerida. Nii ülakoma saab natuke kiiremini kui midagi vaja interpoleeritud, ja ma pigem isegi Kasutada ülakoma jaoks, "Tere, minu nimi on". $ Massiiv [""] niikuinii. See saab olema võrdne sellega, mida meil enne oli. Aga see on küsimus eelistus. Kui te kasutate PHP, siis ilmselt ei hooli kiiruse vahe. Ei ole piisavalt põhjendanud neid alustada. Iga lõplik küsimusi? Me tegelikult isegi ei saada läbi kõik see, kuid see kraam oli igav. Viimane asi, see on selline kena PHP on siis, kui olete tegelevad HTML, saad kasutada seda veidi, nii kena otsetee süntaks printimiseks muutuja. Seadmata PHP siin, seda nimetatakse lühikese sildid. Ametlikult alates PHP 5.4, see on aegunud. Teil on soovitatav panna php. See toetab veel, nii lühikese sildid