[Powered by Google Translate] [Bagian 8 - Lebih Nyaman] [Rob Bowden - Harvard University] [Ini adalah CS50. - CS50.TV] Catatan minggu Bagian ini akan menjadi cukup pendek, jadi aku hanya akan terus berbicara, kalian akan terus mengajukan pertanyaan, dan kami akan mencoba untuk mengisi waktu sebanyak mungkin. Banyak orang berpikir bahwa pset ini tidak selalu sulit, tapi itu sangat panjang. Spec pset itu sendiri membutuhkan waktu satu jam untuk membaca. Kami memberi Anda banyak SQL Anda mungkin perlu menggunakan. Kami memandu Anda melalui banyak hal, sehingga tidak boleh terlalu buruk. Telah ada yang mulai atau selesai? Ini adalah pset terakhir. Oh, Tuhan. Biasanya ada satu JavaScript setelah ini, namun kalender hal berubah membuat segalanya 1 minggu lebih pendek, dan kita tidak lagi memiliki pset JavaScript. Aku tidak tahu bagaimana yang mempengaruhi apakah JavaScript akan muncul pada ujian atau Kuis 1. Aku membayangkan itu akan menjadi sesuatu seperti Anda perlu tahu tingkat tinggi hal tentang JavaScript, tapi aku ragu kami hanya akan memberikan Anda langsung kode JavaScript karena Anda tidak memiliki pset di dalamnya. Tapi itu akan menjadi hal untuk ditinjau kuis minggu depan. Bagian pertanyaan. Banyak hal ini agak buruk worded, tetapi kita akan membahas mengapa. Tidak seperti C, PHP adalah "dinamis-mengetik" bahasa. Apa artinya ini, Anda bertanya? Nah, mengatakan selamat tinggal kepada semua orang float, char, int, dan kata kunci lain yang Anda perlu menggunakan ketika mendeklarasikan variabel dan fungsi dalam C. Dalam PHP, tipe variabel ditentukan oleh nilai yang saat itu memegang. Jadi sebelum kita mengetik kode ini ke dalam sebuah file bernama dynamic.php, PHP secara dinamis diketik. Itu benar. Saya tidak setuju dengan fakta bahwa itu berarti kita mengucapkan selamat tinggal char, float, int, dan kata kunci lainnya. Perbedaan yang tepat antara dinamis diketik dan alternatif, yang statis diketik, adalah yang secara dinamis diketik, semua memeriksa jenis dan hal-hal terjadi pada waktu berjalan, sedangkan statis diketik itu terjadi pada waktu kompilasi. Kata statis secara umum tampaknya berarti hal waktu kompilasi. Saya kira ada kegunaan lain untuk itu, tapi di C ketika Anda mendeklarasikan variabel statis, penyimpanan dialokasikan pada waktu kompilasi. Di sini, dinamis diketik hanya berarti bahwa - Dalam C jika Anda mencoba untuk menambahkan string dan integer, ketika Anda kompilasi, itu akan mengeluh karena itu akan mengatakan bahwa Anda tidak dapat menambahkan sebuah int dan pointer. Itu tidak hanya operasi yang valid. Itu adalah hal lain yang kita akan mendapatkan dalam detik. Tapi itu semacam pemeriksaan, fakta bahwa itu mengeluh pada waktu kompilasi, adalah memeriksa jenis statis. Ada bahasa di mana Anda tidak perlu mengatakan char, float, int, dan semua hal-hal, tetapi bahasa dapat memberitahu dari konteks hal apa jenis itu seharusnya, tapi masih statis diketik. Jadi jika Anda mengambil 51, OCaml, Anda tidak perlu menggunakan salah satu jenis, tetapi masih akan pada waktu kompilasi mengatakan Anda tidak dapat melakukan ini karena Anda mencampur int dan string. Dinamis diketik hanya berarti bahwa kadang-kadang selama waktu berjalan Anda akan mendapatkan keluhan. Jika Anda juga menggunakan Java sebelumnya, secara umum, hampir semua bahasa C-jenis ini akan statis diketik, sehingga C, C + +, Java, semua orang umumnya statis diketik. Di Jawa ketika Anda mengkompilasi sesuatu dan Anda katakan string s sama dengan sesuatu yang baru yang tidak string, yang akan mengeluh karena mereka jenis hanya tidak cocok. Itu akan mengeluh pada waktu kompilasi. Tetapi juga memiliki beberapa waktu dinamis hal seperti jika Anda mencoba untuk melemparkan sesuatu untuk jenis yang lebih spesifik daripada jenis saat ini, tidak ada yang dapat Anda lakukan di waktu kompilasi untuk memeriksa apakah pemain yang akan berhasil. Java juga memiliki beberapa tipe dinamis memeriksa bahwa segera setelah sampai ke baris kode ketika itu benar-benar melaksanakan, itu akan melakukan cast, memeriksa apakah pemain yang berlaku di tempat pertama, dan jika tidak, maka akan mengeluh bahwa Anda memiliki jenis yang tidak valid. Tipe dinamis memeriksa. Ketik ini menjadi sebuah file bernama dynamic.php. Dynamic.php. Saya akan unzip format itu. Kami memiliki sebuah variabel, kita set ke 7 bilangan bulat, maka kita akan mencetak dan s% - Oh, kami mencetak jenis itu, sehingga GetType akan mengembalikan jenis variabel. Kami hanya mencetak jenis berulang-ulang. Kami hanya php.dynamic.php. Kita akan melihat bahwa hal itu berubah dari integer ke string ke Boolean seperti yang kita pergi melalui. Dalam C tidak ada tipe data Boolean, tidak ada tipe data string. Ada * char dan Boolean hanya cenderung int atau char atau sesuatu. Dalam PHP jenis memang ada, dan itulah salah satu keuntungan besar atas PHP C - bahwa operasi string yang jauh lebih mudah daripada di PHP C. Mereka hanya bekerja. Jadi kami datang kembali ke sini. Kami berlari dynamic.php. Ini memberitahu interpreter PHP, yang disebut php, untuk menjalankan kode PHP di dynamic.php. Jika Anda memiliki kesalahan dalam file, penafsir akan memberitahu Anda! Si penerjemah, ini merupakan salah satu perbedaan besar antara PHP dan C. Dalam C Anda harus mengkompilasi sesuatu dan kemudian Anda menjalankan file dikompilasi. Dalam PHP Anda tidak pernah mengkompilasi sesuatu. Jadi interpreter PHP pada dasarnya hanya membaca baris demi baris ini. Hits var = 7 maka hits printf maka hits var maka hits printf dan sebagainya. Ada sedikit kompilasi yang dilakukannya, dan cache hasil jadi jika Anda menjalankan script kemudian Anda dapat melakukan beberapa, tetapi pada dasarnya itu adalah baris demi baris semacam itu. Itu berarti bahwa banyak dari optimasi yang kita dapatkan di C, seperti kompilasi, itu hanya umumnya compiler dapat melakukan banyak trik untuk Anda. Hal ini dapat mengambil variabel yang tidak digunakan, dapat melakukan semua hal-hal ini, ia bisa melakukan rekursi ekor. Dalam PHP Anda tidak akan mendapatkan keuntungan yang karena itu hanya akan mulai menjalankan baris demi baris demi baris, dan itu tidak benar-benar mengenali hal-hal dengan mudah karena tidak lulus 1 kompilasi besar atas hal tersebut dan kemudian eksekusi; itu hanya baris demi baris. Jadi itulah penafsir. Kembali ke mengetik dinamis kami: pretty cool, eh? Anda pasti tidak bisa melakukan itu di C! Sekarang, lihat apakah Anda dapat mengetahui jenis dari masing-masing nilai berikut. Lihat ini untuk referensi. Jadi 3,50. Apa jenis apakah Anda berpikir bahwa akan menjadi? Berikut adalah jenis yang kita miliki. Kami memiliki bools, bilangan bulat, titik mengambang, string, array, objek, dan kemudian sumber daya, yang merupakan jenis samar. Saya pikir sebenarnya ada contoh di sini. Lalu ada NULL. NULL adalah jenis khusus. Tidak seperti C di mana NULL hanya pointer dengan alamat 0, di PHP, NULL adalah tipe sendiri di mana satu-satunya hal yang sah dari jenis yang NULL. Ini jauh lebih berguna untuk pengecekan error. Dalam C di mana kita punya masalah di mana jika Anda kembali NULL, artinya Anda kembali pointer NULL atau menggunakan NULL untuk menandakan kesalahan atau semua kebingungan yang kami punya pada satu titik. Di sini, kembali NULL umumnya berarti kesalahan. Banyak hal juga return false untuk kesalahan. Tapi intinya adalah jenis NULL, satu-satunya jenis NULL NULL. Kemudian callback seperti Anda dapat mendefinisikan beberapa fungsi anonim. Anda tidak harus memberikan fungsi nama, tetapi Anda tidak akan harus berurusan dengan itu di sini. Melihat jenis bahwa mereka mengharapkan kita untuk mengetahui, apa yang Anda pikir jenis 3,50 adalah? >> [Mahasiswa] Float. Ya. Jadi di sini, apa yang Anda pikir jenis ini? >> [Mahasiswa] Array. Ya. Yang pertama adalah float, yang kedua adalah array. Perhatikan bahwa array ini tidak seperti array C di mana Anda memiliki indeks 0 memiliki beberapa nilai, indeks 1 memiliki beberapa nilai. Berikut indeks adalah, b, dan c, dan nilai-nilai adalah 1, 2, dan 3. Dalam PHP tidak ada perbedaan antara sebuah array asosiatif dan hanya array biasa seperti yang Anda akan berpikir itu di C. Ada hanya ini, dan di bawah kap sebuah array biasa hanya sebuah array asosiatif di mana 0 peta untuk beberapa nilai dengan cara yang sama peta untuk beberapa nilai. Untuk alasan ini, PHP dapat menjadi sangat buruk untuk benar-benar cepat kode / pembandingan hal karena dalam C ketika Anda menggunakan sebuah array Anda tahu bahwa mengakses anggota adalah waktu yang konstan. Dalam PHP mengakses anggota adalah yang tahu berapa banyak waktu? Mungkin konstan jika hash dengan benar. Siapa yang tahu apa itu benar-benar melakukan bawah tenda? Anda benar-benar perlu untuk melihat pelaksanaan untuk melihat bagaimana hal itu akan berurusan dengan itu. Jadi fopen. Saya pikir di sini mari fopen pengguna hanya PHP untuk melihat jenis kembali. Kita lihat di sini Anda dapat melihat cukup banyak fungsi apapun di manual PHP dan ini adalah semacam halaman manual PHP. Jenis kembali akan menjadi sumber daya. Itulah mengapa aku mencarinya, karena kita tidak benar-benar mendefinisikan sumber daya. Ide sumber daya, di C Anda jenis mendapat * FILE atau apa pun; di PHP adalah sumber daya * FILE Anda. Ini adalah apa yang Anda akan membaca dari, itu apa yang Anda akan menulis untuk. Ini biasanya eksternal, sehingga sumber daya yang Anda dapat menarik hal-hal dari dan membuang hal-hal yang. Dan akhirnya, apa jenis NULL? >> [Mahasiswa] NULL. Ya. Jadi satu-satunya hal yang NULL NULL. NULL NULL. Salah satu fitur dari sistem tipe PHP (untuk lebih baik atau buruk) adalah kemampuannya untuk menyulap jenis. Ketika Anda menulis baris kode PHP yang menggabungkan nilai-nilai dari berbagai jenis, PHP akan mencoba untuk melakukan hal yang masuk akal. Cobalah setiap baris kode berikut PHP. Apa yang dicetak? Apakah apa yang Anda harapkan? Mengapa atau mengapa tidak? Fakta tentang PHP adalah apa yang membuatnya apa yang kita sebut lemah diketik. Lemah diketik dan sangat diketik, ada kegunaan yang berbeda untuk istilah-istilah tersebut, tetapi kebanyakan orang menggunakan lemah diketik dan sangat diketik berarti hal semacam ini di mana ("1" + 2), yang bekerja. Dalam C yang tidak akan bekerja. Anda bisa membayangkan hal ini tidak bekerja. Banyak orang mencampur mengetik dinamis dan mengetik lemah dan statis mengetik dan mengetik yang kuat. Python adalah contoh lain dari bahasa yang dinamis diketik. Anda dapat membuang sekitar jenis dalam variabel dan itu akan menentukan pada saat run setiap checkings kesalahan. Dalam Python itu akan mengeksekusi ini dan itu akan melihat ("1" + 2); dan ini akan gagal karena ia mengatakan Anda tidak dapat menambahkan string dan integer. Dalam PHP, yang sama dinamis diketik, ini tidak akan gagal. Mengetik lemah hubungannya dengan fakta bahwa ia melakukan hal-hal dengan jenis yang tidak benar-benar masuk akal tentu. Jadi ("1" + 2), saya bisa membayangkan bahwa menjadi string 12, saya bisa membayangkan itu menjadi string 3, Aku bisa membayangkan itu menjadi 3 bilangan bulat. Ini tidak selalu didefinisikan dengan baik, dan kita mungkin akan melihat di sini bahwa ketika kita cetak ("1" + 2), itu mungkin akan berakhir menjadi berbeda dari pencetakan (1 + "2"). Dan ini cenderung, menurut pendapat saya, menjadi buruk. Di sini kita dapat mencoba ini. Trik lain sedikit tentang PHP adalah Anda tidak perlu untuk benar-benar menulis file. Itu telah menjalankan modus perintah. Jadi php-r, maka kita bisa melempar perintah di sini: "Print ('1 '+ 2)," dan aku akan melemparkan baris baru. Ini dicetak 3. Sepertinya mencetak 3 dan itu adalah 3 integer. Jadi sekarang mari kita coba sebaliknya: "Print (1 + '2 '); Kami mendapatkan 3, dan itu juga akan menjadi bilangan bulat 3? Saya jujur ​​tidak tahu. Sepertinya yang konsisten. Tidak pernah ada kesempatan itu menjadi 12 string atau sesuatu seperti itu karena PHP, tidak seperti JavaScript dan Jawa juga, memiliki operator yang terpisah untuk penggabungan. Rangkaian di PHP adalah titik. Jadi pencetakan (1 '2 '.); Akan memberi kita 12. Hal ini cenderung menyebabkan kebingungan di mana orang mencoba untuk melakukan sesuatu seperti str + = beberapa hal lain yang mereka ingin menambahkan ke akhir dari string mereka, dan itu akan gagal. Anda perlu melakukan str. = Jadi jangan lupa Rangkaian di PHP adalah sebuah titik. Hal-hal lain untuk mencoba: cetak ("CS" + 50); Aku sudah bilang bahwa tidak ada harapan ini mengakibatkan CS50 Rangkaian karena tidak +. Apa yang Anda pikir ini akan berakhir menjadi? Saya jujur ​​sama sekali tidak tahu. Sepertinya itu hanya 50. Ia melihat string, dan saya yakin jika kita menempatkan 123CS - Ia melihat string pertama, mencoba untuk membaca integer dari itu atau nomor dari itu. Dalam hal ini melihat 123CS. "Itu tidak masuk akal sebagai integer, jadi aku hanya akan memikirkan 123." Jadi 123 + 50 akan menjadi 173. Dan di sini ia mulai membaca ini sebagai integer. Ia tidak melihat apa-apa, sehingga hanya memperlakukan sebagai 0. Jadi 0 + 50 akan menjadi 50. Ini Aku menduga akan melakukan sesuatu yang mirip. Aku berpikir 99. Ya, karena itu akan mengambil pertama - Jadi 99. Berikut (10/7), jika ini adalah C, apa yang akan yang kembali? [Mahasiswa] 1. >> Ya, itu akan menjadi 1 karena 10/7 adalah membagi 2 bilangan bulat. Integer dibagi dengan integer akan mengembalikan integer. Hal ini tidak dapat kembali 1 apapun titik yang akan, sehingga hanya akan mengembalikan 1. Berikut mencetak (10/7), itu akan benar-benar menafsirkan itu. Dan ini berarti bahwa jika Anda benar-benar ingin melakukan pembulatan integer dan hal-hal seperti itu, Anda perlu melakukan print (lantai (10/7)); Dalam C itu mungkin aneh bahwa Anda dapat mengandalkan pemotongan bilangan bulat teratur, tapi di PHP Anda tidak bisa karena akan otomatis mengubahnya menjadi pelampung. Dan kemudian (7 + true); apa yang Anda pikir itu akan menjadi? Saya menduga 8 jika itu akan menafsirkan benar sebagai 1. Sepertinya itu 8. Jadi apa pun yang kita lakukan dalam 10 menit terakhir Anda harus benar-benar tidak pernah lakukan. Anda akan melihat kode yang melakukan hal ini. Tidak harus sesederhana ini. Anda bisa memiliki 2 variabel, dan 1 variabel terjadi menjadi string dan variabel lainnya terjadi menjadi sebuah int, dan kemudian Anda menambahkan variabel-variabel bersama-sama. Karena PHP secara dinamis diketik dan tidak akan melakukan pengecekan jenis untuk Anda dan sejak itu lemah diketik dan karena itu hanya akan membuang otomatis hal bersama-sama dan semuanya hanya akan bekerja, sulit untuk tahu bahwa variabel ini harus string sekarang, jadi saya tidak harus menambahkannya ke variabel ini, yang merupakan integer. Praktik terbaik adalah jika variabel adalah string, menyimpannya sebagai string selamanya. Jika suatu variabel int, tetap sebagai int selamanya. Jika Anda ingin berhubungan dengan bilangan bulat dan string, Anda dapat menggunakan varsint - itu JavaScript. Intval. Saya melakukan hal ini sepanjang waktu. PHP dan JavaScript saya mencampur semuanya. Jadi intval akan mengembalikan nilai integer dari variabel. Jika kita lulus dalam "cetak (intval ('123 ')); Anda mendapatkan 123. Intval sendiri tidak akan melakukan cek bagi kita bahwa itu eksklusif integer. Manual PHP, ada fungsi begitu banyak tersedia, jadi di sini saya pikir apa yang akan saya gunakan adalah is_numeric pertama. Saya menduga bahwa kembali palsu. Itu hal lain kita harus pergi ke atas adalah ===. Jadi is_numeric (''123df), Anda tidak akan berpikir bahwa sebagai is_numeric. Dalam C Anda harus iterate atas semua karakter dan memeriksa untuk melihat apakah karakter setiap digit atau apa pun. Berikut is_numeric akan melakukannya untuk kita, dan itu kembali palsu. Jadi ketika saya dicetak itu, dicetak apa-apa, jadi di sini saya membandingkannya dengan melihat, apakah Anda kebetulan menjadi salah? Dan jadi sekarang itu mencetak 1. Rupanya itu mencetak 1 sebagai benar bukannya mencetak benar sebagai benar. Aku ingin tahu apakah saya melakukan print_r. Tidak, itu masih tidak 1. Kembali ke ===, == masih ada, dan jika Anda berbicara dengan Tommy mengatakan dia akan baik-baik saja ==. Aku akan mengatakan bahwa == mengerikan dan Anda tidak harus menggunakan ==. Perbedaannya adalah bahwa == membandingkan hal-hal mana bisa berlaku bahkan jika mereka bukan tipe yang sama, sedangkan === membandingkan hal-hal dan cek pertama mereka jenis yang sama? Ya. Oke, sekarang aku akan melihat apakah mereka benar-benar dibandingkan harus sama. Anda mendapatkan hal-hal aneh seperti 10 sama - mari kita melihat apa yang mengatakan. Jadi ('10 '== '1 e1'); Hal ini mengembalikan nilai true. Apakah ada yang punya tebakan mengapa hal ini mengembalikan nilai true? Ini bukan hanya tentang itu. Mungkin ini adalah petunjuk. Tetapi jika saya mengubah bahwa untuk f - darn it! Saya tetap menggunakan tanda kutip ganda. Alasan tanda kutip ganda berteriak pada saya adalah karena saya telah menempatkan ini dalam tanda kutip ganda. Jadi aku bisa melarikan diri tanda kutip ganda di sini, tapi tanda kutip tunggal membuatnya lebih mudah. Jadi ('10 '== '1 f1'); tidak mencetak benar. ('10 '== '1 E1'); mencetak benar. [Mahasiswa] Apakah hex? >> Ini bukan hex, tapi dekat itu seperti - 1E1 notasi ilmiah. Ia mengakui 1E1 sebagai 1 * 10 ^ 1 atau apa pun. Mereka adalah bilangan bulat yang sama. Jika kita melakukan === maka itu akan menjadi palsu. Aku benar-benar tidak tahu jika kita lakukan == bagaimana (10 dan ''10abc);? Baiklah. Jadi itu benar. Jadi sama seperti ketika Anda melakukan (10 + ''10abc), dan itu akan menjadi 20, di sini (10 == ''10abc); benar. Lebih buruk lagi hal-hal seperti (false == NULL); benar atau (palsu == 0); benar, (palsu == []); Ada kasus aneh - Itu salah satu kasus yang aneh. Perhatikan bahwa (palsu == []); benar. ('0 '== False); benar. ('0 '== []); Adalah palsu. Jadi == sama sekali tidak transitif. bisa sama dengan b dan bisa sama dengan c, tapi b mungkin tidak sama dengan c. Itulah kekejian bagi saya, dan Anda harus selalu menggunakan ===. [Mahasiswa] Bisakah kita lakukan == juga!? >> [Bowden] Ya. Setara akan! = Dan ==.! Ini sebenarnya dibesarkan di spec pset di mana banyak pengembalian fungsi - Manual PHP yang baik tentang hal ini. Ini menempatkan dalam kotak merah besar, "Ini akan mengembalikan false jika ada kesalahan." Tapi 0 kembali adalah hal yang sangat masuk akal untuk kembali. Pikirkan tentang semua fungsi yang diharapkan untuk mengembalikan integer. Katakanlah fungsi ini seharusnya untuk menghitung jumlah baris dalam sebuah file atau sesuatu. Dalam keadaan normal, Anda melewati fungsi ini file dan itu akan mengembalikan integer yang mewakili jumlah baris. Jadi 0 adalah angka yang masuk akal jika file tersebut hanya kosong. Tapi bagaimana jika Anda lulus file tidak valid dan fungsi terjadi untuk return false jika anda menambahkan file tidak valid? Jika Anda hanya melakukan == Anda tidak membedakan kasus antara file yang tidak valid dan file kosong. Selalu gunakan ===. Itu semua dari mereka. Dalam PHP, tipe array yang berbeda dari apa yang Anda terbiasa di C. Memang, Anda mungkin sudah melihat ini di atas ketika Anda melihat bahwa ini adalah dari tipe array. Sintaks braket baru sebagai PHP 5.4, yang merupakan versi terbaru dari PHP. Sebelum ini Anda selalu harus menulis array ('a' -> 1, 'b' -> 2. Itu adalah konstruktor untuk array. Sekarang PHP akhirnya datang sekitar untuk sintaks yang bagus hanya kurung persegi, yang hanya jauh lebih baik daripada array. Tapi mengingat PHP 5.4 adalah versi terbaru, Anda mungkin mengalami tempat-tempat yang bahkan tidak memiliki PHP 5.3. Selama musim panas kami berlari ke dalam masalah ini di mana PHP 5.3 adalah apa yang kita miliki pada alat, namun server yang kita dikerahkan semua buku kelas dan submit dan semua hal yang adalah PHP 5.4. Tidak mengetahui hal ini, kami kembangkan di 5.3, didorong ke 5,4, dan sekarang semua yang tak satu pun mendadak kode kita bekerja karena ada terjadi telah terjadi perubahan antara 5,3 dan 5,4 yang tidak kompatibel, dan kita harus pergi dan memperbaiki semua hal-hal kita yang tidak bekerja untuk PHP 5.4. Untuk kelas ini, karena alat memiliki PHP 5.4, itu baik-baik saja untuk menggunakan tanda kurung siku. Tetapi jika Anda sedang mencari sesuatu di Internet, jika Anda mencari beberapa jenis barang array, kemungkinan besar Anda akan melihat mantra keluar sintaks array konstruktor karena itu sudah ada sejak lahir PHP dan sintaks braket persegi telah sekitar selama beberapa bulan terakhir atau setiap kali datang sekitar 5,4. Ini adalah bagaimana Anda indeks. Sama seperti di C bagaimana Anda akan index oleh tanda kurung siku seperti $ array [0], $ array [1], $ array [2], Anda indeks dengan cara yang sama jika Anda kebetulan memiliki indeks Anda menjadi string. Array Jadi $ array ['a'] dan $ ['b']. $ Array [b]. Mengapa hal ini salah? Ini mungkin akan menghasilkan peringatan tapi masih bekerja. PHP cenderung untuk melakukan itu. Hal ini cenderung hanya, "Aku akan memperingatkan Anda tentang hal ini, tapi aku hanya akan terus "Dan melakukan apapun yang saya bisa." Ini mungkin akan menerjemahkan ke string, namun ada kemungkinan bahwa di beberapa titik di masa lalu seseorang mengatakan mendefinisikan b untuk menjadi 'HELLO WORLD'. Jadi sekarang b bisa menjadi array konstan dan $ [b] benar-benar akan melakukan 'HELLO WORLD'. Saya pikir pada saat ini, atau setidaknya pengaturan PHP kita, jika Anda mencoba untuk indeks ke array dan kunci yang tidak ada, maka akan gagal. Saya tidak berpikir itu hanya akan memperingatkan Anda. Atau setidaknya Anda dapat mengaturnya sehingga tidak hanya memperingatkan Anda, itu hanya lurus ke atas gagal. Cara Anda memeriksa untuk melihat apakah ada sebenarnya seperti indeks adalah isset. Jadi isset ($ array ['HELLO WORLD']) akan kembali palsu. isset ($ array ['b']) akan kembali benar. Anda dapat mencampur tersebut syntaxes. Aku cukup yakin apa array ini akan berakhir menjadi adalah - Kita bisa menguji itu. Oh, saya perlu PHPWord. Ini adalah mencampur sintaks di mana Anda menentukan apa kuncinya adalah dan Anda tidak menentukan apa kuncinya adalah. Jadi 3 di sini adalah nilai. Anda tidak secara eksplisit mengatakan apa kuncinya akan menjadi. Apa yang Anda pikir kuncinya akan menjadi? [Mahasiswa] 0. >> Aku menebak 0 hanya karena itu yang pertama kita belum ditentukan. Kami benar-benar bisa melakukan beberapa kasus. Jadi print_r adalah mencetak rekursif. Ini akan mencetak seluruh array. Ini akan mencetak subarrays dari array jika ada. Jadi print_r ($ array); php.test.php. Ini memang terlihat seperti itu memberikannya 0. Ada sebenarnya sesuatu yang perlu diingat di sini, tapi kami akan kembali ke sana dalam detik. Tapi apa yang terjadi jika saya membuat indeks 1? PHP tidak membedakan antara indeks string dan indeks integer, sehingga pada titik ini saya baru saja didefinisikan indeks 1 dan saya bisa melakukan keduanya array $ [1] dan $ array ['1 '] dan itu akan menjadi indeks yang sama dan tombol yang sama. Jadi sekarang apa yang Anda pikirkan 3 akan menjadi? >> [Mahasiswa] 2. >> [Bowden] aku menebak 2. Ya. Ini 2. Bagaimana jika kita melakukan hal ini adalah 10, ini adalah 4? Apa yang Anda pikir indeks 3 akan menjadi? Aku berpikir 11. Saya menebak seperti apa PHP tidak - dan saya pikir saya sudah melihat ini sebelumnya - adalah hanya melacak apa indeks numerik tertinggi itu digunakan sejauh ini. Ini tidak akan menetapkan indeks string ke 3. Ini akan selalu menjadi indeks numerik. Jadi melacak yang tertinggi itu diberikan sejauh ini, yang kebetulan 10, dan itu akan memberikan 11 sampai 3. Apa yang saya katakan sebelumnya, perhatikan cara ia mencetak array ini. Mencetak 10, tombol 4, kunci 11, kunci d. Atau bahkan mari kita lakukan - Saya kira saya tidak menaruh 0, tapi itu mencetak 1, 2, 3, 4. Bagaimana jika saya beralih sini? Atau mari kita benar-benar beralih 2 tersebut. Sekarang mencetak 2, 1, 3, 4. Array PHP tidak seperti meja biasa hash Anda. Ini sangat masuk akal untuk menganggap mereka sebagai tabel hash 99% dari waktu. Tapi dalam tabel hash Anda tidak ada rasa urutan hal-hal yang dimasukkan. Jadi segera setelah Anda memasukkannya ke dalam tabel hash Anda, berasumsi tidak ada linked list dan Anda bisa menilai dalam linked list yang dimasukkan terlebih dahulu. Tapi di sini kita disisipkan 2 pertama dan ia tahu ketika itu mencetak array ini bahwa 2 datang pertama. Ia tidak mencetak keluar hanya dalam urutan apapun. Struktur data teknis bahwa itu adalah menggunakan peta memerintahkan, sehingga memetakan kunci dengan nilai-nilai dan mengingat urutan di mana orang-orang kunci yang dimasukkan. Pada dasarnya itu untuk beberapa komplikasi di mana itu untuk benar-benar menjengkelkan - Katakanlah Anda memiliki sebuah array 0, 1, 2, 3, 4, 5 dan Anda ingin mengambil indeks 2. Salah satu cara untuk melakukannya, mari kita lihat apa yang terlihat seperti. 0, 2, 1, 3, 4. Unset terjadi unset kedua variabel dan indeks array. Jadi unset ($ array [2]); Sekarang ini apa yang akan terlihat seperti? 2 hanya pergi, jadi itu baik-baik saja. Lebih menjengkelkan adalah jika Anda ingin hal-hal untuk benar-benar menjadi seperti array. Aku akan menaruh nomor acak. Sekarang perhatikan indeks saya. Saya ingin hanya menjadi seperti array C di mana ia pergi dari 0 sampai panjang - 1 dan saya dapat iterate atas seperti itu. Tapi begitu saya diset indeks kedua, apa yang ada di indeks 3 tidak sekarang menjadi indeks 2. Sebaliknya hanya menghilangkan indeks itu dan sekarang Anda pergi 0, 1, 3, 4. Ini adalah hal yang wajar. Ini hanya mengganggu dan Anda harus melakukan hal-hal seperti sambatan array. Ya. [Mahasiswa] Apa yang akan terjadi jika Anda memiliki untuk loop dan Anda ingin pergi ke semua elemen? Ketika itu menghantam 2, akan menghasilkan hasil yang pernah? Iterasi atas array. Ada 2 cara yang bisa melakukannya. Anda dapat menggunakan reguler untuk loop. Ini adalah satu lagi kerumitan PHP. Kebanyakan bahasa, saya akan mengatakan, memiliki semacam panjang atau len atau sesuatu menunjukkan panjang array. Di PHP itu hitungan. Jadi count ($ array); $ i + +) Mari kita cetak ($ ​​array [$ i]); Perhatikan: Undefined offset: 2. Ini hanya akan gagal. Ini adalah alasan bahwa, untuk sebagian besar, Anda tidak perlu iterate melalui array seperti ini. Mungkin berlebihan, tapi Anda tidak pernah perlu iterate melalui array seperti ini karena PHP menyediakan sintaks foreach yang mana foreach ($ array as $ item). Sekarang jika kita mencetak ($ ​​item), - kami membahasnya dalam kedua - yang bekerja baik-baik saja. Cara foreach bekerja adalah argumen pertama adalah array yang Anda iterasi. Dan argumen kedua, item, melalui masing-masing lulus dari untuk loop itu akan mengambil hal berikutnya dalam array. Jadi ingat array memiliki perintah. Pertama kali melalui untuk loop, item akan menjadi 123 maka akan menjadi 12 maka akan 13 maka akan 23 maka akan 213. Hal mendapatkan benar-benar aneh ketika Anda melakukan sesuatu seperti foreach. Mari kita lihat apa yang terjadi karena Anda tidak harus melakukan ini. Bagaimana jika kita unset ($ array [1]); Itu mungkin diharapkan. Kau iterasi atas array ini, dan setiap kali Anda unsetting indeks pertama. Jadi untuk indeks 0, hal item, pertama mengambil nilai 0, sehingga akan menjadi 123. Tapi dalam untuk loop yang kita unset indeks 1, sehingga berarti 12 hilang. Jadi cetak. PHP_EOL. PHP_EOL hanya newline, tapi secara teknis lebih portabel sejak baris di Windows berbeda dari baris pada Mac dan UNIX. Pada Windows newline adalah \ r \ n, sedangkan di tempat lain itu cenderung hanya menjadi \ n. PHP_EOL dikonfigurasi sehingga menggunakan apa pun baris baru dari sistem anda. Jadi cetak itu. Jangan print_r ($ array) di akhir. Saya tidak tahu bahwa itu akan menjadi perilaku. Barang masih mengambil nilai 12 meskipun kita unset 12 sebelum kita pernah harus itu dari array. Jangan mengambil kata-kata saya ini, tapi tampaknya foreach membuat copy dari array dan kemudian item mengambil semua nilai copy itu. Jadi bahkan jika Anda memodifikasi array di dalam untuk loop, itu tidak akan peduli. Barang akan mengambil nilai-nilai asli. Mari kita coba unsetting itu. Bagaimana jika ini adalah $ array [1] = "halo"; Meskipun kita meletakkan "halo" ke dalam array, item tidak pernah mengambil nilai tersebut. Ada satu lagi sintaks foreach loop untuk di mana Anda meletakkan 2 variabel dipisahkan oleh panah. Variabel pertama akan menjadi kunci dari nilai tersebut, dan variabel kedua akan menjadi item yang sama persis. Hal ini menarik di sini, tapi jika kita kembali ke kasus awal kami 'a' -> 1, 'B' -> 1, di sini jika kita hanya iterate untuk setiap array sebagai item, item akan menjadi 1 setiap saat. Tetapi jika kita juga ingin mengetahui kunci yang terkait dengan item yang maka kita lakukan sebagai $ key -> $ item. Jadi sekarang kita bisa melakukan print ($ key ':'.. Sekarang itu iterasi dan mencetak setiap tombol dan nilainya terkait. Suatu hal tambahan yang bisa kita lakukan di foreach loop adalah Anda mungkin melihat sintaks ini. Ampersands sebelum nama variabel cenderung bagaimana PHP melakukan referensi. Dimana referensi yang sangat mirip dengan pointer, Anda tidak memiliki pointer, sehingga Anda tidak pernah berurusan dengan memori secara langsung. Tapi Anda memiliki referensi di mana 1 variabel mengacu pada hal yang sama seperti variabel lain. Di dalam sini mari kita lakukan $ item. Mari kita kembali ke 1, 10. Mari kita lakukan $ item + +, itu masih ada di PHP. Anda masih bisa melakukan + +. php.test.php. Saya harus mencetaknya. print_r ($ array); Kami mencetak 2, 11. Jika saya baru saja dilakukan foreach ($ array as $ item) maka item akan menjadi nilai 1 pertama kalinya melalui loop. Ini akan kenaikan 1 sampai 2 dan kemudian kita sudah selesai. Jadi itu akan pergi melalui lulus kedua loop dan item yang 10. Ia bertambah item untuk 11, dan kemudian itu hanya dibuang. Kemudian kita print_r ($ array), dan mari kita melihat bahwa ini hanya 1, 10. Jadi kenaikan kami lakukan hilang. Tapi foreach ($ array sebagai & $ item) sekarang item ini adalah item yang sama seperti ini di sini. Ini hal yang sama. Jadi $ item + + adalah memodifikasi berbagai 0. Pada dasarnya, Anda juga dapat melakukan $ k - array> $ item dan Anda dapat melakukan $ [$ k] + +; Jadi cara lain untuk melakukan hal itu, kita bebas untuk memodifikasi item, tapi itu tidak akan mengubah array asli kami. Namun jika kita menggunakan k, yang merupakan kunci kita, maka kita dapat hanya indeks ke array kita menggunakan bahwa kunci dan kenaikan itu. Ini lebih langsung memodifikasi array asli kami. Anda bahkan dapat melakukan itu jika karena alasan tertentu Anda ingin kemampuan untuk memodifikasi - Sebenarnya, ini sangat masuk akal. Anda tidak ingin harus menulis $ array [$ k] + +, Anda hanya ingin menulis $ item + + tetapi Anda masih ingin mengatakan jika ($ k === 'a') maka kenaikan item dan kemudian mencetak array kita. Jadi sekarang apa yang kita harapkan print_r lakukan? Nilai-nilai apa yang harus dicetak? [Mahasiswa] 2 dan 10. >> [Bowden] Hanya jika kunci adalah 'a' kita benar-benar mencetak itu. Anda mungkin sangat jarang, jika pernah, perlu mendefinisikan fungsi dalam PHP, tapi Anda mungkin melihat sesuatu yang serupa di mana Anda mendefinisikan fungsi seperti fungsi apapun. Biasanya Anda akan mengatakan ($ foo, $ bar) dan kemudian menentukan untuk menjadi apa pun. Tapi kalau aku melakukan ini, maka itu berarti bahwa apa pun memanggil apapun, apapun panggilan baz, sehingga argumen pertama dilewatkan ke baz dapat diubah. Mari kita lakukan $ foo + +; dan dalam sini mari kita lakukan baz ($ item); Sekarang kita memanggil fungsi. Argumen ini diambil oleh referensi, yang berarti bahwa jika kita memodifikasi kita memodifikasi hal yang lulus masuk Dan mencetak ini kita harapkan - kecuali aku mengacaukan sintaks - kami mendapat 2, 11, sehingga benar-benar bertambah. Pemberitahuan kita perlu referensi di 2 tempat. Bagaimana jika saya melakukan ini? Apa artinya ini? [Mahasiswa] Ini akan berubah. >> Ya. Item hanya sebuah salinan dari nilai dalam array. Jadi item yang akan berubah menjadi 2, tapi array ['a'] akan tetap 1. Atau bagaimana jika saya melakukan ini? Sekarang item dikirim sebagai copy ke baz. Jadi salinan argumen akan bertambah menjadi 2, tapi item itu sendiri tidak pernah bertambah untuk 2. Dan item adalah hal yang sama seperti braket Array apapun, sehingga array yang tidak pernah bertambah. Jadi baik tempat-tempat membutuhkannya. PHP biasanya cukup cerdas tentang hal ini. Anda mungkin berpikir saya ingin lulus dengan referensi - Ini benar-benar sebuah pertanyaan di salah satu psets. Itu adalah hal yang questions.txt mana dikatakan, Mengapa Anda ingin lulus struct ini dengan referensi? Apa jawabannya? [Mahasiswa] Jadi Anda tidak perlu menyalin sesuatu yang besar. >> Ya. Sebuah struct dapat sewenang-wenang besar, dan ketika Anda melewati struct sebagai argumen perlu menyalin bahwa seluruh struct untuk lulus ke fungsi, sedangkan jika Anda hanya melewati struct dengan referensi maka hanya perlu menyalin alamat 4-byte sebagai argumen ke fungsi. PHP adalah sedikit lebih pintar dari itu. Jika saya memiliki beberapa fungsi dan saya lulus untuk itu sebuah array dari 1.000 hal, artinya itu akan harus menyalin semua 1.000 dari hal-hal untuk lulus ke fungsi? Ia tidak perlu melakukan itu segera. Jika dalam fungsi ini tidak pernah benar-benar memodifikasi foo, jadi jika ($ foo === 'hello') kembali benar.; Perhatikan kita tidak pernah benar-benar diubah di dalam argumen fungsi ini, yang berarti bahwa apa pun disahkan sebagai foo pernah perlu disalin karena tidak modifikasi. Jadi cara kerja PHP adalah argumen selalu dilewatkan dengan referensi sampai Anda benar-benar mencoba untuk memodifikasinya. Sekarang jika saya mengatakan $ foo + +, sekarang akan membuat salinan foo asli dan memodifikasi salinan. Ini menghemat waktu. Jika Anda tidak pernah menyentuh ini array besar, Anda tidak pernah benar-benar memodifikasi, tidak perlu membuat salinan, sedangkan jika kita hanya menempatkan ini ampersand yang berarti bahkan tidak salin bahkan jika Anda memodifikasinya. Perilaku ini disebut copy-on-write. Anda akan melihatnya di tempat lain, terutama jika Anda mengambil kursus sistem operasi. Copy-on-write adalah pola yang cukup umum di mana Anda tidak perlu membuat salinan dari sesuatu kecuali itu benar-benar berubah. Ya. [Mahasiswa] Bagaimana jika Anda memiliki peningkatan dalam tes, sehingga hanya 1 elemen dari 1.000 akan perlu diubah? Saya tidak yakin. Saya pikir itu akan menyalin seluruh hal, tapi mungkin itu cukup pintar itu - Sebenarnya, apa yang saya pikirkan adalah bayangkan kita memiliki sebuah array yang terlihat seperti ini: $ array2 = [ Lalu 'a' indeks array [1 2 3 4], dan indeks 'b' adalah sebuah array apapun. Saya perlu koma antara semua dari mereka. Bayangkan ada koma. Kemudian 'c' adalah nilai 3. Oke. Sekarang katakanlah kita lakukan $ baz ($ array2); mana baz tidak mengambil ini dengan referensi. Jadi $ foo ['c'] + +; Ini adalah contoh di mana kita melewati array2 sebagai argumen dan kemudian ia memodifikasi indeks spesifik dari array dengan incrementing itu. Saya jujur ​​tidak tahu apa PHP yang akan dilakukan. Hal ini dapat dengan mudah membuat salinan dari seluruh hal, tetapi jika itu pintar, itu akan membuat salinan dari tombol-tombol mana hal ini akan memiliki nilai yang berbeda yang tapi ini masih bisa menunjuk ke array yang sama 1,2,3,4 dan ini masih bisa menunjuk ke array yang sama. Aku akan iPad itu. Kami lulus dalam array ini di mana orang ini poin ke 3, ini menunjukkan pria untuk [1,2,3,4], orang ini menunjukkan [34, ...] Sekarang kita lewat ke baz, kita memodifikasi ini. Jika PHP cerdas, itu hanya bisa melakukan - Kami masih harus menyalin beberapa memori, tetapi jika ada ini subarrays bersarang besar kita tidak perlu untuk menyalin. Saya tidak tahu apakah itu apa yang dilakukannya, tapi aku bisa membayangkan itu melakukan hal itu. Ini juga merupakan keuntungan cukup besar dari C atas PHP. PHP membuat hidup jadi lebih mudah untuk banyak hal, tetapi Anda jenis sama sekali tidak tahu seberapa baik itu akan tampil karena saya tidak tahu di bawah kap ketika itu membuat salinan ini dari hal-hal, oh, adalah bahwa akan salinan waktu yang konstan, apakah hanya akan mengubah 1 pointer, apakah akan menjadi salinan linier ridiculously sulit? Bagaimana jika tidak bisa menemukan ruang? Apakah itu kemudian perlu untuk menjalankan pengumpulan sampah untuk mendapatkan ruang lagi? Dan pengumpulan sampah dapat mengambil sewenang-wenang panjang. Dalam C Anda tidak perlu khawatir tentang hal-hal ini. Setiap baris Anda menulis Anda dapat alasan yang cukup banyak tentang bagaimana hal itu akan tampil. Mari kita melihat kembali ini. Bagaimana baik adalah bahwa Anda tidak harus berurusan dengan fungsi hash, terkait daftar, atau sesuatu seperti itu? Sejak bekerja dengan tabel hash sangat mudah sekarang, inilah teka-teki menyenangkan untuk bekerja pada. Membuka sebuah file yang bernama unique.php dan di dalamnya menulis sebuah program PHP (Juga dikenal sebagai "script"). Kita cenderung untuk memanggil mereka skrip jika mereka hal-hal singkat yang Anda jalankan pada baris perintah. Pada dasarnya, setiap bahasa yang Anda tidak mengkompilasi tetapi Anda akan menjalankan executable pada baris perintah, Anda dapat memanggil bahwa script dieksekusi. Aku bisa juga menulis sebuah program C yang melakukan hal ini, tapi saya tidak menyebutnya sebuah naskah sejak pertama kali saya mengkompilasi dan kemudian menjalankan biner. Tapi ini program PHP kita akan memanggil script. Atau jika kita menulis dalam Python atau Perl atau node.js atau salah satu dari hal-hal, kami akan memanggil mereka semua skrip karena Anda menjalankan mereka di baris perintah tapi kami tidak kompilasi mereka. Kita bisa melakukan hal ini cukup cepat. Kami tidak akan menggunakan argv. Mari kita meniup melalui ini. Sebut saja unik, menulis sebuah program. Anda dapat mengasumsikan bahwa input akan berisi satu kata per baris. Sebenarnya, argv akan cukup sepele untuk digunakan. unique.php. Hal pertama yang pertama, kita ingin memeriksa apakah kita telah melewati 1 baris perintah argumen. Sama seperti yang Anda harapkan argc dan argv di C, kita masih memiliki orang-orang di PHP. Jadi, jika ($ 2 == argc!) Maka saya tidak akan berurusan dengan mencetak pesan atau apapun. Saya hanya akan keluar, kode kesalahan dari 1. Saya juga bisa kembali 1. Jarang di PHP Anda di negara ini di mana kita berada di - Biasanya Anda berada dalam fungsi yang disebut oleh fungsi dipanggil oleh fungsi yang disebut oleh fungsi. Dan jika ada sesuatu yang tidak beres dan Anda hanya ingin keluar dari segala sesuatu seluruhnya, keluar hanya berakhir program. Hal ini juga ada di C. Jika Anda berada di sebuah fungsi dalam fungsi dalam fungsi dalam fungsi dan Anda ingin hanya membunuh program, Anda dapat memanggil keluar dan hanya akan keluar. Tapi di PHP itu bahkan lebih jarang bahwa kita berada di tingkat atas. Biasanya kita di dalam semacam fungsi, sehingga kita sebut keluar sehingga kita tidak harus kembali sampai 1 hal yang kemudian menyadari ada kesalahan sehingga kembali naik jika yang mengakui ada kesalahan. Kami tidak ingin berurusan dengan itu, jadi keluar (1); kembali (1), dalam hal ini akan setara. Lalu apa yang kita ingin membuka kita ingin fopen. Argumen akan terlihat sangat mirip. Kami ingin fopen ($ argv [1], dan kami ingin membukanya untuk membaca. Yang mengembalikan sumber daya yang kita akan menelepon f. Hal ini terlihat cukup mirip dengan bagaimana C melakukannya kecuali kita tidak harus mengatakan * FILE. Sebaliknya kita hanya mengatakan $ f. Oke. Sebenarnya, saya pikir ini bahkan memberi kita petunjuk untuk fungsi PHP disebut file. PHP File. Apa ini akan lakukan adalah membaca seluruh file ke dalam array. Anda bahkan tidak perlu fopen itu. Ini akan melakukannya untuk Anda. Jadi $ baris = file ($ argv [1]); Sekarang semua baris file berada di garis. Sekarang kita ingin mengurutkan baris. Bagaimana kita bisa mengurutkan baris? Kami mengurutkan baris. Dan sekarang kita bisa mencetaknya atau apa pun. Mungkin cara termudah adalah foreach ($ baris sebagai $ line) echo $ line; [Mahasiswa] Bukankah kita bahkan menyeberangi garis dengan referensi sesuatu ke semacam? Di sinilah semacam akan ditetapkan sebagai semacam fungsi (& $ array). Ketika Anda memanggil fungsi Anda tidak lulus dengan referensi. Ini fungsi yang mendefinisikan itu sebagai mengambil sebagai referensi. Ini sebenarnya persis apa yang salah ketika kita meletakkan segala sesuatu ke server kami ketika kami pergi 5,3-5,4. Sampai 5,4, ini masuk akal. Sebuah fungsi tidak mengharapkan untuk menerimanya sebagai referensi, tetapi Anda dapat lulus sebagai referensi jadi jika fungsi tidak terjadi mengubahnya, itu masih dimodifikasi. Pada 5,4, Anda tidak seharusnya melakukan hal ini. Jadi sekarang satu-satunya cara Anda melewati referensi adalah jika fungsi eksplisit melakukannya. Jika Anda tidak ingin mengubah itu, maka Anda perlu melakukan copy $ = $ garis dan copy lulus. Jadi sekarang baris akan dipertahankan dan copy akan berubah. php.unique.php. Saya mungkin telah mengacaukan sesuatu. Unexpected 'semacam'. Ada akan menjadi sesuatu yang melakukan hal ini untuk kita. Ini bahkan tidak ada. Perhatikan ketika Anda membaca manual yang argumen pertama diharapkan menjadi array dan itu diambil oleh referensi. Mengapa hal ini mengeluh kepada saya? Karena saya memiliki semacam fungsi masih di sini bahwa saya tidak ingin. Oke, php.unique.php. Aku tidak lulus argumen karena saya tidak punya file. Ini php.unique.php pada test.php. Berikut ini adalah test.php semua dicetak dalam urutan diurutkan bagus. Perhatikan bahwa perintah diurutkan agak aneh untuk sebuah file kode karena semua baris kosong kami akan datang pertama Kemudian akan datang semua dari 1 kami lekukan tingkat kemudian datang semua lekukan no kami. Ya. >> [Mahasiswa] Jadi untuk kode sumber itu tidak dikirimkan dengan referensi? Apakah itu umumnya lewat nilai? [Bowden] Ketika Anda memanggil fungsi, ia tidak pernah menentukan apakah itu dikirimkan dengan referensi. Ini adalah definisi fungsi yang menentukan apakah itu dikirimkan dengan referensi. Dan melihat definisi fungsi semacam atau hanya melihat ini, dibutuhkan argumen dengan referensi. Jadi terlepas dari apakah Anda ingin mengambilnya dengan referensi, itu tidak mengambilnya dengan referensi. Ini memodifikasi array di tempat. Ini hanya tidak diperbolehkan. Anda tidak diizinkan untuk melakukan hal ini. >> [Mahasiswa] Oh, oke. [Bowden] ini, semacam akan mengambil garis dengan referensi dan memodifikasinya. Dan lagi, jika Anda tidak ingin melakukan itu, Anda bisa membuat salinan semacam. Bahkan dalam kasus ini, copy sebenarnya bukan salinan baris. Itu hanya menunjuk pada hal yang sama sampai pertama akan dimodifikasi, di mana itu pertama akan mendapatkan dimodifikasi dalam fungsi semacam, di mana, karena itu copy-on-menulis, sekarang salinan copy yang akan dibuat. Anda juga dapat melakukan hal ini. Itulah tempat lain Anda dapat melihat ampersand. Anda melihatnya dalam loop foreach, Anda melihatnya dalam deklarasi fungsi, dan Anda melihat itu ketika baru saja menetapkan variabel. Sekarang kita telah mencapai apa-apa dengan melakukan hal ini karena copy dan garis secara harfiah hal yang sama. Anda dapat menggunakan garis dan menyalin bergantian. Anda dapat melakukan unset ($ copy), dan yang tidak garis diset, Anda hanya kehilangan referensi Anda untuk hal yang sama. Jadi pada titik ini, sekarang baris adalah satu-satunya cara Anda dapat mengakses baris. Pertanyaan? Ya. [Mahasiswa] Completely off topic, tapi Anda tidak harus menutup PHP dengan - >> Anda tidak. Oke. [Bowden] Aku akan pergi sejauh mengatakan itu praktik buruk untuk menutupnya. Itu mungkin berlebihan, terutama dalam naskah, tapi mari kita lihat apa yang terjadi jika saya melakukan ini. Itu tidak melakukan apa pun. Bagaimana jika saya ingin - [sighs] Saya harus lulus argumen. Tembak. Aku menelepon salah. Jadi php.unique.php dengan argumen. Sekarang aku bahkan tidak perlu ini. Saya akan menambahkan sebuah argumen yang valid. Ini dicetak apapun itu pencetakan. Saya mencetak copy dan copy tidak ada. Jadi garis. Ini dicetak segalanya, dan kemudian melihat semua sampah ini di sini, karena dalam hal PHP yang berada di luar tag PHP hanya akan dicetak harfiah. Itulah sebabnya HTML, hal ini sangat baik yang bisa saya lakukan div bla, bla, bla kelas atau apa pun, bla, bla, bla, dan kemudian melakukan beberapa kode PHP dan kemudian melakukan div akhir. Dan sekarang ini saya mendapatkan mencetak div bagus saya sampai atas, segala sesuatu yang PHP dicetak, div di bawah. Bencana ketika sesuatu seperti ini terjadi, yang cukup umum, hanya newline tersesat di bagian bawah file. Anda tidak akan berpikir itu akan menjadi yang besar kesepakatan sampai Anda mempertimbangkan kenyataan bahwa dengan browser - Bagaimana pengalihan kerja atau pada dasarnya setiap pekerjaan header, ketika Anda membuat koneksi ke sebuah situs web dan mengirimkan kembali semua header dan hal seperti respon 200 atau respon redirect atau apa pun, header hanya berlaku sampai byte pertama data dikirim. Anda dapat mengarahkan ribuan kali, namun segera setelah byte pertama data dikirim Anda tidak seharusnya redirect lagi. Jika Anda memiliki baris baru nyasar di bagian bawah file dan mari kita mengatakan bahwa Anda menggunakan fungsi ini dan kemudian Anda ingin - Mari kita mengatakan itu file lain yang index.php dan Anda require_once sesuatu - Saya tidak bisa memikirkan contoh yang baik dari itu. Masalah ini terjadi ketika baris ini di bagian bawah akan bergema. Anda tidak ingin apa-apa telah bergema belum. Meskipun Anda tidak berniat untuk mendapatkan sesuatu yang menggema, sesuatu yang tidak bisa bergema dan jadi sekarang Anda tidak seharusnya untuk mengirim header lagi dan Anda akan mendapatkan keluhan. Anda hanya tidak membutuhkan orang tag penutup. Jika Anda berencana untuk melakukan sesuatu dengan HTML - dan itu sangat masuk akal untuk melakukan apapun di sini div dan kemudian pada titik ini Anda bisa atau Anda tidak bisa memasukkan mereka. Itu tidak terlalu penting. Namun dalam skrip PHP itu jarang untuk menutupnya. Ketika semuanya PHP, benar-benar semuanya, Anda tidak benar-benar perlu untuk menutupnya / Anda tidak harus menutupnya. Berurusan dengan string jauh lebih bagus daripada di C. Dalam PHP Anda dapat menentukan string dengan tanda kutip tunggal atau ganda. Dengan tanda kutip tunggal Anda tidak dapat menggunakan "melarikan diri" urutan. Terus-menerus melarikan diri, bla, bla, bla. Jadi printf sangat langka di PHP. Saya kira saya akan menggunakan printf jika saya ingin melakukan hal semacam - di pset 5 Anda menggunakan sprintf atau apa pun. Tapi Anda ingin melakukan 001.jpg 002.jpg dan. Jadi untuk hal semacam itu di mana aku benar-benar ingin memformat teks yang saya akan menggunakan printf. Tapi kalau tidak aku hanya akan menggunakan string concatenation. Saya tidak pernah benar-benar menggunakan printf. Kami hanya membedakan antara rincian tanda kutip tunggal dan tanda kutip ganda. Perbedaan terbesar adalah bahwa tanda kutip tunggal, maka akan dicetak harfiah. Tidak ada tipe data char di PHP, tidak seperti C, jadi ini setara dengan ini. Mereka berdua string. Dan hal yang menyenangkan tentang string kutip tunggal adalah saya bisa mengatakan 'hello world! " bla, bla, bla, $ $ Wooo. Apa yang terjadi ketika saya mencetak ini akan mencetak secara harfiah. Mari kita menyingkirkan semua barang-barang kami. Jadi echo $ str1; Ini benar-benar dicetak semua hal-hal: tanda-tanda dolar, backslash n, yang Anda akan berpikir akan menjadi baris - semua hal-hal mencetak harfiah. Satu-satunya hal yang Anda butuhkan untuk melarikan diri adalah tanda kutip tunggal karena kalau tidak akan berpikir itu menutup tanda kutip tunggal. Ganda kutipan, sama sekali berbeda. Kita sudah melihat sintaks yang cluing kita pada apa yang akan sangat salah. php.unique. Undefined variable: wooo karena ini dianggap sebagai variabel yang disebut wooo. Tanda kutip ganda membiarkan Anda memasukkan variabel ke - Katakanlah $ name = "Rob"; Jadi echo "Hai, nama saya $ name!!"; Ia mengakui ini sebagai variabel. Ketika saya menjalankan itu - dan saya akan memasukkan baris baru - Hai, nama saya Rob! dan hello world!! Ini karena saya tidak pernah dihapus pencetakan wooo atas. Ada 1 langkah lebih lanjut yang dapat Anda lakukan. $ Array = [1, 2, 3]; Bagaimana jika saya ingin mencetak indeks pertama dari array? Anda melakukan $ array [0]. The sintaks adalah petunjuk. Apa ini akan lakukan? php.unique. Hai, nama saya adalah 1! yang tidak apa yang saya inginkan. Sintaks berbohong kepada saya. Mari kita coba 'a' -> 1, 'b' -> 2. Itulah bagaimana saya harus menuliskannya. Tak terduga tunggal kutipan (T_ENCAPSED bla, bla, bla, bla, bla). Idenya adalah bahwa itu tidak mengakui ini sebagai bagian dari array. Ini tidak mengakui ini sebagai array diindeks oleh surat. Anda ingin melakukan itu dikelilingi oleh kurung kurawal, dan sekarang apa yang ada di tanda kurung kurawal ini akan diinterpolasi, yang merupakan kata yang kita gunakan untuk memasukkan variabel-variabel ajaib ke tempat yang tepat. Sekarang melakukan hal ini, php.unique, dan Hi, nama saya adalah 1! seperti yang diharapkan atau Hi, nama saya Rob! Satu hal yang agak baik tentang tanda kutip tunggal adalah bahwa - Ada beberapa biaya untuk interpolasi. Jika Anda menggunakan tanda kutip ganda, penafsir harus pergi ke string ini, memastikan bahwa, "Oh, inilah variabel Sekarang aku harus pergi mendapatkan variabel itu dan memasukkannya di sini.." Bahkan jika Anda tidak menggunakan variabel, tidak ada dalam kutipan ganda perlu diinterpolasi, tetapi masih akan lebih lambat karena harus pergi ke tanda kutip ganda mencari hal-hal yang perlu diinterpolasi. Jadi tanda kutip tunggal dapat menjadi sedikit lebih cepat jika tidak ada yang perlu diinterpolasi, dan saya cenderung bahkan menggunakan tanda kutip tunggal untuk, 'Hai, nama saya'. $ Array ['a'] pula. Itu akan menjadi setara dengan apa yang kita miliki sebelumnya. Tapi itu masalah preferensi. Jika Anda menggunakan PHP, Anda mungkin tidak peduli tentang perbedaan kecepatan. Ada tidak cukup untuk alasan mereka untuk memulai dengan. Setiap pertanyaan terakhir? Kami benar-benar bahkan tidak mendapatkan melalui semua itu, tapi hal ini membosankan. Hal terakhir yang jenis yang baik di PHP adalah ketika Anda sedang berhadapan dengan HTML, Anda akan menggunakannya sedikit, sehingga sintaks pintas bagus untuk mencetak variabel. Tanpa menempatkan PHP di sini, ini disebut tag singkat. Secara resmi sebagai PHP 5.4, hal ini sudah ditinggalkan. Anda disarankan untuk menempatkan php. Hal ini masih didukung, tag begitu singkat dengan <= yang masih baik-baik saja?. Hal ini secara default didukung, sehingga Anda dapat menggunakan ini seperti yang Anda inginkan, dan mereka cukup nyaman. Ada pertanyaan? Baiklah. Tetap berkelas, San Diego. [Terkekeh] Bye. [Tertawa] [Tepuk tangan] [tertawa] [CS50.TV]