[Powered by Google Translate] [Seksyen 8 - Lebih Selesa] [Rob Bowden - Universiti Harvard] [Ini adalah CS50. - CS50.TV] Ini nota seksyen minggu akan menjadi cantik pendek, jadi saya hanya akan terus bercakap, anda semua akan terus bertanya soalan, dan kami akan cuba untuk mengisi masa seberapa banyak yang mungkin. Ramai orang berfikir bahawa pset ini tidak semestinya sukar, tetapi ia adalah sangat lama. Spec pset sendiri mengambil masa sejam untuk membaca. Kami memberi anda banyak SQL anda mungkin perlu menggunakan. Kami berjalan anda melalui banyak itu, jadi ia tidak seharusnya menjadi terlalu buruk. Adakah sesiapa yang bermula atau selesai? Ia adalah pset lepas. Oh, Tuhan saya. Biasanya ada JavaScript salah selepas ini, tetapi perkara-perkara perubahan kalendar menjadikan segala-galanya 1 minggu pendek, dan kita tidak lagi mempunyai pset JavaScript. Saya tidak tahu bagaimana ia mempengaruhi sama ada JavaScript akan muncul pada peperiksaan atau Kuiz 1. Saya bayangkan ia akan menjadi sesuatu yang seperti yang anda perlukan untuk mengetahui perkara-perkara peringkat tinggi tentang JavaScript, tetapi saya ragu-ragu kita hanya akan memberi anda terus kod JavaScript kerana anda tidak mempunyai pset di dalamnya. Tetapi itu akan menjadi barangan untuk ulasan kuiz minggu depan. Seksyen soalan. Banyak barangan ini agak kurang worded, tetapi kita akan membincangkan mengapa. Tidak seperti C, PHP adalah "dinamik ditaip" bahasa. Apakah ini bermakna, anda bertanya? Nah, berkata selamat tinggal kepada semua mereka apungan char, int, dan kata kunci yang lain anda perlu menggunakan apabila mengisytiharkan pembolehubah dan fungsi dalam C. Dalam PHP, jenis pembolehubah ditentukan oleh nilai bahawa ia kini memegang. Jadi sebelum kita menaip kod ini ke dalam fail yang dipanggil dynamic.php, PHP adalah dinamik ditaip. Itu adalah benar. Saya tidak bersetuju dengan hakikat bahawa bermakna kita mengatakan selamat tinggal kepada char, float, int, dan kata kunci yang lain. Perbezaan sebenar antara dinamik ditaip dan alternatif, yang statik ditaip, adalah yang dinamik ditaip, semua penyemakan jenis anda dan barangan berlaku pada jangka masa, manakala statik ditaip ia berlaku pada masa kompil. Perkataan statik secara umum seolah-olah bermakna perkara masa kompil. Saya rasa terdapat kegunaan lain untuk itu, tetapi dalam C apabila anda mengisytiharkan pembolehubah statik, penyimpanan diperuntukkan pada masa kompil. Di sini, dinamik ditaip hanya bermaksud bahawa - Dalam C jika anda cuba untuk menambah rentetan dan integer, apabila anda menyusun, ia akan mengadu kerana ia akan mengatakan bahawa anda tidak boleh menambah int dan penunjuk. Ia hanya tidak operasi yang sah. Itu adalah satu lagi perkara yang kita akan dapat di tempat kedua. Tetapi itu jenis semakan, hakikat bahawa ia mengadu pada masa kompil, adalah penyemakan jenis statik. Terdapat bahasa di mana anda tidak perlu untuk mengatakan char, float, int, dan semua perkara-perkara, tetapi bahasa boleh memberitahu dari konteks perkara itu apa jenis ia sepatutnya, tetapi ia masih statik ditaip. Jadi, jika anda mengambil 51, OCaml, anda tidak perlu untuk menggunakan mana-mana jenis ini, tetapi ia masih pada masa kompil mengatakan anda tidak boleh melakukan ini kerana anda sedang mencampurkan int dan rentetan. Dinamik ditaip hanya bermakna bahawa kadang-kadang semasa berjalan anda akan mendapat aduan. Jika anda juga telah digunakan Jawa sebelum ini, secara umum, hampir apa-apa bahasa C-jenis akan statik ditaip, jadi C, C + +, Java, semua orang secara amnya statik ditaip. Di Jawa apabila anda menyusun sesuatu dan anda katakan rentetan s sama dengan sesuatu yang baru yang tidak rentetan, yang akan mengadu kerana mereka jenis hanya tidak sepadan. Itu akan mengadu pada masa kompil. Tetapi ia juga mempunyai beberapa kali dinamik perkara-perkara seperti jika anda cuba untuk membuang sesuatu kepada jenis yang lebih khusus daripada jenis semasa, tiada apa-apa yang ia boleh lakukan pada masa kompil untuk memeriksa sama ada pelakon yang akan berjaya. Jawa juga mempunyai beberapa jenis dinamik memeriksa bahawa sebaik sahaja ia mendapat bahawa baris kod apabila ia sebenarnya melaksanakan, ia akan melakukan pelakon, memeriksa jika pelakon yang sah di tempat pertama, dan jika ia tidak, maka ia akan mengadu bahawa anda mempunyai jenis yang tidak sah. Jenis Dinamik memeriksa. Taipkan ini ke dalam fail yang dipanggil dynamic.php. Dynamic.php. Saya akan unzip format itu. Kami mempunyai pemboleh ubah, kita tetapkan ia kepada 7 integer, maka kita pergi untuk mencetak dan% s - Oh, kami mencetak jenis, jadi gettype akan memulangkan jenis pembolehubah. Kami hanya mencetak jenis berulang-ulang kali. Kami hanya php.dynamic.php. Kita akan melihat bahawa ia perubahan dari integer tali untuk Boolean seperti yang kita pergi melalui. Dalam C tiada jenis data Boolean, terdapat tiada jenis data rentetan. Ada char * dan Boolean hanya cenderung untuk menjadi int atau char atau sesuatu. Dalam PHP jenis ini memang wujud, dan itulah salah satu kelebihan besar PHP lebih C - bahawa operasi rentetan adalah tak terhingga lebih mudah dalam PHP daripada C. Mereka hanya bekerja. Jadi kita kembali ke sini. Kami berlari dynamic.php. Ini memberitahu jurubahasa PHP, dipanggil php, untuk menjalankan kod PHP dalam dynamic.php. Jika anda mempunyai sebarang kesilapan dalam fail, jurubahasa akan memberitahu anda! Jurubahasa, ini adalah satu lagi perbezaan yang besar antara PHP dan C. Dalam C, anda perlu untuk menyusun sesuatu dan kemudian anda menjalankan bahawa fail yang disusun. Dalam PHP anda tidak menyusun apa-apa. Jadi jurubahasa PHP pada dasarnya hanya membaca baris ini demi baris. Ia hits var = 7 maka ia mencecah printf maka ia mencecah var maka ia mencecah printf dan sebagainya. Terdapat sedikit menyusun ia, dan ia cache keputusan jadi jika anda menjalankan skrip kemudian anda boleh melakukan beberapa, tetapi pada dasarnya ia adalah garis oleh jenis garis perkara. Ini bermakna bahawa banyak pengoptimuman yang kita dapat dalam C, seperti menyusun, ia hanya secara amnya pengkompil boleh melakukan banyak helah untuk anda. Ia boleh mengambil pembolehubah yang tidak digunakan, ia boleh melakukan semua ini pelbagai perkara, ia boleh melakukan rekursi ekor. Dalam PHP anda tidak akan mendapat kelebihan yang kerana ia hanya akan mula melaksanakan baris demi baris demi baris, dan ia tidak benar-benar mengiktiraf perkara-perkara ini sebagai mudah kerana ia bukan 1 kompilasi pas besar ke atas perkara itu dan kemudian pelaksanaan; ia hanya baris demi baris. Jadi itulah jurubahasa. Kembali menaip dinamik kami: agak sejuk, eh? Anda pasti tidak boleh berbuat demikian di C! Sekarang, lihat jika anda boleh memikirkan jenis setiap daripada nilai berikut. Lihat ini untuk rujukan. Jadi 3.50. Apa jenis adakah anda berfikir bahawa akan menjadi? Berikut adalah jenis yang kita ada. Kami mempunyai bools, integer, titik terapung, rentetan, tatasusunan, objek, dan kemudian sumber, yang merupakan jenis samar-samar. Saya fikir ada sebenarnya satu contoh di sini. Kemudian ada NULL. NULL adalah jenis khas. Tidak seperti C mana NULL hanya penunjuk alamat dengan 0, dalam PHP, NULL adalah jenis sendiri di mana perkara yang hanya sah jenis itu adalah NULL. Ini adalah lebih berguna untuk menyemak ralat. Dalam C di mana kita mempunyai isu ini di mana jika anda kembali NULL, adakah itu bermakna anda kembali penunjuk NULL atau menggunakan NULL untuk menandakan kesilapan atau semua kekeliruan bahawa kita mempunyai pada satu titik. Sini, kembali NULL umumnya bermaksud kesilapan. Banyak perkara juga kembali palsu untuk kesilapan. Tetapi persoalannya adalah jenis NULL, satu-satunya jenis NULL NULL. Kemudian panggil balik adalah seperti anda boleh menentukan beberapa fungsi tanpa nama. Anda tidak perlu untuk memberikan fungsi nama, tetapi anda tidak akan perlu berurusan dengan itu di sini. Melihat jenis bahawa mereka mengharapkan kita tahu, apa yang anda fikir jenis iaitu 3.50 adalah? >> [Pelajar] Terapung. Yeah. Jadi maka di sini, apa yang anda fikir jenis ini adalah? >> [Pelajar] Array. Yeah. Yang pertama adalah apungan, yang kedua adalah array. Perhatikan bahawa pelbagai ini tidak seperti pelbagai C di mana anda mempunyai indeks 0 mempunyai beberapa nilai, indeks 1 mempunyai nilai tertentu. Sini indeks dan nilai-nilai a, b, dan c adalah 1, 2, dan 3. Dalam PHP, tidak ada perbezaan antara pelbagai bersekutu dan hanya pelbagai tetap kerana anda akan berfikir ia di C. Terdapat hanya ini, dan di bawah hood pelbagai biasa hanya pelbagai bersekutu di mana 0 peta untuk beberapa nilai dengan cara yang sama peta untuk beberapa nilai. Atas sebab ini, PHP boleh agak buruk untuk perkara yang benar-benar berpuasa kod / penandaarasan sejak dalam C apabila anda menggunakan array anda tahu bahawa mengakses ahli adalah pemalar masa. Dalam PHP mengakses ahli yang tahu berapa banyak masa? Ia mungkin berterusan jika ia Hash betul. Siapa tahu apa yang ia benar-benar melakukan di bawah hood? Anda benar-benar perlu untuk melihat pelaksanaan untuk melihat bagaimana ia akan untuk berurusan dengan itu. Jadi kemudian fopen. Saya berfikir di sini mari kita hanya PHP fopen manual untuk melihat jenis pulangan. Kita lihat di sini anda boleh melihat sehingga cukup banyak apa-apa fungsi dalam manual PHP dan ini adalah jenis halaman lelaki PHP. Jenis kembali akan menjadi sumber. Itulah sebabnya saya melihat ia naik, kerana kita tidak benar-benar menentukan sumber. Idea sumber, dalam C anda jenis mendapat * FILE atau apa sahaja; dalam PHP sumber * FILE anda. Ia adalah apa yang anda akan membaca dari, ia adalah apa yang anda akan menulis kepada. Ia biasanya luaran, jadi ia adalah sumber anda boleh menarik perkara-perkara dari dan membuang perkara yang perlu. Dan akhirnya, apakah jenis NULL? >> [Pelajar] NULL. Yeah. Jadi satu-satunya perkara yang NULL adalah NULL. NULL adalah NULL. Satu ciri sistem jenis PHP (bagi yang lebih baik atau untuk lebih teruk) adalah keupayaan untuk mengimbangi jenis. Apabila anda menulis baris kod PHP yang menggabungkan nilai jenis yang berbeza, PHP akan cuba untuk melakukan perkara yang wajar. Mencuba setiap baris kod PHP berikut. Apa yang dicetak? Adakah apa yang anda harapkan? Mengapa atau kenapa tidak? Ini fakta mengenai PHP adalah apa yang menjadikan ia apa yang kita panggil lemah ditaip. Ditaip dengan lemah dan kuat ditaip, terdapat kegunaan yang berbeza untuk istilah-istilah, tetapi kebanyakan orang menggunakan ditaip dengan lemah dan kuat ditaip bermakna perkara seperti ini mana ("1" + 2), yang berfungsi. Dalam C yang tidak akan bekerja. Anda boleh bayangkan ini tidak berfungsi. Ramai orang campuran menaip dinamik dan menaip lemah dan menaip statik dan menaip kuat. Python adalah satu lagi contoh bahasa yang dinamik ditaip. Anda boleh membuang sekitar jenis dalam pembolehubah dan ia akan menentukan pada masa jangka sebarang checkings kesilapan. Dalam Python ia akan melaksanakan ini dan ia akan melihat ("1" + 2); dan ini akan gagal kerana ia mengatakan anda tidak boleh menambah rentetan dan integer. Dalam PHP, yang merupakan hanya sebagai dinamik ditaip, ini tidak akan gagal. Menaip lemah mempunyai kaitan dengan hakikat bahawa ia tidak perkara dengan jenis yang tidak benar-benar masuk akal semestinya. Jadi ("1" + 2), saya boleh bayangkan bahawa menjadi rentetan 12, saya boleh bayangkan ia menjadi rentetan 3, Saya boleh bayangkan ia menjadi 3 integer. Ia tidak semestinya baik ditakrifkan, dan kita mungkin akan lihat di sini bahawa apabila kita mencetak ("1" + 2); ia mungkin akan berakhir yang berbeza daripada percetakan (1 + "2"). Dan ini cenderung untuk menjadi, pada pendapat saya, untuk lebih teruk. Di sini kita boleh cuba ini. Satu lagi helah sedikit tentang PHP adalah anda tidak perlu untuk benar-benar menulis fail. Ia telah menjalankan mod ini arahan. Jadi php-r, maka kita boleh membuang dalam arahan di sini: "Print ('1 '+ 2);" dan saya akan membuang baris baru. Ini dicetak 3. Ia kelihatan seperti ia mencetak 3 dan ia adalah 3 integer. Jadi sekarang mari kita cuba cara lain sekitar: "Print (1 + '2 '); Kami mendapat 3, dan ia juga akan menjadi integer 3? Saya secara jujur ​​tidak mempunyai idea. Ia kelihatan seperti itu adalah konsisten. Tidak pernah ada mana-mana peluang ia menjadi 12 tali atau apa-apa seperti yang kerana PHP, tidak seperti JavaScript dan Jawa juga, mempunyai pengendali berasingan untuk dinamika. Dinamika dalam PHP adalah dot. Jadi percetakan (1 '2 '.); Akan memberikan kita 12. Ini cenderung untuk membawa kepada kekeliruan di mana orang cuba untuk melakukan sesuatu seperti str + = beberapa perkara lain yang mereka mahu untuk menambah kepada hujung tali mereka, dan yang akan gagal. Anda perlu melakukan str = Jadi jangan lupa dinamika dalam PHP adalah titik. Perkara-perkara lain untuk mencuba: mencetak ("CS" + 50); Saya telah memberitahu anda bahawa tidak ada harapan ini mengakibatkan CS50 sejak dinamika tidak +. Apa yang anda fikir ini akan akhirnya menjadi? Saya secara jujur ​​telah benar-benar tidak tahu. Ia kelihatan seperti ia hanya 50. Ia melihat rentetan, dan saya yakin jika kita meletakkan 123CS - Ia melihat rentetan pertama, ia cuba untuk membaca integer daripada atau nombor dari. Dalam kes ini ia melihat 123CS. "Itu tidak masuk akal sebagai integer, jadi saya hanya akan berfikir daripada 123." Jadi 123 + 50 akan menjadi 173. Dan di sini ia mula membaca ini sebagai integer. Ia tidak melihat apa-apa, jadi ia hanya menganggap ia sebagai 0. Jadi 0 + 50 akan menjadi 50. Ini Saya menganggap akan melakukan sesuatu yang serupa. Saya berfikir 99. Ya, kerana ia akan mengambil yang pertama - Jadi 99. (10/7), jika ini adalah C, apa yang akan kembali? [Pelajar] 1. >> Ya, ia akan menjadi 1 kerana 10/7 membahagikan integer 2. Suatu integer yang dibahagikan dengan integer akan kembali integer. Ia tidak boleh kembali 1 mata apa yang akan menjadi, jadi ia hanya akan kembali 1. Berikut percetakan (10/7), ia akan benar-benar menafsirkan. Dan ini bermakna bahawa jika anda benar-benar mahu melakukan pembundaran integer dan hal-hal seperti itu, anda perlu untuk melakukan cetak (lantai (10/7)); Dalam C, ia mungkin pelik bahawa anda boleh bergantung kepada pemangkasan integer kerap, tetapi dalam PHP anda tidak boleh kerana ia akan secara automatik menjadikan ia ke dalam apungan. Dan kemudian (7 + benar); apa yang anda berfikir yang akan menjadi? Saya meneka 8 jika ia akan mentafsir sebenar sebagai 1. Ia kelihatan seperti ia adalah 8. Jadi apa-apa yang kita lakukan dalam tempoh 10 minit yang lepas anda perlu benar-benar tidak pernah melakukan. Anda akan melihat kod yang melakukan ini. Ia tidak perlu untuk menjadi semudah ini. Anda boleh mempunyai 2 pembolehubah, dan 1 pembolehubah yang berlaku kepada menjadi rentetan dan pembolehubah lain berlaku untuk menjadi int, dan kemudian anda menambah pembolehubah ini bersama-sama. Sejak PHP secara dinamik ditaip dan ia tidak akan melakukan apa-apa penyemakan jenis untuk anda dan sejak ia ditaip dengan lemah dan kerana ia akan hanya secara automatik membuang perkara-perkara ini bersama-sama dan segala-galanya hanya akan bekerja, ia adalah sukar untuk tahu bahawa pembolehubah ini mestilah rentetan sekarang, jadi saya tidak perlu menambah kepada pembolehubah ini, yang merupakan integer. Amalan terbaik adalah jika pembolehubah adalah rentetan, pastikan ia sebagai rentetan selama-lamanya. Jika pembolehubah int, pastikan ia sebagai int selama-lamanya. Jika anda mahu berurusan dengan integer dan rentetan, anda boleh menggunakan varsint - itulah JavaScript. Intval. Saya melakukan ini sepanjang masa. PHP dan JavaScript saya campuran segala-galanya. Jadi intval akan memulangkan nilai integer pemboleh ubah. Jika kita lulus dalam cetakan "(intval ('123 ')); anda mendapat 123. Intval dirinya tidak akan melakukan pemeriksaan bagi kita bahawa ia adalah semata-mata integer. Manual PHP, terdapat fungsi hanya begitu banyak boleh didapati, jadi di sini saya berfikir apa yang saya akan gunakan adalah is_numeric 1. Saya meneka yang mengembalikan palsu. Itulah satu lagi perkara yang kita perlu pergi lebih adalah ===. Jadi is_numeric ('123df '), anda tidak akan berfikir bahawa is_numeric. Dalam C anda akan mempunyai untuk melelar atas semua aksara dan memeriksa untuk melihat jika setiap aksara adalah angka atau apa sahaja. Berikut is_numeric akan berbuat demikian untuk kita, dan ia kembali palsu. Jadi apabila saya dicetak bahawa, ia dicetak apa-apa, jadi di sini saya membandingkan ia untuk melihat, adakah anda berlaku untuk menjadi palsu? Dan sebagainya kini ia mencetak 1. Rupa-rupanya ia mencetak 1 sebagai benar dan bukannya mencetak benar sebagai benar. Saya tertanya-tanya jika saya lakukan print_r. Tidak, ia masih tidak 1. Akan kembali ke ===, == masih wujud, dan jika anda bercakap kepada Tommy dia akan mengatakan == adalah betul-betul halus. Saya akan mengatakan bahawa == dahsyat dan anda tidak perlu menggunakan ==. Perbezaan adalah bahawa == membandingkan perkara di mana ia boleh menjadi benar walaupun jika mereka tidak jenis yang sama, sedangkan === membandingkan perkara dan pertama ia cek adalah mereka jenis yang sama? Ya. Okay, sekarang saya akan melihat jika mereka benar-benar istimewa untuk menjadi sama. Anda akan mendapat perkara-perkara pelik seperti 10 sama - biarlah yang melihat apa yang mengatakan. Jadi ('10 '== '1 E1'); Ini mengembalikan benar. Adakah sesiapa yang mempunyai apa-apa tekaan mengapa ini mengembalikan benar? Ia bukan sahaja tentang itu. Mungkin ini adalah petunjuk. Tetapi jika saya menukar bahawa f - darn it! Saya terus menggunakan tanda petikan berganda. Sebab petikan berganda menjerit pada saya adalah kerana saya telah meletakkan ini dalam tanda petikan berganda. Jadi saya dapat lari petikan kembar di sini, tetapi petikan tunggal membuat ia lebih mudah. Jadi ('10 '== '1 f1'); tidak mencetak benar. ('10 '== '1 E1'); mencetak benar. [Pelajar] Adakah ia hex? >> Ia tidak hex, tetapi ia dekat bahawa ia adalah seperti - 1e1, notasi saintifik. Ia mengiktiraf 1e1 sebagai 1 * 10 ^ 1 atau apa sahaja. Mereka adalah integer yang sama. Jika kita lakukan === maka ia akan menjadi palsu. Saya sebenarnya tidak mempunyai idea jika kita lakukan == apa tentang (10 dan '10abc '); Semua hak. Jadi yang benar. Jadi sama seperti apabila anda lakukan (10 + ''10abc); dan ia akan menjadi 20, di sini (10 == ''10abc); adalah benar. Lebih buruk lagi adalah perkara-perkara seperti (palsu == NULL); adalah benar atau (palsu == 0); adalah benar, (palsu == []); Terdapat kes-kes pelik - Itulah salah satu daripada kes-kes pelik. Perhatikan bahawa (palsu == []); adalah benar. ('0 '== Palsu); adalah benar. ('0 '== []); Adalah palsu. Jadi == adalah dengan cara tidak transitif. boleh sama b dan boleh menjadi sama dengan c, tetapi b tidak mungkin sama dengan c. Itulah satu kebencian kepada saya, dan anda perlu sentiasa menggunakan ===. [Pelajar] Bolehkah kita buat! == Juga? >> [Bowden] Ya. Akan bersamaan! = Dan! ==. Ini sebenarnya dibesarkan dalam spec pset di mana banyak pulangan fungsi - Manual PHP adalah baik tentang perkara ini. Ia meletakkan di dalam kotak merah yang besar, "Ini akan mengembalikan palsu jika ada kesilapan." Tetapi kembali 0 adalah satu perkara yang sempurna yang munasabah untuk kembali. Fikirkan tentang apa-apa fungsi yang dijangka kembali integer. Katakan fungsi ini sepatutnya untuk mengira bilangan baris dalam fail atau sesuatu. Bawah keadaan biasa, anda lulus fungsi fail ini dan ia akan kembali integer yang mewakili bilangan garisan. Jadi 0 adalah nombor yang sempurna munasabah jika fail adalah hanya kosong. Tetapi bagaimana jika anda lulus fail yang tidak sah dan fungsi berlaku untuk kembali palsu jika anda lulus fail yang tidak sah? Jika anda hanya melakukan == anda tidak membezakan kes antara fail yang tidak sah dan fail kosong. Sentiasa gunakan ===. Itu semua orang. Dalam PHP, pelbagai jenis adalah berbeza daripada apa yang anda digunakan untuk dalam C. Malah, anda mungkin sudah perhatikan di atas ini apabila anda melihat bahawa ini adalah pelbagai jenis. Sintaks kurungan baru sebagai PHP 5.4, yang merupakan versi terbaru PHP. Sebelum ini, anda sentiasa mempunyai untuk menulis array ('a' -> 1, 'b' -> 2. Itu adalah pembina untuk pelbagai. Sekarang PHP telah akhirnya datang sekitar untuk sintaks bagus hanya kurungan persegi, yang hanya begitu banyak yang lebih baik daripada pelbagai. Tetapi mengingati PHP 5,4 adalah versi terbaru, anda mungkin akan menghadapi tempat-tempat yang tidak mempunyai PHP 5,3. Lebih musim panas kita berlari ke dalam isu ini di mana PHP 5,3 adalah apa yang kita terpaksa perkakas, tetapi pelayan yang kita dikerahkan semua buku gred kami dan mengemukakan dan semua bahawa barangan untuk adalah PHP 5,4. Tidak mengetahui ini, kita maju pada 5,3, menolak kepada 5.4, dan sekarang semua tiada kod kami secara tiba-tiba berfungsi kerana ada berlaku perubahan telah berlaku di antara 5.3 dan 5.4 yang tidak serasi ke belakang, dan kita perlu pergi dan menetapkan semua perkara kami yang tidak bekerja untuk PHP 5.4. Untuk kelas ini, kerana perkakas tidak mempunyai 5,4 PHP, ia adalah betul-betul halus untuk menggunakan kurungan persegi. Tetapi jika anda sedang mencari perkara-perkara di sekeliling Internet, jika anda sedang mencari beberapa jenis barangan pelbagai, kemungkinan besar anda akan melihat ejaan keluar sintaks pembina pelbagai kerana itu telah wujud sejak PHP dilahirkan dan sintaksis kurungan persegi telah wujud untuk beberapa bulan yang lepas atau apabila 5,4 datang sekitar. Ini adalah bagaimana anda indeks. Sama seperti dalam C bagaimana anda akan indeks oleh kurungan persegi seperti array $ [0], array $ [1], array $ [2], anda indeks cara yang sama jika anda berlaku untuk mempunyai indeks anda menjadi rentetan. Pelbagai Jadi array $ [''] dan $ ['b']. Array $ [b]. Mengapa ini akan menjadi salah? Ia mungkin akan menjana amaran tetapi masih bekerja. PHP cenderung untuk berbuat demikian. Ia cenderung untuk adil, "Saya akan memberi amaran kepada anda tentang perkara ini, tetapi saya hanya akan terus pergi "Dan melakukan apa sahaja yang saya boleh." Ia mungkin akan menterjemahkan ini kepada rentetan, tetapi ia adalah mungkin bahawa pada satu ketika dalam seseorang lalu berkata menentukan b untuk menjadi 'HELLO DUNIA'. Jadi sekarang b boleh menjadi pelbagai berterusan dan $ [b] sebenarnya akan melakukan 'HELLO DUNIA'. Saya rasa pada ketika ini, atau sekurang-kurangnya tetapan PHP kami, jika anda cuba untuk indeks ke dalam array dan utama yang tidak wujud, ia akan gagal. Saya tidak fikir ia hanya akan memberi amaran kepada anda. Atau sekurang-kurangnya anda boleh menetapkan supaya ia tidak hanya memberi amaran kepada anda, ia hanya lurus sehingga gagal. Cara anda memeriksa untuk melihat jika terdapat sebenarnya adalah seperti indeks adalah isset. Jadi isset (array $ ['HELLO DUNIA']) akan kembali palsu. isset (array $ ['b']) akan kembali benar. Anda boleh mencampurkan sintaks ini. Saya agak pasti apa array ini akan akhirnya menjadi - Kita boleh menguji ia keluar. Oh, saya perlu PHPWord. Ini mencampurkan sintaks di mana anda tentukan apa kunci dan anda tidak menentukan apa kunci. Jadi 3 betul di sini adalah nilai. Anda telah tidak jelas berkata apa utamanya akan menjadi. Apa yang anda fikir utamanya akan menjadi? [Pelajar] 0. >> Saya meneka 0 sahaja kerana ia adalah satu yang pertama kita telah tidak dinyatakan. Kita sebenarnya boleh melakukan beberapa kes-kes ini. Jadi print_r adalah mencetak rekursi. Ia akan mencetak pelbagai keseluruhan. Ia akan mencetak subarrays array jika terdapat sebarang. Jadi print_r (array $); php.test.php. Ia tidak kelihatan seperti ia memberikannya 0. Terdapat sebenarnya sesuatu yang perlu diingat di sini, tetapi kita akan mendapat kembali ke dalam kedua. Tetapi apa jika saya berlaku untuk membuat indeks ini 1? PHP tidak membezakan antara indeks rentetan dan indeks integer, jadi pada ketika ini, saya baru sahaja ditakrifkan indeks 1 dan saya boleh melakukan kedua-dua array $ [1] dan array $ ['1 '] dan ia akan menjadi indeks yang sama dan kunci yang sama. Jadi sekarang apa yang anda berfikir 3 akan menjadi? >> [Pelajar] 2. >> [Bowden] Saya meneka 2. Yeah. Ia adalah 2. Bagaimana jika kita lakukan ini ialah 10, ini adalah 4? Apa yang anda fikir indeks 3 akan menjadi? Saya berfikir 11. Saya meneka apa PHP - dan saya fikir saya pernah dilihat sebelum ini - ia hanya menjejaki apa indeks tertinggi angka ia digunakan setakat ini adalah. Ia tidak akan memberikan indeks rentetan kepada 3. Ia sentiasa akan menjadi indeks angka. Jadi ia menjejaki satu tertinggi ia diberikan setakat ini, yang berlaku untuk menjadi 10, dan ia akan memberi 11-3. Apa yang saya katakan sebelum ini, notis cara ia mencetak array ini. Ia mencetak 10 utama, utama 4, utama 11, utama d. Atau pun mari kita buat - Saya rasa saya tidak meletakkan 0, tetapi ia adalah percetakan 1, 2, 3, 4. Apakah jika saya bertukar di sini? Atau mari kita sebenarnya hidupkan 2 ini. Kini ia mencetak 2, 1, 3, 4. Tatasusunan PHP tidak seperti biasa jadual hash anda. Ia adalah betul-betul munasabah untuk memikirkan mereka sebagai jadual hash 99% daripada masa. Tetapi dalam jadual hash anda tidak ada rasa perintah itu di mana perkara yang dimasukkan. Jadi secepat anda memasukkan ia ke dalam jadual hash anda, menganggap tidak ada senarai yang berkaitan dan anda boleh menilai dalam senarai berkaitan yang telah dimasukkan terlebih dahulu. Tetapi di sini kita dimasukkan 2 pertama dan ia tahu apabila ia mencetak pelbagai ini bahawa 2 datang pertama. Ia tidak mencetak ia keluar hanya dalam mana-mana perintah. Struktur data teknikal bahawa ia menggunakan peta yang diperintahkan, jadi ia memetakan kunci kepada nilai dan ia mengingat perintah di mana mereka kunci dimasukkan. Pada asasnya, ia adalah kepada beberapa komplikasi di mana ia adalah menjengkelkan untuk benar-benar - Katakan anda mempunyai pelbagai 0, 1, 2, 3, 4, 5 dan anda mahu mengambil indeks 2. Salah satu cara untuk melakukannya, mari kita lihat apa yang kelihatan seperti. 0, 2, 1, 3, 4. Nyahset berlaku kepada Nyahset kedua-dua pembolehubah dan indeks pelbagai. Jadi belum berikat (array $ [2]); Sekarang apa yang ini akan kelihatan seperti? 2 adalah hanya pergi, jadi yang sempurna denda. Lebih menjengkelkan ialah jika anda mahu perkara-perkara untuk benar-benar menjadi seperti array. Saya akan meletakkan nombor rawak. Sekarang notis indeks saya. Saya mahu ia hanya menjadi seperti pelbagai C mana ia pergi dari 0 hingga panjang - 1 dan saya boleh melelar atasnya seperti itu. Tetapi sebaik sahaja saya Nyahset indeks kedua, apa yang berada dalam indeks 3 tidak kini menjadi indeks 2. Sebaliknya, ia hanya membuang indeks yang dan sekarang anda pergi 0, 1, 3, 4. Ini adalah betul-betul munasabah. Ia hanya menjengkelkan dan anda perlu untuk melakukan perkara-perkara seperti sambat pelbagai. Yeah. [Pelajar] Apa yang akan berlaku jika anda mempunyai untuk gelung dan anda mahu untuk pergi ke atas semua unsur-unsur? Apabila ia mencecah 2, ia akan menghasilkan pernah? Iterating lebih array. Terdapat 2 cara anda boleh melakukannya. Anda boleh menggunakan tetap bagi gelung. Ini adalah lain Kerumitan PHP. Kebanyakan bahasa, saya akan berkata, mempunyai beberapa jenis panjang atau len atau sesuatu menunjukkan panjang array. Dalam PHP ia adalah kiraan. Jadi kiraan (array $); $ i + +) Mari kita hanya cetak (array $ [$ i]); Notis: Undefined offset: 2. Ia hanya akan gagal. Ini adalah sebab bahawa, bagi sebahagian besar, anda tidak perlu untuk melelar lebih pelbagai seperti ini. Ia mungkin keterlaluan, tetapi anda tidak perlu untuk melelar lebih pelbagai seperti ini kerana PHP menyediakan sintaks foreach mana foreach (array $ $ item). Sekarang jika kita mencetak ($ ​​item); - we'll berbincang dalam kedua - yang berfungsi dengan sempurna halus. Cara yang foreach bekerja adalah hujah pertama adalah pelbagai bahawa anda iterating lebih. Dan hujah kedua, perkara, melalui setiap laluan untuk gelung ia akan mengambil perkara seterusnya dalam array. Jadi ingat array mempunyai suatu perintah. Kali pertama melalui untuk gelung, perkara akan menjadi 123 maka ia akan menjadi 12, maka ia akan menjadi 13, maka ia akan menjadi 23, maka ia akan menjadi 213. Perkara yang dapat benar-benar pelik apabila anda melakukan sesuatu seperti foreach. Mari kita lihat apa yang berlaku kerana anda tidak perlu berbuat demikian. Bagaimana jika kita belum berikat (array $ [1]); Itu mungkin telah dijangka. Anda iterating lebih pelbagai ini, dan setiap kali anda unsetting indeks pertama. Jadi bagi indeks 0, perkara pertama, perkara mengambil nilai pada 0, jadi ia akan menjadi 123. Tetapi di dalam untuk gelung kita belum berikat index 1, supaya bermakna 12 hilang. Jadi mencetak. PHP_EOL. PHP_EOL hanya newline, tetapi ia adalah teknikal lebih mudah alih sejak baris baru dalam Windows adalah berbeza dari baris baru pada Mac dan UNIX. Pada Windows newline \ r \ n, manakala mana-mana sahaja ia cenderung hanya untuk menjadi \ n. PHP_EOL dikonfigurasi supaya ia menggunakan apa jua newline sistem anda adalah. Jadi mencetak bahawa. Mari kita tidak print_r (array $) pada akhir. Saya tidak mempunyai idea bahawa akan menjadi tingkah laku. Item masih mengambil nilai 12 walaupun kita Nyahset 12 sebelum kita pernah mendapat dari array. Jangan mengambil kata-kata saya ini, tetapi ia kelihatan seperti foreach mewujudkan salinan array dan kemudian item mengambil semua nilai salinan itu. Jadi, walaupun anda mengubah suai pelbagai di dalam gelung untuk, ia tidak akan menjaga. Item akan mengambil nilai-nilai asal. Mari kita cuba unsetting ia. Bagaimana jika ini adalah array $ [1] = "hello"; Walaupun kita meletakkan "hello" ke dalam array, item tidak pernah mengambil nilai itu. Ada lagi sintaks untuk foreach gelung di mana anda meletakkan 2 pembolehubah yang dipisahkan oleh anak panah. Ini pembolehubah pertama akan menjadi kunci nilai itu, dan ini pembolehubah kedua akan menjadi item yang tepat yang sama. Ini tidak menarik di sini, tetapi jika kita kembali kepada kes asal kita 'a' -> 1, 'B' -> 1, di sini jika kita hanya melelar untuk pelbagai setiap item, item akan menjadi 1 setiap kali tunggal. Tetapi jika kita juga mahu tahu kunci yang berkaitan dengan perkara yang maka kita lakukan sebagai $ kunci -> $ item. Jadi sekarang kita boleh melakukan cetak ($ ​​utama. ':'. Kini ia iterating lebih dan mencetak setiap kekunci dan nilai yang berkaitan. Satu perkara tambahan yang boleh kita lakukan dalam foreach gelung adalah anda mungkin melihat sintaks ini. Ampersands sebelum nama ubah cenderung untuk menjadi bagaimana PHP tidak rujukan. Jika rujukan adalah amat serupa kepada petunjuk, anda tidak mempunyai petunjuk, jadi anda tidak pernah berurusan dengan ingatan terus. Tetapi anda tidak mempunyai rujukan mana 1 pembolehubah merujuk kepada perkara yang sama sebagai pembolehubah lain. Dalam sini mari kita buat $ item. Mari kita kembali kepada 1, 10. Mari kita buat $ item + +; Itu masih wujud dalam PHP. Anda masih boleh melakukan + +. php.test.php. Saya mempunyai untuk mencetak. print_r (array $); Kami mencetak 2, 11. Jika saya baru sahaja dilakukan foreach (array $ $ item) maka item akan nilai 1 kali pertama melalui gelung. Ia akan kenaikan 1-2 dan kemudian kita lakukan. Jadi maka ia akan pergi melalui pas kedua gelung dan item tersebut adalah 10. Ia perkara kenaikan kepada 11, dan kemudian yang hanya dibuang. Kemudian kita print_r (array $); dan mari kita melihat bahawa ini adalah hanya 1, 10. Jadi kenaikan yang kita lakukan telah hilang. Tetapi foreach (array $ sebagai & $ item) kini perkara ini adalah perkara yang sama seperti hak ini di sini. Ia adalah perkara yang sama. Jadi $ item + + mengubahsuai pelbagai 0. Pada asasnya, anda juga boleh melakukan $ k -> $ pelbagai item dan anda boleh melakukannya $ [$ k] + +; Jadi cara yang lain berbuat demikian, kita bebas untuk mengubah suai item, tetapi itu tidak akan mengubah suai pelbagai asal kita. Tetapi jika kita menggunakan k, yang merupakan kunci kita, maka kita boleh hanya indeks ke dalam pelbagai kami menggunakan bahawa kunci dan bertambah. Ini lebih langsung mengubah pelbagai asal kita. Anda juga boleh berbuat demikian jika bagi sebab-sebab tertentu anda ingin keupayaan untuk mengubah suai - Sebenarnya, ini adalah betul-betul munasabah. Anda tidak mahu perlu menulis array $ [$ k] + +, anda hanya mahu untuk menulis $ item + + tetapi anda masih mahu mengatakan jika ($ k === 'a') kemudian kenaikan item dan kemudian mencetak pelbagai kami. Jadi sekarang apa yang kita mengharapkan print_r untuk melakukan? Apakah nilai yang perlu dicetak? [Pelajar] 2 dan 10. >> [Bowden] Hanya jika kunci '' kita sebenarnya mencetak bahawa. Anda mungkin sangat jarang, jika pernah, akan perlu untuk menentukan fungsi dalam PHP, tetapi anda mungkin melihat sesuatu yang serupa di mana anda menentukan fungsi seperti apa sahaja fungsi. Biasanya anda akan mengatakan ($ Anu, $ bar) dan kemudian menentukan ia menjadi apa sahaja. Tetapi jika saya lakukan ini, maka itu bermakna bahawa apa-apa panggilan apa sahaja, apa-apa panggilan Baz, jadi hujah pertama diluluskan untuk Baz boleh diubah. Mari kita buat $ Anu + +; dan di dalam sini mari kita lakukan Baz ($ item); Sekarang kita memanggil fungsi. Hujah yang diambil oleh rujukan, yang bermaksud bahawa jika kita mengubah suai kita mengubah perkara yang telah diluluskan. Dan percetakan ini kita menjangkakan - kecuali saya sehingga merosakkan sintaks - kami mendapat 2, 11, jadi ia sebenarnya incremented. Notis kita perlukan rujukan dalam 2 tempat. Bagaimana jika saya lakukan ini? Apa maknanya? [Pelajar] Ia akan berubah. >> Yeah. Item hanya satu salinan nilai dalam array. Jadi perkara akan berubah kepada 2, tetapi array ['a'] masih akan menjadi 1. Atau bagaimana jika saya melakukan ini? Sekarang item dihantar sebagai salinan kepada Baz. Jadi salinan hujah akan incremented kepada 2, tetapi item itu sendiri tidak pernah incremented kepada 2. Dan perkara adalah perkara yang sama sebagai kurungan pelbagai apa jua, jadi pelbagai bahawa tidak pernah incremented. Jadi kedua-dua mereka tempat memerlukannya. PHP adalah biasanya cukup bijak tentang perkara ini. Anda mungkin fikir saya mahu lulus oleh rujukan - Ini adalah sebenarnya satu soalan pada salah satu psets. Ia adalah satu perkara yang questions.txt di mana ia berkata, Mengapa anda mungkin mahu lulus struct ini dengan rujukan? Apakah jawapan untuk itu? [Pelajar] Jadi anda tidak perlu untuk menyalin sesuatu yang besar. >> Yeah. Struct boleh sewenang-wenangnya besar, dan apabila anda lulus struct sebagai hujah ia perlu untuk menyalin bahawa struct keseluruhan untuk lulus ia kepada fungsi, manakala jika anda hanya lulus struct oleh rujukan maka ia hanya perlu untuk menyalin alamat 4-bait sebagai hujah untuk fungsi. PHP adalah sedikit lebih bijak daripada itu. Jika saya mempunyai beberapa fungsi dan saya lulus pelbagai 1,000 perkara, adakah itu bermakna ia akan mempunyai untuk menyalin semua 1,000 daripada perkara-perkara untuk lulus ia ke dalam fungsi? Ia tidak perlu untuk berbuat demikian segera. Jika dalam fungsi ini ia tidak pernah benar-benar mengubah foo, jadi jika ($ Anu === 'hello') memulangkan benar.; Notis kita tidak pernah benar-benar diubahsuai dalam hujah fungsi ini, yang bermaksud bahawa apa sahaja yang telah diluluskan sebagai foo tidak perlu disalin kerana ia tidak mengubah ia. Jadi cara PHP kerja-kerja adalah hujah sentiasa rujukan yang diluluskan oleh sehingga anda sebenarnya cuba untuk mengubah suai ia. Sekarang jika saya katakan $ Anu + +; ia kini akan membuat satu salinan daripada foo asal dan mengubah suai salinan. Ini menjimatkan masa beberapa. Jika anda tidak pernah menyentuh adanya pelbagai besar-besaran, anda tidak benar-benar mengubah suai, ia tidak perlu untuk membuat salinan, sedangkan jika kita hanya meletakkan ini #: glib yang bermakna ia tidak walaupun salinan walaupun anda mengubah suai. Tingkah laku ini dipanggil salinan-on-menulis. Anda akan melihat ia di tempat-tempat lain, terutamanya jika anda mengambil kursus sistem operasi. Salin-on-menulis adalah corak yang agak biasa di mana anda tidak perlu untuk membuat salinan sesuatu melainkan jika ia benar-benar berubah. Yeah. [Pelajar] Bagaimana jika anda mempunyai kenaikan di dalam ujian, jadi hanya 1 elemen daripada sebanyak 1,000 akan perlu ditukar? Saya tidak pasti. Saya fikir ia akan menyalin keseluruhan perkara, tetapi ia adalah mungkin ia adalah bijak bahawa - Sebenarnya, apa yang saya berfikir adalah bayangkan kita mempunyai pelbagai yang kelihatan seperti ini: $ tatasusunan2 = [ Kemudian 'a' indeks adalah pelbagai [1 ​​2 3 4], dan indeks 'b' adalah pelbagai apa sahaja. Saya perlu koma antara semua orang. Bayangkan terdapat koma. Kemudian 'c' adalah 3 nilai. Okay. Sekarang mari kita mengatakan kita lakukan $ Baz ($ tatasusunan2); mana Baz tidak mengambil ini dengan rujukan. Jadi $ Anu ['c'] + +; Ini adalah satu contoh yang mana kita lulus tatasusunan2 sebagai hujah dan kemudian ia mengubah indeks khusus array oleh incrementing ia. Saya secara jujur ​​tidak mempunyai idea apa PHP akan lakukan. Ia dengan mudah boleh membuat salinan keseluruhan perkara, tetapi jika ia pintar, ia akan membuat salinan kunci ini di mana ini akan mempunyai nilai yang berbeza tetapi ini masih boleh menunjukkan pelbagai sama 1,2,3,4 dan ini masih boleh menunjukkan pelbagai sama. Saya akan iPad ia. Kami lulus dalam pelbagai ini di mana mata lelaki ini kepada 3, ini mata lelaki untuk [1,2,3,4], mata lelaki ini [34, ...] Sekarang bahawa kami lulus ia ke dalam Baz, kita mengubah suai ini. Jika PHP adalah pintar, ia hanya boleh lakukan - Kami masih mempunyai untuk menyalin beberapa memori, tetapi jika ada ini subarrays besar bersarang kita tidak perlu untuk menyalin mereka. Saya tidak tahu jika itulah apa yang ia lakukan, tetapi saya boleh bayangkan ia berbuat demikian. Ini juga merupakan satu kelebihan yang cukup besar C lebih PHP. PHP menjadikan kehidupan lebih mudah untuk banyak perkara, tetapi anda jenis benar-benar tidak mempunyai idea bagaimana ia akan melaksanakan kerana saya tidak mempunyai idea di bawah hood apabila ia membuat salinan ini perkara, oh, yang akan menjadi salinan pemalar masa, ia hanya akan untuk menukar 1 penunjuk, ia akan menjadi satu salinan linear sungguh sukar? Bagaimana jika ia tidak dapat mencari ruang? Adakah ia kemudian perlu untuk menjalankan pungutan sampah untuk mendapatkan lebih banyak ruang? Dan pengumpulan sampah boleh mengambil sewenang-wenangnya yang panjang. Dalam C anda tidak perlu bimbang tentang perkara-perkara ini. Setiap baris tunggal anda menulis anda boleh sebab yang cukup banyak tentang bagaimana ia akan melaksanakan. Mari kita melihat kembali pada. Bagaimana baik adalah bahawa anda tidak perlu berurusan dengan fungsi hash, dikaitkan senarai, atau apa-apa seperti itu? Sejak bekerja dengan jadual hash adalah begitu mudah sekarang, di sini adalah teka-teki yang menyeronokkan untuk bekerja. Membuka fail yang dipanggil unique.php dan menulis program PHP (Juga dikenali sebagai "script"). Kita cenderung untuk memanggil mereka skrip jika mereka perkara-perkara yang pendek yang anda menjalankan pada baris arahan. Pada asasnya, apa-apa bahasa yang anda tidak menyusun tetapi anda akan menjalankan executable pada baris arahan, anda boleh memanggil skrip laku. Saya seperti juga boleh menulis program C yang melakukan ini, tetapi saya tidak memanggilnya skrip sejak saya mula-mula menyusun dan kemudian berjalan binari. Tetapi program ini PHP kita pergi untuk memanggil skrip. Atau jika kita menulis dalam Python atau Perl atau Node.js atau apa-apa benda, kita akan memanggil mereka semua skrip kerana anda menjalankan mereka pada baris arahan tetapi kita tidak menyusun mereka. Yang boleh kita lakukan ini cukup cepat. Kami tidak akan menggunakan argv. Mari kita hanya meniup melalui ini. Memanggilnya unik, menulis program. Anda boleh mengandaikan bahawa input akan mengandungi satu perkataan setiap baris. Sebenarnya, argv akan agak remeh untuk digunakan. unique.php. Perkara pertama yang pertama, kita mahu untuk memeriksa jika kita telah lulus 1 baris arahan hujah. Sama seperti yang anda inginkan argc dan argv dalam C, kita masih mempunyai mereka dalam PHP. Jadi, jika ($ argc! == 2) maka saya tidak akan berurusan dengan mencetak mesej atau apa-apa. Saya hanya akan keluar, kod ralat 1. Saya juga dapat kembali 1. Jarang dalam PHP anda di negeri ini di mana kita berada di - Biasanya anda berada dalam fungsi yang dipanggil oleh fungsi yang dipanggil oleh fungsi yang dipanggil oleh fungsi. Dan jika sesuatu berlaku dan anda hanya mahu keluar segala-galanya dengan sepenuhnya, keluar hanya berakhir program. Ini juga wujud di C. Jika anda berada dalam fungsi dalam fungsi dalam fungsi dalam fungsi dan anda hanya mahu membunuh program, anda boleh memanggil keluar dan ia hanya akan keluar. Tetapi dalam PHP ia lebih jarang berlaku bahawa kita berada di tahap ini atas. Biasanya kita berada di dalam sejenis fungsi, jadi kita panggil keluar supaya kita tidak perlu untuk kembali sehingga 1 perkara yang kemudiannya menyedari terdapat kesilapan supaya kembali jika itu mengakui terdapat ralat. Kita tidak mahu berurusan dengan itu, jadi keluar (1); kembali (1), dalam kes ini akan menjadi setaraf. Kemudian apa yang kami mahu membuka kita mahu fopen. Hujah-hujah yang akan kelihatan agak serupa. Kami mahu fopen ($ argv [1], dan kami mahu membuka untuk membaca. Itu mengembalikan sumber yang kita akan memanggil f. Ini kelihatan agak serupa dengan bagaimana C adakah ia kecuali kita tidak perlu untuk mengatakan * FILE. Sebaliknya kita hanya mengatakan $ f. Okay. Sebenarnya, saya fikir ini juga memberikan kita petunjuk untuk fungsi PHP dipanggil fail. Fail PHP. Apakah ini akan lakukan adalah membaca keseluruhan fail ke array. Anda tidak perlu untuk fopen ia. Ia akan melakukannya untuk anda. Jadi $ baris = Fail ($ argv [1]); Sekarang semua baris fail dalam barisan. Sekarang kita mahu untuk menyusun barisan. Bagaimana kita boleh menyusun garisan? Kami menyusun baris. Dan sekarang kita boleh mencetak mereka atau apa sahaja. Mungkin cara yang paling mudah adalah foreach ($ barisan $ line) echo $ selaras; [Pelajar] Bukankah kita walaupun menyeberangi garisan dengan rujukan sesuatu ke dalam jenis? Ini adalah mana apapun akan ditakrifkan sebagai sejenis fungsi (& array $). Apabila anda memanggil fungsi anda tidak lulus oleh rujukan. Ia adalah fungsi yang mentakrifkan ia sebagai mengambil ia sebagai rujukan. Ini sebenarnya adalah apa yang silapnya apabila kita meletakkan segala-galanya kepada pelayan kami apabila kita pergi 5,3-5,4. Sehingga 5,4, ini adalah sempurna yang munasabah. Fungsi tidak mengharapkan untuk mengambil ia sebagai rujukan, tetapi anda boleh lulus ia sebagai rujukan jadi jika fungsi itu tidak berlaku untuk mengubah suai ia, ia masih diubahsuai. Seperti sebanyak 5.4, anda tidak sepatutnya untuk melakukan ini. Jadi sekarang satu-satunya cara anda lulus dengan merujuk jika fungsi jelas adakah ia. Jika anda tidak mahu ia untuk mengubah suai ia, maka anda perlu untuk melakukan $ = $ salinan garis dan salinan pas. Jadi sekarang garisan akan dipelihara dan salinan akan berubah. php.unique.php. Saya mungkin telah merosakkan sesuatu. Tidak dijangka 'jenis'. Terdapat akan menjadi sesuatu yang melakukan ini untuk kita. Ia tidak walaupun di sana. Notis apabila anda membaca manual bahawa hujah pertama dijangka menjadi array dan ia diambil oleh rujukan. Mengapa ini mengadu kepada saya? Kerana saya mempunyai jenis ini fungsi masih di sini bahawa saya tidak mahu. Okay, php.unique.php. Saya tidak lulus ia hujah kerana saya tidak mempunyai fail. Ia php.unique.php pada test.php. Berikut adalah test.php semua dicetak dalam perintah yang bagus disusun. Perhatikan bahawa perintah disusun adalah jenis pelik untuk fail kod kerana semua garisan kosong kami akan datang pertama kemudian akan datang semua tahap 1 lekuk kami kemudian datang semua lekuk tiada kami. Yeah. >> [Pelajar] Jadi untuk kod sumber, ia tidak diluluskan oleh rujukan? Adalah bahawa umumnya diluluskan oleh nilai? [Bowden] Apabila anda memanggil fungsi, ia tidak menentukan sama ada ia telah diluluskan oleh rujukan. Ia adalah definisi fungsi yang menentukan sama ada ia telah diluluskan oleh rujukan. Dan melihat definisi fungsi apapun atau hanya melihat ini, ia mengambil hujah oleh rujukan. Jadi, tanpa mengira sama ada anda mahu ia untuk mengambil ia melalui rujukan, ia tidak mengambil ia dengan rujukan. Ia mengubah pelbagai di tempat. Ini hanya tidak dibenarkan. Anda tidak dibenarkan untuk melakukan ini. >> [Pelajar] Oh, okay. [Bowden] Ini, apapun akan mengambil garisan dengan rujukan dan mengubah suai ia. Dan sekali lagi, jika anda tidak mahu ia untuk berbuat demikian, anda boleh membuat salinan apapun. Malah dalam kes ini, salinan sebenarnya bukanlah satu salinan baris. Ia hanya menunjukkan kepada perkara yang sama sehingga ia mula-mula mendapat diubahsuai, di mana ia mula-mula akan untuk diubahsuai dalam fungsi apapun, mana, kerana ia salinan-on-menulis, kini salinan salinan akan dibuat. Anda juga boleh melakukan ini. Itulah tempat lain anda boleh lihat #: glib. Anda lihat dalam gelung foreach, anda lihat dalam pengisytiharan fungsi, dan anda lihat apabila hanya memberikan pembolehubah. Sekarang kita telah dicapai apa-apa dengan berbuat demikian kerana salinan dan garisan literal perkara yang sama. Anda boleh menggunakan talian dan menyalin silih berganti. Anda boleh melakukan belum berikat ($ salinan); dan yang tidak garis belum berikat, anda hanya kehilangan rujukan anda untuk perkara yang sama. Jadi sebagai titik ini, kini garis adalah satu-satunya cara anda boleh mengakses garis. Soalan? Yeah. [Pelajar] sepenuhnya off topic, tetapi anda tidak perlu untuk menutup PHP dengan - >> Anda tidak lakukan. Okay. [Bowden] Saya akan pergi setakat untuk mengatakan ia adalah amalan buruk untuk menutup mereka. Itulah mungkin keterlaluan, terutama dalam skrip, tetapi mari kita lihat apa yang berlaku jika saya lakukan ini. Itu tidak berbuat apa-apa. Bagaimana jika saya mahu - [mengeluh] Saya perlu lulus hujah. Menembak. Saya dipanggil salah. Jadi php.unique.php dengan hujah. Sekarang saya tidak perlu ini. Saya akan lulus ia hujah yang sah. Ini dicetak apa sahaja ia adalah percetakan. Saya mencetak salinan dan salinan tidak wujud. Jadi baris. Ia dicetak segala-galanya, dan kemudian notis semua sampah ini ke sini, kerana dalam apa-apa PHP yang luar tag PHP hanya akan dicetak literal. Itulah sebabnya HTML, ia begitu baik yang boleh saya lakukan div blah, blah, blah kelas atau apa sahaja, blah, blah, blah dan kemudian melakukan beberapa kod PHP dan kemudian melakukan div akhir. Dan kini percetakan ini saya mendapat div bagus saya top up, segala-galanya bahawa PHP bercetak, span di bahagian bawah. Buruk apabila sesuatu seperti ini berlaku, yang agak biasa, hanya newline berkeliaran di bahagian bawah fail. Anda tidak akan berfikir ia akan menjadi begitu besar perjanjian sehingga anda mempertimbangkan fakta bahawa dengan pelayar - Bagaimana pelencongan kerja atau pada dasarnya apa-apa kerja header, apabila anda membuat sambungan anda ke laman web dan ia menghantar kembali semua tajuk dan perkara-perkara seperti 200 respons atau tindak balas redirect atau apa sahaja, header hanya sah sehingga bait pertama data dihantar. Anda boleh mengalihkan beribu-ribu kali, tetapi secepat bait pertama data dihantar anda tidak sepatutnya untuk mengalihkan lagi. Jika anda mempunyai newline berkeliaran di bahagian bawah fail dan mari kita mengatakan bahawa anda menggunakan fungsi ini dan kemudian anda mahu - Mari kita mengatakan ia adalah satu lagi fail yang index.php dan anda require_once sesuatu - Saya tidak dapat memikirkan contoh yang baik itu. Isu yang berlaku ketika ini garis di bawah mendapat bergema. Anda tidak mahu apa-apa yang telah bergema lagi. Walaupun anda tidak berniat apa-apa jua yang semakin bergema, sesuatu tidak mendapat bergema dan jadi sekarang anda tidak sepatutnya untuk menghantar apa-apa lagi header dan anda akan mendapat aduan. Anda hanya tidak memerlukan tag penutup tersebut. Jika anda merancang untuk melakukan sesuatu dengan HTML - dan ia adalah betul-betul munasabah untuk berbuat turun di sini div apa jua dan kemudian pada ketika ini anda boleh atau anda tidak boleh memasukkan mereka. Ia tidak benar-benar perkara. Tetapi dalam skrip PHP ia adalah jarang untuk menutup ia. Apabila segala-galanya adalah PHP, benar-benar segala-galanya, anda tidak benar-benar perlu untuk menutup / anda tidak perlu menutup. Berurusan dengan rentetan adalah lebih bagus daripada di C. Dalam PHP, anda boleh menentukan rentetan dengan petikan tunggal atau berganda. Dengan petikan tunggal anda tidak boleh menggunakan "melarikan diri" urutan. Sentiasa melarikan diri, blah, blah, blah. Jadi printf adalah sangat jarang berlaku dalam PHP. Saya rasa saya akan menggunakan printf jika saya mahu melakukan apapun perkara - dalam pset 5 anda digunakan sprintf atau apa sahaja. Tetapi anda mahu lakukan 001.jpg dan 002.jpg. Jadi untuk jenis yang perkara di mana saya sebenarnya mahu untuk memformat teks saya akan menggunakan printf. Tetapi jika tidak, saya hanya akan menggunakan dinamika tali. Saya tidak pernah benar-benar menggunakan printf. Kami hanya membezakan butiran antara petikan tunggal dan petikan berganda. Perbezaan terbesar adalah bahawa petikan tunggal, ia akan dicetak secara literal. Terdapat tiada jenis data char dalam PHP, tidak seperti C, jadi ini adalah bersamaan dengan ini. Mereka kedua-dua rentetan. Dan perkara yang baik tentang rentetan quote tunggal adalah saya boleh mengatakan 'hello dunia!' blah, blah, blah, $ $ Wooo. Apa yang berlaku apabila saya mencetak ini adalah ia akan mencetak ia benar-benar. Mari kita menghilangkan semua barangan kami. Jadi echo $ str1; Ia benar-benar dicetak semua perkara-perkara: tanda-tanda dolar, backslash n, yang anda akan berfikir akan menjadi baris baru - semua perkara-perkara ia mencetak harfiah. Satu-satunya perkara yang anda perlu untuk melarikan diri adalah petikan tunggal kerana jika tidak, ia akan berfikir ia menutup petikan tunggal. Petikan berganda, benar-benar berbeza. Kita sudah melihat penonjolan sintaks cluing kita kepada apa yang kira-kira untuk pergi betul-betul salah. php.unique. Undefined ubah: Wooo kerana ini ditafsirkan sebagai pembolehubah yang dipanggil Wooo. Petikan berganda membolehkan anda memasukkan pembolehubah ke - Katakan $ name = "Rob"; Jadi echo "Hi, nama saya adalah $ name!"; Ia mengiktiraf ini sebagai pembolehubah. Apabila saya berlari bahawa - dan saya akan memasukkan newline - Hi, nama saya Rob! dan hello dunia! Ini adalah kerana saya tidak pernah dikeluarkan percetakan Wooo diatas. Terdapat 1 langkah seterusnya yang boleh anda lakukan. Array $ = [1, 2, 3]; Bagaimana jika saya ingin mencetak indeks pertama array? Anda boleh melakukan array $ [0]. Penonjolan sintaks adalah petunjuk. Apakah ini akan lakukan? php.unique. Hai, nama saya ialah 1! yang bukan apa yang saya mahukan. Penonjolan sintaks berbohong kepada saya. Mari kita cuba '' -> 1, 'b' -> 2. Itulah bagaimana saya harus menulis. Unexpected quote tunggal (T_ENCAPSED blah, blah, blah, blah, blah). Idea ini adalah bahawa ia tidak mengiktiraf ini sebagai sebahagian array. Ia tidak mengiktiraf ini sebagai pelbagai yang diindeks oleh surat. Anda mahu melakukan yang dikelilingi oleh pendakap kerinting, dan sekarang apa yang dalam pendakap kerinting ini akan penentu, yang merupakan perkataan yang kita gunakan untuk ajaib memasukkan pembolehubah ini ke tempat yang betul. Kini melakukan ini, php.unique, dan Hai, nama saya ialah 1! seperti yang dijangkakan atau Hi, nama saya Rob! Satu perkara yang jenis baik tentang petikan tunggal adalah bahawa - Terdapat beberapa kos penentudalaman. Jika anda menggunakan tanda petikan berganda, jurubahasa untuk pergi ke atas rentetan ini, memastikan bahawa, "Oh, di sini adalah pembolehubah. Sekarang saya perlu pergi mendapatkan pemboleh ubah itu dan masukkan ia di sini." Malah jika anda tidak menggunakan mana-mana pembolehubah, apa-apa di dalam petikan double perlu penentu, tetapi ia masih akan menjadi lebih perlahan kerana ia perlu untuk pergi ke atas petikan berganda mencari perkara-perkara yang perlu penentu. Petikan Jadi tunggal boleh agak cepat jika tiada perlu penentu, dan saya cenderung untuk menggunakan tanda petikan tunggal, 'Hai, nama saya'. Array $ ['a'] anyway. Itu akan menjadi bersamaan dengan apa yang kita lalui sebelum. Tetapi ia adalah satu perkara keutamaan. Jika anda menggunakan PHP, anda mungkin tidak mengambil berat tentang perbezaan kelajuan. Terdapat tidak cukup sebab mereka keluar untuk memulakan dengan. Sebarang soalan akhir? Kita sebenarnya tidak bahkan mendapatkan melalui semua itu, tetapi barangan ini adalah membosankan. Perkara terakhir yang jenis baik dalam PHP adalah apabila anda berurusan dengan HTML, anda akan menggunakan ia sedikit, jadi sintaks pintasan bagus untuk mencetak pembolehubah. Tanpa meletakkan PHP sini, ini dipanggil tag pendek. Secara rasmi sebagai PHP 5.4, ini dikecam. Anda disyorkan untuk meletakkan php. Ini masih disokong, begitu pendek tag dengan