[Powered by Google Translate] [8 § - Lisää Mukava] [Rob Bowden - Harvardin yliopisto] [Tämä on CS50. - CS50.TV] Nämä viikon jakso muistiinpanoja olemaan melko lyhyt, joten olen juuri menossa pitää puhua, te aiotte pitää esittää kysymyksiä, ja me yritämme täyttää niin paljon aikaa kuin mahdollista. Monet ihmiset ajattelevat, että tämä PSET ei välttämättä vaikeaa, mutta se on hyvin pitkä. PSET spec itsessään kestää tunnin lukea. Annamme sinulle paljon SQL mitä mahdollisesti on käytettävä. Me opastaa paljon se, joten sen ei pitäisi olla liian paha. Onko kukaan alkanut tai päättynyt? Se on viimeinen PSET. Voi luoja. Yleensä siellä on JavaScript peräkkäin tämän, mutta kalenteri muuttaa asioita tekee kaiken 1 viikko lyhyempi, ja meillä ei enää ole JavaScript PSET. En tiedä miten se vaikuttaa, onko JavaScript on menossa näkyä tentti tai Quiz 1. Uskoisin, että se tulee olemaan jotain sinun täytyy tietää korkean tason asioita JavaScript, mutta epäilen olimme vain antaa sinulle suoran JavaScript-koodia koska sinulla ei ole ollut PSET siinä. Mutta se tulee tavaraa tietokilpailu tarkistaa ensi viikolla. Osa kysymyksistä. Paljon tätä kamaa on hieman huonosti muotoiltu, mutta kerromme miksi. Toisin C, PHP on "dynaamisesti kirjoittanut" kieltä. Mitä tämä tarkoittaa, kysyt? No, sano hyvästit kaikille niille char, float, int, ja muut avainsanat haluat käyttää kun julistaa muuttujia ja funktioita C. PHP, muuttujan tyyppi määräytyy arvolla, että se on tällä hetkellä tilalla. Joten ennen kuin kirjoitat tämän koodin tiedosto nimeltä dynamic.php, PHP dynaamisesti kirjoitetaan. Se on totta. Olen eri mieltä siitä, että se tarkoittaa, että sanomme hyvästit char, float, int, ja muita avainsanoja. Tarkka ero dynaamisesti kirjoittanut ja toissijaisesti, joka on staattisesti kirjoitetaan, että dynaamisesti kirjoitetaan, kaikki tyypin tarkkailun ja juttuja tapahtuu ajon aikana, kun taas staattisesti kirjoitetaan se tapahtuu käännöksen yhteydessä. Sana staattinen yleisesti näyttää tarkoittavan kääntää aikaa asioita. Luulen muitakin käyttötarkoituksia, mutta C kun julistaa staattinen muuttuja, sen varastointi jaetaan käännöksen yhteydessä. Täällä dynaamisesti kirjoitettu vain sitä, että - C Jos yrität lisätä merkkijono ja kokonaisluku, kun käännät sen, se aio valittaa, koska se tulee sanoa, että et voi lisätä int ja osoitin. Se vain ei ole kelvollinen operaatio. Se on toinen asia, että me saamme toisessa. Mutta tällaista tarkkailun, että se moittii käännöksen yhteydessä, on staattinen tyyppi tarkkailun. On kieliä, joissa sinun ei tarvitse sanoa char, float, int, ja kaikki nuo asiat, mutta kielen voi kertoa yhteydessä asia minkälainen sen pitäisi olla, mutta se on silti staattisesti kirjoitetaan. Joten jos otat 51, OCaml, sinun ei koskaan tarvitse käyttää näitä tyyppejä, mutta silti käännöksen yhteydessä sano et voi tehdä tätä, koska olet sekoittamalla int ja string. Dynaamisesti kirjoitettu vain sitä, että joskus ajon aikana aiot saada valituksen. Jos on käytetty myös Java ennen, yleensä lähes minkä tahansa C-tyypin kieli aiotaan staattisesti kirjoitetaan, niin C, C + +, Java, kaikki nämä ovat yleensä staattisesti kirjoitetaan. Java kun käännät jotain ja sanot string s vastaa uutta jotain, joka ei ole merkkijono, että menee valittaa, koska nämä tyypit eivät vain täsmää. Että menee valittaa käännöksen yhteydessä. Mutta se on myös joitakin dynaamisia aikaa asioita, kuten jos yrität heittää jotain sen tyypin, joka on tarkempi kuin nykyinen tyyppi, ei ole mitään sen voi tehdä käännöksen yhteydessä tarkistaa, onko valettu aikoo menestyä. Java on myös joitakin dynaaminen tyyppi tarkistaa, että heti kun se saa siihen koodirivin kun se tosiasiassa ajetaan, se tulee tehdä valettu, Tarkista, että valettu oli pätevä ensinnäkin, ja jos se ei ollut, niin se tulee valittaa, että sinulla on virheellinen tyyppiä. Dynaaminen tyyppi tarkkailun. Kirjoita tähän tiedostoon nimeltä dynamic.php. Dynamic.php. Minä pura se muotoilu. Meillä on muuttuja, asetamme sen kokonaisluku 7, Sitten me aiomme tulostaa ja% s - Voi, me tulostaa tyyppi sitä, joten getType on palaamassa tyypin muuttujan. Olemme vain tulostaa tyypin uudestaan ​​ja uudestaan. Me vain php.dynamic.php. Näemme, että se muuttuu kokonaisluvun merkkijono Boolean kun käymme läpi. C-ei ole Boolen tietotyyppi ei ole merkkijono tietotyyppi. On char * ja Boolen vain yleensä int tai char tai jotain. PHP Tämäntyyppisten olemassa, ja se on yksi suurista eduista PHP yli C - että merkkijono toiminta on äärettömän helpompaa PHP kuin C. Ne vain toimivat. Joten palaamme tänne. Ajoimme dynamic.php. Tämä kertoo PHP tulkki, kutsutaan php, suorittaa PHP koodia dynamic.php. Jos sinulla on tiedoston virheet, tulkki kertoo! Tulkin, tämä on toinen suuri ero PHP ja C. C sinun täytyy koota jotain ja sitten ajaa että käännetty tiedosto. PHP koskaan kääntää mitään. Joten PHP tulkki on pohjimmiltaan juuri lukemassa tätä rivi. Se osuu var = 7 niin se iskee printf sitten se iskee var sitten se iskee printf ja niin edelleen. Siellä on vähän koota se, ja se välimuistiin tuloksia joten jos käytät skripti voit tehdä joitakin, mutta pohjimmiltaan se rivi sellainen asia. Tämä tarkoittaa, että paljon optimoinnit että saamme C, kuten kokoamisessa, se on vain yleensä kääntäjä voi tehdä paljon temppuja sinulle. Se voi ottaa käyttämättömiä muuttujia, se voi tehdä kaikki nämä asiat asioita, se voi tehdä häntä rekursio. PHP et tule saamaan tätä etua koska se on juuri menossa aloittaa täytäntöönpanovaltion rivi rivi riviltä, ja se ei todellakaan tunnista näitä asioita yhtä helposti koska se ei ole 1 iso kokoelma kulkevat asia ja sitten teloitus; se on vain rivi. Joten se tulkki. Takaisin meidän dynaaminen kirjoittamalla: melko viileä, eh? Et todellakaan voinut tehdä C! Nyt, katso jos voit selvittää tyypin kutakin seuraavista arvoista. Katso tämä viite. Niin 3.50. Millaista luulet että tulee olemaan? Tässä ovat tyyppejä meillä. Olemme bools, kokonaislukuja, kelluva pistettä, jouset, taulukot, esineet, ja sitten resurssit, mikä on tavallaan epämääräinen. Mielestäni on todella esimerkki tästä. Sitten on NULL. NULL on erityinen tyyppi. Toisin C jossa NULL on vain osoittimen osoite 0, PHP, NULL on oma tyyppi, jossa ainoa pätevä juttu, että tyyppi on NULL. Tämä on paljon enemmän hyötyä Virheentarkistus. C jossa meillä oli tämä ongelma, jos jos palaat NULL, se tarkoittaa palaat NULL osoitin tai käyttämällä NULL merkiksi virhe tai kaikki sekaannuksen meillä oli jossain vaiheessa. Tässä, palaavat NULL tarkoittaa yleensä virhe. Paljon asioita myös palauttaa false virhe. Mutta kohta on NULL tyyppiä, vain asia NULL tyyppi on NULL. Sitten soittopyyntö on kuin voit määrittää joitakin nimettömiä toimintoja. Sinun ei tarvitse antaa funktion nimeä, mutta sinun ei tarvitse käsitellä sitä täällä. Tarkasteltaessa tyyppejä, että he eivät odota meidän tietävän, mitä mieltä olette tyyppinen 3,50 on? >> [Opiskelija] Float. Joo. Joten sitten täällä, mitä mieltä olet tyyppi on? >> [Opiskelija] Array. Joo. Ensimmäinen oli float, toinen on matriisi. Huomaa, että tämä ryhmä ei ole kuin C-array jos sinulla on indeksi 0 on jotain arvoa, indeksi 1 on jotain arvoa. Tässä indeksit ovat a, b ja c ja arvot ovat 1, 2, ja 3. PHP ei ole eroa assosiatiivinen array ja vain säännöllinen joukko kuin luulisi sitä on C. On vain tämä, ja alla huppu säännöllinen matriisi on vain assosiatiivisia array missä 0 karttoja joitakin arvo samalla tavalla karttoja jotain arvoa. Tästä syystä PHP voi olla aika huono todella nopeasti code / benchmarking asioita koska C kun käytät array tiedät että pääsy jäsen on vakio ajan. PHP pääsy jäsen, joka tietää kuinka paljon aikaa? Se on luultavasti jatkuvasti, jos se hash oikein. Kuka tietää, mitä se todella tekee alla huppu? Ette todellakaan tarvitse katsoa täytäntöönpanosta miten se aikoo käsitellä asiaa. Joten sitten fopen. Mielestäni tässä mennään vain PHP käsikirja fopen tarkastella palautuva. Näemme täällä voit etsiä melko paljon mitään funktiota PHP käsikirja ja tämä on tavallaan man sivun PHP. Palautuva tulee olemaan voimavara. Siksi minä katsoin sitä, koska emme oikeastaan ​​määritellä resurssi. Ajatus resurssi, C et sellaista saanut FILE * tai mitä tahansa; PHP resurssi on tiedosto *. Se mitä aiot olla lukemista, se mitä aiot olla kirjallisesti. Se on yleensä ulkoinen, joten se on resurssi voit vetää asioita ja heittää asioita. Ja lopuksi, mitä tyyppiä NULL? >> [Opiskelija] NULL. Joo. Joten ainoa asia, joka on NULL on NULL. NULL on NULL. Yksi ominaisuus PHP tyyppinumeroiden järjestelmä (parempaan tai huonompaan) on sen kyky manipuloida tyyppejä. Kun kirjoittaa rivin PHP, joka yhdistää arvot eri tyyppejä, PHP yrittää tehdä järkevästi. Kokeile kunkin seuraavan riviä PHP koodia. Mitä tulostaa? Onko se mitä odotit? Miksi tai miksi ei? Tämä tosiasia PHP tekee siitä mitä me kutsumme heikosti kirjoitettu. Heikosti kirjoitettu ja voimakkaasti kirjoitettu, on eri käyttötarkoituksia varten nämä käsitteet, mutta useimmat ihmiset käyttävät heikosti kirjoitettu ja voimakkaasti kirjoitettu tarkoittaa tällaista asiaa missä ("1" + 2); joka toimii. C, joka ei toimi. Voitte kuvitella tätä ei toimi. Monet ihmiset sekoittaa dynaaminen tyypitys ja heikko tyypitys ja staattinen tyypitys ja vahvan tyypityksen. Python on toinen esimerkki kielen, joka on dynaamisesti kirjoitetaan. Voit heittää noin tyyppejä muuttujia ja se tulee määrittää suorituksen aikana virhettä tarkistusten. Python se tulee toteuttaa tämän, ja se näkyy ("1" + 2); ja tämä ei onnistu, koska se sanoo, et voi lisätä merkkijono ja kokonaisluku. PHP, joka on aivan yhtä dynaamisesti kirjoitettu, tämä ei onnistu. Heikko tyypitys on tekemistä sen kanssa, että se tekee asioita eri jotka eivät oikeastaan ​​järkeä välttämättä. So ("1" + 2), voin kuvitella, että on merkkijono 12, voin kuvitella, että on merkkijono 3, Voin kuvitella, että on kokonaisluku 3. Se ei ole välttämättä määritelty hyvin, ja olemme luultavasti nähdä täällä että kun me painamme ("1" + 2), se on luultavasti menossa päätyä eri kuin tulostus (1 + "2"). Ja tämä on yleensä, mielestäni huonompaan suuntaan. Täällä voimme kokeilla näitä. Toinen pikku temppu noin PHP on sinun ei tarvitse itse kirjoittaa tiedoston. Se on suorittaa tämän komennon tilassa. Joten php-r, voimme heittää komennon täällä: "Print ('1 '+ 2)," ja minä heitän uuden rivin. Tämä painettu 3. Se näyttää siltä kuin se tulostaa 3 ja se on kokonaisluku 3. Joten nyt yritetään toisinpäin: "Print (1 + '2 '); Saamme 3, ja on sitä myös olemaan kokonaisluku 3? Olen rehellisesti ei ole aavistustakaan. Näyttää siltä, ​​että on johdonmukainen. Ei ole koskaan mitään mahdollisuutta että on merkkijono 12 tai jotain sellaista koska PHP, toisin kuin JavaScript ja Java myös on erillinen operaattorin ketjuttamista. Ketjutus PHP on piste. Joten tulostus (1. '2 '), Tulee antaa meille 12. Tämä yleensä aiheuttaa sekaannusta, jos ihmiset yrittävät tehdä jotain str + = muu asia, että he haluavat lisätä edelleen loppuun niiden merkkijonon, ja se on menossa epäonnistua. Sinun täytyy tehdä str. = Joten älä unohda ketjutus PHP on piste. Kokeile myös: tulostaa ("CS" + 50); Olen kertonut teille, että ei ole toivoa tämän tuloksena CS50 koska ketjutus ei ole +. Mitä luulette tämän tulee päätyä? Olen rehellisesti ei ole aavistustakaan. Se näyttää siltä kuin se on vain 50. Se näkee merkkijonon, ja veikkaan jos laitamme 123CS - Se näkee ensimmäinen merkkijono, se yrittää lukea kokonaisluku sitä tai numero siitä. Tässä tapauksessa se näkee 123CS. "Se ei ole järkeä koska kokonaisluku, joten olen juuri menossa ajatella 123." Joten 123 + 50 tulee olemaan 173. Ja tässä se alkaa lukea tätä kokonaisluku. Se ei näe mitään, niin se vain kohtelee sitä kuin 0. Joten 0 + 50 tulee olemaan 50. Tämä Oletan aikoo tehdä jotain vastaavaa. Ajattelen 99. Joo, koska se tulee ottamaan ensimmäisen - Niin 99. Täällä (10/7), jos tämä olisi C, mitä se palaa? [Opiskelija] 1. >> Joo, se olisi 1 koska 10/7 on jakamalla 2 kokonaislukuja. Kokonaisluku jaettuna kokonaisluku on palaamassa kokonaisluku. Se ei voi palata 1 piste mitä se olisi, niin se on juuri menossa takaisin 1. Täällä tulostus (10/7), se tulee todella tulkita. Ja tämä tarkoittaa, että jos todella haluat tehdä kokonaisluku pyöristämistä ja muuta vastaavaa, sinun ei tarvitse tehdä tulosta (lattia (10/7)); C on varmaankin outoa, että voit luottaa kokonaisluku katkaisumerkki säännöllisesti, mutta PHP ei voi, koska se automaattisesti muuttaa sen float. Ja sitten (7 + true); mitä mieltä olette siitä, että tulee olemaan? Arvaan 8, jos se aikoo tulkita totta kuin 1. Se näyttää siltä kuin se on 8. Joten mitä olemme tehneet viimeisen 10 minuutin sinun pitäisi ehdottomasti koskaan tehdä. Näet koodin tämä. Sen ei tarvitse olla niin yksinkertaista kuin tämä. Voisit olla 2 muuttujia, ja 1 muuttuja sattuu olemaan merkkijono ja muut muuttuvat sattuu olemaan int, ja sitten lisäät nämä muuttujat yhdessä. Koska PHP on dynaamisesti kirjoitettu ja se ei tee minkäänlaista tarkkailun sinulle ja koska se on heikosti kirjoitettu ja koska se vain automaattisesti heittää nämä asiat yhdessä ja kaikki toimii, on vaikea edes tietää, että tämä muuttuja on merkkijono nyt, joten minun ei pitäisi lisätä sen tässä muuttuja, joka on kokonaisluku. Paras käytäntö on, jos muuttuja on merkkijono, pitää sen merkkijono ikuisesti. Jos muuttuja on int, pitää sen int ikuisesti. Jos haluat käsitellä kokonaislukuja ja jouset, voit käyttää varsint - se on JavaScript. Intval. Teen tämän kaiken aikaa. PHP ja JavaScript olen sekaisin kaikesta. Joten intval on palaamassa kokonaislukuarvo muuttujan. Jos me kulkea "print (intval ('123 ')); saat 123. Intval itse ei aio tehdä tarkastus meille, että se on vain kokonaisluku. PHP käsikirja, on vain niin paljon toimintoja käytettävissä, joten tässä Luulen mitä haluan käyttää on is_numeric ensin. Olen arvaamaan, että palautetaan false. Se on toinen asia, joka meidän täytyy mennä yli on ===. Joten is_numeric ('123df '), et ajattele, että is_numeric. C sinulla olisi toistaa kaikkia merkkejä ja tarkista, onko jokainen merkki on numero tai jotain. Täällä is_numeric aikoo tehdä meille, ja se palaa vääriä. Joten kun tulostetaan, että se tulostaa mitään, joten tässä olen vertaamalla sitä nähdä, sinä satut olemaan väärä? Ja nyt se tulostetaan 1. Ilmeisesti se tulostaa 1 todeksi sijasta tulostaa totta kuin totta. Ihmettelen jos en print_r. Ei, se ei vieläkään 1. Palatakseni ===, == edelleen olemassa, ja jos puhut Tommy hän sanoo == on täysin kunnossa. Aion sanoa == on kauhea, ja sinun ei pitäisi koskaan käyttää ==. Erona on, että == vertaa asioita jossa se voi olla totta, vaikka he eivät samaa tyyppiä, katsoo === vertaa asioita ja ensin se tarkistaa ne samaa tyyppiä? Kyllä. Okei, nyt aion nähdä, jos he todella verrata olla yhtä. Saat outoja asioita, kuten 10 vastaa - Katsotaan, mitä se sanoo. Niin ('10 '== '1 e1'); Tämä palauttaa true. Onko kellään mitään arvauksia miksi tämä palauttaa totta? Se ei ole vain siitä. Ehkä tämä on vihje. Mutta jos muutan se, f - eihän se! Pidän käyttäen lainausmerkkeihin. Syy lainausmerkit ovat huutaa minulle, koska olen koonnut tämän lainausmerkkeihin. Niin voisin paeta lainausmerkit täällä, mutta puolilainausmerkkejä helpompi. So ('10 '== '1 f1'); ei tulosta totta. ('10 '== '1 E1); tulostaa totta. [Opiskelija] Onko se hex? >> Se ei ole hex, mutta se on lähellä, että se on kuin - 1E1, tieteellinen merkintätapa. Se tunnistaa 1E1 kuin 1 * 10 ^ 1 tai mitä tahansa. Ne ovat yhtä kokonaislukuja. Jos teemme === sitten se tulee olemaan väärä. En oikeastaan ​​tiedä, jos teemme == entä (10 ja '10abc ');? Selvä. Niin se on totta. Eli aivan kuten silloin teit (10 + '10abc '), ja se olisi 20, tässä (10 == '10abc '); on tosi. Vielä pahempaa on asioita, kuten (epätosi == NULL); on totta tai (false == 0); on tosi, (false == []); On outo tapauksia - Se on yksi niistä outo tapauksista. Huomaa, että (väärät == []); on totta. ('0 '== False); on totta. ('0 '== []); On väärä. Joten == ei ole millään tavalla transitiivinen. a voi olla yhtä suuri kuin b ja a voi olla yhtä suuri kuin c, mutta b ei ehkä ole yhtä suuri kuin c. Se kauhistus minulle, ja sinun tulisi aina käyttää ===. [Opiskelija] Voimmeko tehdä! == Samoin? >> [Bowden] Kyllä. Vastine olisi! = Ja! ==. Tämä on itse tuonut esiin PSET spec jossa paljon toimintoja Return - PHP käsikirja on hyvä tästä. Se tuo iso punainen ruutu "Tämä palauttaa false, jos siellä virhe." Mutta takaisin 0 on täysin järkevä asia palata. Mieti mikä tahansa toiminto, jota odotetaan palaavan kokonaisluku. Sanotaan tämä toiminto on tarkoitus laskea rivien tiedoston tai jotain. Normaalioloissa ohitat tämän toiminnon tiedosto ja se tulee palauttaa kokonaisluvun, joka edustaa rivien. Joten 0 on täysin kohtuullinen määrä, jos tiedosto on vain tyhjää. Mutta entä jos ohitat sen Virheellinen tiedosto ja toiminta tapahtuu palauttaa false jos ohitat sen virheellinen tiedosto? Jos vain tehdä == et erottaa asian välillä virheellinen tiedosto ja tyhjän tiedoston. Käytä aina ===. Siinä kaikki nämä. PHP, array tyyppi on erilainen kuin mitä olet tottunut C. Todellakin, olet ehkä jo huomannut tämän yläpuolella, kun näki, että tämä on tyyppiä array. Kiinnike syntaksi on uusi, koska PHP 5.4, joka on uusin versio PHP. Ennen tätä oli aina kirjoittaa array ('' -> 1, 'b' -> 2. Se oli rakentaja varten array. Nyt PHP on vihdoin ympäri mukava syntaksi vain hakasulkeissa joka on vain niin paljon parempi kuin array. Mutta ottaen PHP 5.4 on uusin versio, saatat kohdata paikkoja, jotka eivät edes ole PHP 5.3. Kesän aikana törmäsimme asiaa jossa PHP 5.3 oli mitä meillä oli laitteen, mutta palvelin me käyttöön kaikki luokan kirja ja esittää ja kaikki jutut oli PHP 5.4. Ei tietäen, kehitimme 5,3, työnnetään 5,4, ja nyt yhtäkkiä mikään meidän koodi toimii koska siellä sattui ollut muutoksia välillä 5,3 ja 5,4 jotka eivät ole taaksepäin yhteensopiva, ja meidän täytyy mennä ja korjata kaikki meidän asioita, jotka eivät toimi PHP 5.4. Tämän luokan, koska laite ei ole PHP 5.4, se on täysin hieno käyttää hakasulkeissa. Mutta jos etsit ylös asioita ympäri Internetiä, Jos etsit jonkinlaisen array kamaa, todennäköisesti olet menossa nähdä täsmentää array rakentaja syntaksin koska on ollut voimassa vuodesta PHP syntyi ja hakasulje syntaksi on ollut noin viimeiset pari kuukautta tai kun 5,4 tuli ympäri. Näin voit indeksi. Aivan kuin C miten olisit indeksi hakasulkeissa kuten $ array [0], $ array [1], $ array [2], te indeksi samalla tavalla, jos sattuu olemaan teidän indekseihin on jouset. Joten $ array ['a'] ja $ array ['b']. $ Array [b]. Miksi tämä olisi väärin? Se luultavasti luo varoituksen, mutta toimivat edelleen. PHP taipumus tehdä. Se pyrkii vain, "Minä aion varoittaa tästä, mutta olen juuri menossa pitämään menossa "Ja tehdä mitä voin." Se luultavasti kääntää tämän merkkijono, mutta on mahdollista, että jossain vaiheessa aikaisemmin joku sanoi define b on "Hello World". Joten nyt B voisi olla vakio ja $ array [b] todella tehdä "Hello World". Mielestäni tässä vaiheessa, tai ainakin meidän PHP-asetukset, Jos yrität indeksinä ryhmässä ja että avainta ei ole, se ei onnistu. En usko, että se tulee vain varoittaa sinua. Tai ainakin voit asettaa sen niin, että se ei vain varoittaa, se vain suoraan ylös epäonnistuu. Tapa voit tarkistaa, onko siellä todella on sellainen indeksi on isset. Joten isset ($ array ['Hello World']) palauttaa false. isset ($ array ['b']) palauttaa true. Voit sekoittaa näitä syntaxes. Olen melko varma, mitä tämä joukko olisi lopulta on - Voimme testata sitä. Voi, minä tarvitsen PHPWord. Tämä on sekoitus syntaksia, jossa voit määrittää, mikä avain on ja et määritä mikä avain on. Joten 3 täällä on arvo. Et ole nimenomaisesti sanonut mitä sen avain tulee olemaan. Mitä luulet sen avain tulee olemaan? [Opiskelija] 0. >> Arvaan 0 vain koska se on ensimmäinen emme ole määritelty. Voimme itse tehdä pari näistä tapauksista. Joten print_r on tulosta rekursiivinen. Se tulostaa koko taulukon. Se tulostaa subarrays of array onko mitään. Joten print_r ($ array); php.test.php. Se näyttää antoi sille 0. On todellakin jotain pitää mielessä täällä, mutta palaamme siihen toiseen. Mutta mitä jos satun tekemään tätä indeksiä 1? PHP ei erotella merkkijono indeksit ja kokonaisluku indeksit, joten tässä vaiheessa olen juuri määritelty indeksi 1 ja voin tehdä molempia $ array [1] ja $ array ['1 '] ja se on sama indeksi, ja samaa avainta. Joten nyt mitä luulet 3 tulee olemaan? >> [Opiskelija] 2. >> [Bowden] Arvaan 2. Joo. Se on 2. Mitä jos teimme tämän on 10, tämä on 4? Mitä mieltä olette indeksi 3 tulee olemaan? Ajattelen 11. Oma arvaus siitä mitä PHP tekee - ja mielestäni olen nähnyt tämän ennenkin - on se vain seuraa mitä korkeimman numeerista indeksiä sitä käytetään toistaiseksi on. Se ei ikinä antaa merkkijonon indeksi 3. Se on aina numeerista indeksiä. Niin se pitää kirjaa korkein se on määritetty niin pitkälle, joka sattuu olemaan 10, ja se tulee antaa 11-3. Mitä minä sanoin, huomaa miten se tulostaa tämän taulukon. Se tulostaa näppäin 10, näppäin 4, näppäin 11, d. Tai edes Tehdään - Luulen etten laita 0, mutta se on tulostus 1, 2, 3, 4. Mitä jos vaihtaa täällä? Tai mennään todella vaihtaa nämä 2. Nyt se tulostaa 2, 1, 3, 4. PHP: n paneelit eivät ole aivan kuten säännöllinen hash taulukon. On täysin perusteltua ajatella niitä hash taulukoita 99% ajasta. Mutta teidän hash taulukoita ei ole mitään tunnetta järjestyksessä asiat lisättiin. Joten heti kun laita se tiiviste, olettaa siellä ole linkitetty lista ja voit arvioida sisällä linkitetty lista joka lisättiin ensin. Mutta täällä me Lisätään 2 ensimmäistä ja se tietää milloin se tulostaa tämän taulukon että 2 tulee ensin. Se ei tulosta se vain tahansa järjestyksessä. Tekninen tietorakenne että se käyttää on tilattu kartta, joten se kuvaa avaimia arvoja ja se muistaa järjestyksessä, jossa ne avaimet lisättiin. Pohjimmiltaan se on joitakin komplikaatioita missä se harmittaa todella - Sanotaan sinulla array 0, 1, 2, 3, 4, 5 ja haluat ottaa indeksiin 2. Yksi tapa tehdä se, katsotaanpa mitä se näyttää. 0, 2, 1, 3, 4. Katkaistulla sattuu poistaa asetukset sekä muuttujien ja taulukkohakemistojen. Joten katkaistu ($ array [2]); Nyt mitä tämä tulee näyttämään? 2 on vain mennyt, niin se on täysin kunnossa. Enemmän harmittaa on, jos haluat asioita todella olla kuin array. Laitan satunnaislukuja. Nyt huomaa minun indeksit. Haluan sen vain olla kuin C array minne se menee 0: sta pituudesta - 1 ja voin toistaa sen yli sellaisenaan. Mutta heti kun poistaa asetukset toisen indeksin, mikä oli indeksin 3 ei tullut indeksi 2. Sen sijaan se vain poistaa, että indeksin ja nyt mennään 0, 1, 3, 4. Tämä on täysin järkevää. Se on vain ärsyttävää, ja sinun täytyy tehdä asioita, kuten array liitos. Joo. [Opiskelija] Mitä tapahtuisi, jos olisit varten silmukka ja halusit mennä yli kaikki elementit? Kun se osuma 2, olisi se tuottaa koskaan? Iteroimalla yli array. On 2 tapaa voit tehdä sen. Voit käyttää säännöllisesti varten silmukka. Tämä on toinen monimutkaisuus PHP. Useimmat kielet, sanoisin, jonkinlainen pituudesta tai LEN tai jotain osoittaa pituus array. PHP on määrä. Joten count ($ array); $ i + +) Toivotaan vain print ($ array [$ i]); Notice: Undefined offset: 2. Se on vain menossa epäonnistua. Tämä on syy, että suurin osa sinun ei tarvitse toistaa yli array näin. Se voi olla liioittelua, mutta sinun ei tarvitse koskaan toistaa yli array näin koska PHP tarjoaa foreach syntaksi jossa foreach ($ array $ tuote). Nyt jos me painamme ($ item); - we'll keskustella toiseen - joka toimii hienosäätää. Siten, että foreach toimii on ensimmäinen argumentti on matriisi, että olet iteroimalla yli. Ja toinen argumentti, kohta, läpi jokaisen läpikulun varten silmukan se tulee ottaa seuraava asia array. Joten muistakaa array on järjestyksessä. Ensimmäistä kertaa läpi ja silmukka, kohta tulee olemaan 123 niin se on 12 niin se on 13 niin se on 23 niin se on 213. Asiat saavat todella outoa, kun teet jotain foreach. Katsotaan mitä tapahtuu, koska sinun ei pitäisi koskaan tehdä. Mitä jos me katkaistu ($ array [1]); Se oli luultavasti odotettavissa. Olet iteroimalla tänä array, ja joka kerta olet katkaisumenetelmä ensimmäinen indeksi. Joten indeksi 0, ensimmäinen asia, kohta vie arvoon 0, niin se tulee olemaan 123. Mutta sisällä on silmukan me unset indeksi 1, niin se tarkoittaa 12 on mennyt. Joten tulosta. PHP_EOL. PHP_EOL on vain rivinvaihto, mutta se on teknisesti enemmän kannettavia koska rivinvaihdot Windowsin eroaa rivinvaihtoja Mac ja UNIX. Windows rivinvaihto \ r \ n, kun taas kaikkialla muualla se on yleensä vain olla \ n. PHP_EOL on konfiguroitu siten, että se käyttää riippumatta rivinvaihto järjestelmästä on. Niin tulosta se. Älkäämme print_r ($ array) lopussa. Minulla ei ollut aavistustakaan siitä, että se olisi käyttäytymistä. Kohta vielä vie arvo 12 vaikka me poistaa asetukset 12 ennen kuin koskaan pääsi sen array. Älä ota minun sana tähän, mutta se näyttää foreach luo kopion array ja sitten kohta vie kaikki arvot kyseisen kopion. Joten vaikka muutat taulukon sisällä on silmukka, se ei välitä. Tuote tulee ottaa alkuperäiset arvot. Yritetään katkaisemiseen sitä. Mitä jos tämä on $ array [1] = "hello"; Vaikka laitoimme "hello" osaksi array, kohta koskaan vie tämän arvon. On toinenkin syntaksi foreach silmukoita jossa voit laittaa 2 muuttujat erottaa nuolella. Tämä ensimmäinen muuttuja tulee olemaan avain, että arvo, ja tämä toinen muuttuja tulee olemaan täsmälleen sama kohde. Tämä on mielenkiinnoton täällä, mutta jos menemme takaisin meidän alkuperäiseen tapauksessa "" -> 1, "B" -> 1, , jos me vain toistaa kullekin ryhmälle kuin kohde, kohde tulee olemaan 1 joka kerta. Mutta jos haluamme myös tietää liittyvä avain että kohteen Sitten teemme kuten $ avain -> $ kohde. Joten nyt voimme tehdä tulosta ($ avain. ":". Nyt se iteroimalla yli ja tulostaminen kukin avain ja siihen liittyvä arvo. Ylimääräinen asia, jonka voimme tehdä foreach silmukoita on saatat nähdä tämän syntaksin. Et-ennen muuttujien nimet ovat yleensä miten PHP tekee viittauksia. Jos viitteet ovat hyvin samanlaisia ​​osoittimia, sinulla ei ole viitteitä, joten et koskaan käsitellä muistia suoraan. Mutta sinulla ei ole viitteitä missä 1 muuttuja tarkoittaa samaa kuin toinen muuttuja. Sisällä täällä tehdäänpä $ kohde. Mennään takaisin 1, 10. Tehdään $ kohde + +; on edelleen olemassa PHP. Voit silti tehdä + +. php.test.php. Minun täytyy tulostaa sen. print_r ($ array); Me tulostaa 2, 11. Jos olisin juuri tehnyt foreach ($ array $ tuote) niin kohta tulee arvo 1 ensimmäisen kerran silmukan läpi. Se kasvattaa 1-2 ja sitten olemme tehneet. Joten sitten se menee läpi toisen läpikulun silmukan ja että kohde on 10. Se kasvattaa kohde 11, ja sitten se on vain heitetään pois. Sitten print_r ($ array) ja katsotaan, että tämä on vain 1, 10. Joten lisäys teimme katosi. Mutta foreach ($ array & $ tuote) Nyt tämä kohde on sama kohde kuin tämä täällä. Se on sama asia. Joten $ kohde + + on muuttamassa array 0. Periaatteessa voit myös tehdä $ k -> $ kohde ja voit tehdä $ array [$ k] + +; Joten toinen tapa, että olemme vapaita muuttamaan kohteen, mutta se ei muuta alkuperäistä array. Mutta jos käytämme k, joka on tärkein, voimme vain indeksinä meidän array käyttäen, että keskeiset ja kasvattaa sitä. Tämä suoremmin muuttaa alkuperäistä array. Voit jopa tehdä, että jos jostain syystä et halunnut kyky muuttaa - Oikeastaan ​​tämä on täysin kohtuullinen. Et halua joutua kirjoittamaan $ array [$ k] + +, halusit kirjoittaa $ kohde + +, mutta silti halusi sanoa if ($ k === '') Sitten kasvattaa kohde ja sitten tulostaa meidän array. Joten nyt mitä odotamme print_r tehdä? Mitä arvoja pitäisi tulostaa? [Opiskelija] 2 ja 10. >> [Bowden] Vain jos avain oli "" me itse tulostaa sen. Olet luultavasti hyvin harvoin, jos koskaan, on määriteltävä toimii PHP- mutta saatat nähdä jotain vastaavaa, jossa voit määrittää funktion kaltainen toiminto riippumatta. Yleensä sanoisit ($ foo, $ bar) ja sitten määritellä sen olevan mitä. Mutta jos teen tämän, niin se tarkoittaa, että mitä soittaa mitä tahansa, mitä vaaditaan Baz, joten ensimmäinen argumentti johdetaan baz voidaan muuttaa. Tehdään $ foo + +; ja sisällä tässä tehkäämme Baz ($ tuote); Nyt pyydämme toimintoa. Väite on ottanut viittaamalla, mikä tarkoittaa, että jos me muuttaa sen me muutetaan asia hyväksyttiin tuumaa Ja tulostamiseksi odotamme - ellei Mokasin syntaksi - saimme 2, 11, joten se oli todella kasvatetaan. Ilmoituksessa tarvitsemme viittauksia 2 paikkaa. Mitä jos tein tämän? Mitä tämä tarkoittaa? [Opiskelija] Se muuttaa. >> Joo. Tuote on vain kopio arvon jono. Joten tuote muuttuu 2, mutta array ['a'] on edelleen 1. Tai mitä jos teen tämän? Nyt erä lähetetään kopio Baz. Joten kopio väitettä voidaan kasvatetaan 2, mutta itse lähetykseen ei koskaan kasvatetaan 2. Ja kohde on sama asia kuin array kiinnike tahansa, niin, että matriisi ei koskaan kasvatetaan. Joten molemmat niistä paikoista tarvitsevat sitä. PHP on yleensä melko fiksu tästä. Saatat ajatella haluan välittää viittaamalla - Tämä oli itse asiassa kysymys yhden psets. Se oli questions.txt juttu, jossa se totesi, Miksi ehkä haluat välittää tämän struct viittaamalla? Mikä oli vastaus tähän? [Opiskelija] Joten sinun ei tarvitse kopioida jotain suurta. >> Joo. Struct voi olla mielivaltaisen suuri, ja kun ohitat struct niin argumentti se tarvitsee kopioida että koko struct siirtää sen toiminnon, katsoo, että jos olet vain siirtää struct viittaamalla se tarvitsee vain kopioida 4-tavuinen osoite argumentti toiminnon. PHP on hieman fiksumpi. Jos minulla on jokin funktio, ja välitän sen joukko 1000 asioita, se tarkoittaa sitä täytyy kopioida kaikki 1000 nuo asiat siirtää sen funktio? Sen ei tarvitse tehdä sitä heti. Jos sisällä Tämän toiminnon koskaan muuttaa foo- joten jos ($ foo === 'hei') return true.; Huomaa emme koskaan muutettu väitettä sisällä tätä toimintoa, mikä tarkoittaa sitä, että mitä johdettiin sisään foo koskaan täytyy kopioida koska se ei muuta sitä. Joten miten PHP teosten argumentit ovat aina ohi viite ennen kuin olet itse yrittää muokata sitä. Nyt jos sanon $ foo + +, se nyt tekee kopion alkuperäisestä foo ja muokata kopiota. Tämä säästää aikaa. Jos olet koskaan kosketa tämän massiivisen valikoiman, et koskaan todella muokata sitä, sen ei tarvitse tehdä kopio, katsoo, että jos me vain laittaa tähän et-että tarkoittaa että se ei edes kopioida vaikka et muokata sitä. Tämä ongelma on nimeltään kopioi-on-write. Näet sen muissa paikoissa, varsinkin jos otat käyttöjärjestelmän kurssi. Copy-on-write on melko tavallinen malli, jossa sinun ei tarvitse kopioida jotain ellei se todella muuttuu. Joo. [Opiskelija] Mitä jos sinulla olisi lisäys sisällä testin joten vain 1 elementti pois 1000 olisi muutettava? En ole varma. Mielestäni olisi kopioida koko juttu, mutta se on mahdollista, se on fiksu, että - Oikeastaan, mitä ajattelen on kuvitella meillä oli array näyttää tältä: $ matriisi2 = [ Sitten indeksi "" on joukko [1 2 3 4], ja indeksi 'b' on joukko riippumatta. Tarvitsen pilkut välillä kaikki nämä. Kuvittele olemassa pilkkuja. Sitten 'c' on arvo 3. Okei. Nyt sanotaan teemme $ Baz ($ matriisi2); jos Baz ei ota tätä viittaamalla. Joten $ foo ['c'] + +; Tämä on sellainen esimerkki, jossa olemme kulkee matriisi2 argumentiksi ja sitten se muutetaan tietyn indeksi taulukon kasvattamalla sitä. Olen rehellisesti ei ole aavistustakaan, mitä PHP aikoo tehdä. Se voi helposti tehdä kopion koko juttu, mutta jos se on älykäs, se tekee kopion näistä näppäimistä, jos tämä on sen erillinen arvo mutta tämä voidaan vielä osoittaa samaan array 1,2,3,4 ja tämä voidaan vielä osoittaa samaan array. Minä iPad sen. Ohitamme tässä array jos tämä kaveri pistettä 3, tämä kaveri pistettä [1,2,3,4], tämä kaveri osoittaa [34, ...] Nyt olemme kulkee sen sisään Baz, olemme muuttamiseksi. Jos PHP on fiksu, se voi vain tehdä - Meillä oli vielä kopioida muistia, mutta jos siellä oli näitä valtavia sisäkkäisiä subarrays Emme tarvitse kopioida niitä. En tiedä, jos se mitä se tekee, mutta voin kuvitella sen näin. Tämä on myös aika iso etu C yli PHP. PHP tekee elämästä paljon helpompaa paljon asioita, mutta sellaista ei ole aavistustakaan, miten hyvin se suorittaa koska minulla ei ole aavistustakaan alla huppu kun se tekee näitä kopioita asioita, Voi, että tulee olemaan vakio aika kopio, on se vain muuttuu 1 osoitin, se tulee olemaan naurettavan vaikea lineaarinen kopio? Mitä jos se ei löydä tilaa? Onko se sitten täytyy juosta roskien keräys saada hieman enemmän tilaa? Ja roskien kerääminen voi mielivaltaisesti pitkiä. C sinun ei tarvitse huolehtia näistä asioista. Jokainen rivi voit kirjoittaa voit melko paljon syytä miten se tulee tehdä. Katsotaanpa taaksepäin näitä. Kuinka mukavaa on se, että sinun ei tarvitse käsitellä hash toimintoja, linkitettyjä listoja, tai jotain sellaista? Koska työskentely hash taulukoita on niin helppoa nyt, tässä hauska puzzle työskennellä. Avata tiedoston nimeltä unique.php ja se kirjoittaa PHP-ohjelma (Tunnetaan myös nimellä "kirjoitus"). Meillä on tapana kutsua heitä skriptit jos he lyhyt asioita, joita voit ajaa komentoriviltä. Periaatteessa mikä tahansa kieli, että et kääntää mutta aiot suorittaa suoritustiedoston komentoriviltä, ​​voit soittaa, että komentojonon. Voisin yhtä hyvin kirjoittaa C-ohjelma, joka tekee tämän, mutta en sano sitä käsikirjoituksen, koska haluan ensin koota ja sitten ajaa binary. Mutta tämä PHP-ohjelma aiomme soittaa script. Tai jos me kirjoitti sen Python tai Perl tai Node.js tai mitään noista asioista, olimme kutsua niitä kaikkia skriptit koska ajaa ne komentorivin mutta emme kääntää niitä. Voisimme tehdä melko nopeasti. Emme aio käyttää argv. Toivotaan vain puhaltaa kautta. Soita se ainutlaatuinen, kirjoittaa ohjelma. Voit olettaa, että panos sisältää yksi sana per rivi. Oikeastaan ​​argv on melko triviaali käyttää. unique.php. Ensimmäinen asia ensin haluamme tarkistaa, jos olemme siirtyneet 1 komentorivin argumentti. Aivan kuten odottaa argc ja argv C, meillä on vielä nuo PHP. Joten jos ($ argc! == 2) niin en aio käsitellä tulostamalla viestin tai mitään. Otan vain poistua, virhekoodi 1. Voisin myös palata 1. Harvoin PHP olet tällä tilassa missä me olemme - Yleensä olet toimintoa kutsutaan funktion kutsutaan funktion kutsutaan funktion. Ja jos jokin menee vikaan ja haluat vain lopettaa kaiken kokonaan, exit vain päättyy ohjelman. Tämä on olemassa myös C Jos olet toiminto toiminto toiminto toiminto ja haluat vain tappaa ohjelmaa, voit soittaa liittymästä ja se vain poistuu. Mutta PHP on vielä harvinaista, että olemme tällä huipputasolla. Yleensä olemme sisällä jonkinlainen toiminto, joten kutsumme exit niin että meidän ei tarvitse palata jopa 1 asia joka tajuaa siellä virhe jotta palauttaa ylös, jos se tunnistaa oli virhe. Emme halua käsitellä että, niin poistu (1); Return (1); tässä tapauksessa olisi vastaavia. Sitten mitä haluamme avata haluamme fopen. Argumentit ovat menossa katsomaan melko samanlaisia. Haluamme fopen ($ argv [1], ja haluamme avata lukemista varten. Joka palauttaa resurssi, joka aiomme soittaa f.. Tämä näyttää melko samanlainen kuin miten C ei se kuitenkaan meidän ei tarvitse sanoa FILE *. Sen sijaan me vain sanoa $ f. Okei. Oikeastaan, mielestäni tämä jopa antaa meille vihjeen siitä PHP funktio kutsutaan tiedoston. PHP File. Mitä tämä tulee tehdä, on lukea koko tiedoston array. Sinun ei edes tarvitse fopen sitä. Se tulee tehdä sen puolestasi. Joten $ rivit = file ($ argv [1]); Nyt kaikki rivit tiedoston on linjat. Nyt haluamme lajitella rivit. Miten voimme lajitella rivit? Me lajitella rivit. Ja nyt voimme tulostaa ne tai jotain. Todennäköisesti helpoin tapa on foreach ($ rivit kuin $ line) echo $ rivi; [Opiskelija] Eikö me edes ylittää linjat viittaamalla jotain tulee lajitella? Tässä on tavallaan se määritellään funktio lajittele (& $ array). Kun soitat toiminnon et läpäise sitä viittaamalla. Se toiminto, joka määrittelee sen kun sitä viitteenä. Tämä on oikeastaan ​​juuri sitä, mitä meni pieleen kun panemme kaiken meidän palvelimia kun menimme 5,3-5.4. Saakka 5.4, tämä oli täysin järkevä. Toiminto ei aio tehdä sitä referenssinä, mutta voit välittää sitä referenssinä joten jos toiminto ei tapahdu muuttamaan, se on silti muutettu. Vuodesta 5,4, sinun ei pitäisi tehdä tätä. Joten nyt ainoa tapa ohitat viittaus on jos funktio nimenomaan tekee sen. Jos et halua sitä muuttaa sitä, sinun ei tarvitse tehdä $ kopio = $ linjat ja Pass kopio. Joten nyt linjat säilyvät ja kopioi muuttuu. php.unique.php. Olen ehkä sekaisin jotain ylös. Odottamaton "lajitella". Siellä tulee olemaan jotain, joka tekee tämän meille. Se ei ole edes olemassa. Huomaa kun olet lukenut käsikirjan, ensimmäinen argumentti odotetaan olevan taulukon ja se otetaan tähän viitteenä. Miksi tämä valittaa minulle? Koska minulla on tämä toiminto lajitella vielä täällä, että en halua. Okei, php.unique.php. En anna sitä väitettä, koska minulla ei ole tiedostoa. Se php.unique.php päälle test.php. Tässä on test.php kaikki tulostuvat kiva lajiteltu järjestykseen. Huomaa, että lajiteltu järjestys on eräänlainen outo koodia tiedoston koska kaikki meidän tyhjät rivit ovat menossa tulla ensin Sitten on tulossa meidän kaikkien 1 tason painumia sitten tulevat kaikki meidän ei painumia. Joo. >> [Opiskelija] Joten lähdekoodia ei ollut ohi viite? On, että yleensä ohi arvo? [Bowden] Kun soitat funktio, se ei koskaan ratkaisee onko se ohi viitteenä. Se on funktion määritelmää, joka määrittää, onko se ohi viitteenä. Ja tarkastellaan funktion määritelmää lajitella tai vain katsomalla tätä, se vie väitettä viittaamalla. Joten riippumatta siitä haluatko sen ottaa sen suhteessa, se vie sen viittaamalla. Se muuttaa array paikalleen. Tämä ei vain saa. Et saa tehdä tätä. >> [Opiskelija] Ai, okei. [Bowden] Tämä lajittelu vie linjat viitteenä ja muokata sitä. Ja vielä, jos et halua sitä tehdä, että voit tehdä kopion lajitella. Tässäkin tapauksessa kopiointi ei ole oikeastaan ​​kopio riviä. Se vain osoittaa samaa, kunnes se saa muuttaa, jossa se ensimmäisen menossa muutettu lajittelutoiminto, missä, koska se on kopio-on-kirjoittaa, nyt kappaleen jäljennöksen aiotaan tehdä. Voit tehdä tämän myös. Se on toinen paikka, näet et-. Näet sen foreach silmukoita, näet sen funktio ilmoituksia, ja näet sen kun vain määrittämällä muuttujat. Nyt olemme saaneet aikaan mitään tekemällä näin koska kopiointi ja linjat ovat kirjaimellisesti sama asia. Voit käyttää viivoja ja kopioi synonyymeina. Voit tehdä unset ($ kopio) ja että ei unset linjat, juuri menetät viitaten sama asia. Niin tämä kohta, nyt linjat on ainoa tapa, jolla voit käyttää riviä. Kysymyksiä? Joo. [Opiskelija] Täysin off topic, mutta sinun ei tarvitse sulkea PHP - >> Et. Okei. [Bowden] Menisin niin pitkälle kuin sanoa se on huono käytäntö sulkea niitä. Se on luultavasti liioittelua, erityisesti käsikirjoituksen, mutta katsotaanpa mitä tapahtuu, jos teen näin. Se ei tehnyt mitään. Mitä jos halusin - [huokaa] Minun täytyy kulkea argumentti. Ampua. Kutsuin sitä väärin. Joten php.unique.php kanssa argumentti. Nyt en edes tarvitse tätä. Minä sitä tule pätevä argumentti. Tämä painettu mitä se tulostus. Olen tulostamista kopiointi ja kopio ei ole olemassa. Joten linjat. Se tulostaa kaiken, ja sitten huomaa kaikki tämä roska tänne, koska PHP mitään sellaista ulkopuolella PHP tageja on juuri menossa tulostettavaksi kirjaimellisesti. Siksi HTML, se on niin mukavaa, että voin tehdä div blaa, blaa, blaa luokka tai mitä tahansa, blaa, blaa, blaa ja sitten tehdä joitakin PHP ja tee loppu div. Ja nyt tulostamiseksi saan mukavan div ylös, kaiken PHP painettu, div alareunassa. Tuhoisat kun jotain tällaista tapahtuu, mikä on melko yleistä, vain stray rivinvaihto alareunassa tiedoston. Et halua ajatella sitä olisi, että iso juttu kunnes pidätte siitä, että selaimet - Miten ohjaa työn tai periaatteessa mitään otsikoita työtä, kun teet yhteytesi verkkosivuilla ja se lähettää takaisin kaikki nämä otsikot ja asiat kuten vaste 200 tai vaste uudelleenohjata tai mitä tahansa, otsikot ovat voimassa ainoastaan ​​ensimmäisen tavun dataa lähetetään. Voit ohjata tuhansia kertoja, mutta heti kun ensimmäisen tavun data lähetetään et pitäisi suunnata uudelleen. Jos sinulla on eksynyt rivinvaihto alareunassa tiedosto ja sanotaan, että käytät tätä toimintoa, ja sitten haluat - Sanotaan se toinen tiedosto, joka on index.php ja sinä require_once jotain - En voi ajatella hyvä esimerkki siitä. Asia tapahtuu, kun tämä alalaidassa saa kaikui. Et halua mitään ole toistaneet vielä. Vaikka et aio mistään saada vastakaikua, jotain ei saada vastakaikua ja niin nyt et pitäisi lähettää lisää otsikoita ja aiot saada valituksia. Et vain tarvitse niitä loppumerkinnät. Jos aiot tehdä jotain HTML - ja se on täysin järkevää tehdä tänne div riippumatta ja sitten tässä vaiheessa voit tai et voi sisällyttää niitä. Sillä ei ole niin väliä. Mutta PHP skriptejä se on harvinaista sulje se. Kun kaikki on PHP, aivan kaiken, sinun ei todellakaan tarvitse sulkea / sinun ei pitäisi sulkea sitä. Käsitteleminen jouset on paljon mukavampi kuin C PHP voit määrittää merkkijonon yhden tai lainausmerkkeihin. Yhden lainausmerkkejä et voi käyttää "escape" sekvenssejä. Jatkuvasti paeta, blaa, blaa, blaa. Joten printf on hyvin harvinaista PHP. Luulen Haluaisin käyttää printf jos halusin tehdä sellainen asia - in PSET 5 käytit sprintf tai jotain. Mutta haluat tehdä 001.jpg ja 002.jpg. Niin että sellainen asia, jossa olen todella haluavat muotoilla tekstiä Haluaisin käyttää printf. Mutta muuten olisin vain käyttää string ketjuttamista. En koskaan käytä printf. Olemme juuri erottaa yksityiskohtia välillä puolilainausmerkkejä ja lainausmerkkeihin. Suurin ero on se, että yksittäinen lainausmerkit, se tulostetaan kirjaimellisesti. Ei ole char tietotyyppi PHP, toisin kuin C, joten tämä on sama kuin tämän. He molemmat jouset. Ja kiva juttu tarjouksen jousille on voisin sanoa "Hello world!" blaa, blaa, blaa, $ $ Wooo. Mitä tapahtuu, kun tulostetaan tämä on se tulostaa sen kirjaimellisesti. Mennään eroon kaikista meidän juttuja. Joten echo $ str1; Se kirjaimellisesti painettu kaikki nuo asiat: dollarin merkkejä, kenoviiva n, jonka luulisi olisi rivinvaihtoja - kaikki nuo asiat se tulostuu kirjaimellisesti. Ainoa asia, sinun täytyy paeta ovat puolilainausmerkkejä koska muuten se olisi mielestäni se sulkee puolilainausmerkkejä. Lainausmerkkeihin, täysin erilainen. Olemme jo nähneet syntaksin korostus on cluing meitä mitä on aikeissa mennä pahasti pieleen. php.unique. Määrittelemätön muuttuja: wooo koska tämä tulkitaan muuttuja nimeltä wooo. Lainausmerkit voit lisätä muuttujia - Sanotaan $ name = "Rob"; Joten echo "Hei, nimeni on $ nimi!"; Se tunnistaa tämän muuttujan. Kun juoksen, että - ja aion lisätä rivinvaihto - Hei, nimeni on Rob! ja Moikka maailma! Tämä johtuu siitä, että en ole koskaan irrottaa painamisen wooo edellä. On 1 askel voit tehdä. $ Array = [1, 2, 3]; Mitä jos haluan tulostaa ensimmäisen indeksi array? Et $ array [0]. Syntaksin korostus on vihje. Mitä tämä aikoo tehdä? php.unique. Hei, nimeni on 1! joka ei ole sitä mitä halusin. Syntaksin korostus valehteli minulle. Kokeillaan "" -> 1, 'b' -> 2. Niin olisin kirjoittaa sitä. Odottamaton heittomerkki (T_ENCAPSED blaa, blaa, blaa, blaa, blaa). Ajatuksena on, että se ei tunnista tätä matriisin osan. Se ei tunnista tätä array indeksoitu kirjeitse. Haluat tehdä sulkumerkkien, ja nyt mitä on tässä kihara ahdin interpoloidaan, joka on sana käytämme maagisesti Sijoittamalla nämä muuttujat oikeissa paikoissa. Nyt teet tämän, php.unique ja Hei, nimeni on 1! odotetusti tai Hei, nimeni on Rob! Yksi asia, joka on tavallaan mukavaa noin puolilainausmerkkejä on, että - On joitakin kustannuksia interpoloivaa. Jos käytät lainausmerkkejä, tulkki on mennä yli tämän merkkijono, Varmista, että "Oh, tässä on vaihteleva. Nyt minun täytyy mennä hakemaan muuttujan ja työnnä se tänne." Vaikka et käytä mitään muuttujia, mitään sisällä näitä lainausmerkit on interpoloidaan mutta se on silti hitaampi, koska se tarvitsee mennä yli lainausmerkit etsivät asioita, jotka on interpoloitava. Joten lainausmerkkejä voi olla hieman nopeampi, jos mitään ei tarvitse interpoloida, ja minulla on tapana edes käyttää yhden lainausmerkkejä, "Hei, nimeni on". $ Array ['a'] tapauksessa. Tämä tulee olemaan vastaavia mitä meillä oli ennen. Mutta se mieltymyskysymys. Jos käytät PHP, et todennäköisesti välitä nopeus ero. Ei ole riittävästi perustellut niitä aluksi. Lopullista kysyttävää? Emme oikeastaan ​​edes läpi kaikki se, mutta tämä aine oli tylsä. Viimeinen asia, joka on tavallaan mukavaa PHP on, kun olet tekemisissä HTML, voit käyttää sitä vähän, joten mukava oikotie syntaksi tulostaa muuttujan. Vaarantamatta PHP täällä, tätä kutsutaan lyhyt tageja. Virallisesti PHP 5.4, tämä on vanhentunut. On suositeltavaa laittaa php. Tämä on edelleen tuettu, joten lyhyet tunnisteet kanssa