1 00:00:00,000 --> 00:00:02,610 [Powered by Google Translate] [Bagian 8 - Lebih Nyaman] 2 00:00:02,610 --> 00:00:04,910 [Rob Bowden - Harvard University] 3 00:00:04,910 --> 00:00:07,070 [Ini adalah CS50. - CS50.TV] 4 00:00:11,520 --> 00:00:14,160 >> Catatan minggu Bagian ini akan menjadi cukup pendek, 5 00:00:14,160 --> 00:00:19,070 jadi aku hanya akan terus berbicara, kalian akan terus mengajukan pertanyaan, 6 00:00:19,070 --> 00:00:22,720 dan kami akan mencoba untuk mengisi waktu sebanyak mungkin. 7 00:00:22,720 --> 00:00:31,950 Banyak orang berpikir bahwa pset ini tidak selalu sulit, tapi itu sangat panjang. 8 00:00:31,950 --> 00:00:37,070 Spec pset itu sendiri membutuhkan waktu satu jam untuk membaca. 9 00:00:40,530 --> 00:00:45,730 Kami memberi Anda banyak SQL Anda mungkin perlu menggunakan. 10 00:00:45,730 --> 00:00:50,520 Kami memandu Anda melalui banyak hal, sehingga tidak boleh terlalu buruk. 11 00:00:50,520 --> 00:00:54,560 Telah ada yang mulai atau selesai? 12 00:00:55,380 --> 00:00:59,710 Ini adalah pset terakhir. Oh, Tuhan. 13 00:00:59,710 --> 00:01:05,400 Biasanya ada satu JavaScript setelah ini, namun kalender hal berubah 14 00:01:05,400 --> 00:01:09,560 membuat segalanya 1 minggu lebih pendek, dan kita tidak lagi memiliki pset JavaScript. 15 00:01:09,560 --> 00:01:12,310 Aku tidak tahu bagaimana yang mempengaruhi apakah JavaScript akan muncul pada ujian 16 00:01:12,310 --> 00:01:15,510 atau Kuis 1. 17 00:01:15,510 --> 00:01:22,260 Aku membayangkan itu akan menjadi sesuatu seperti Anda perlu tahu tingkat tinggi hal tentang JavaScript, 18 00:01:22,260 --> 00:01:26,460 tapi aku ragu kami hanya akan memberikan Anda langsung kode JavaScript 19 00:01:26,460 --> 00:01:28,720 karena Anda tidak memiliki pset di dalamnya. 20 00:01:28,720 --> 00:01:33,000 Tapi itu akan menjadi hal untuk ditinjau kuis minggu depan. 21 00:01:33,000 --> 00:01:36,320 >> Bagian pertanyaan. 22 00:01:36,320 --> 00:01:43,870 Banyak hal ini agak buruk worded, tetapi kita akan membahas mengapa. 23 00:01:43,870 --> 00:01:50,220 Tidak seperti C, PHP adalah "dinamis-mengetik" bahasa. Apa artinya ini, Anda bertanya? 24 00:01:50,220 --> 00:01:53,830 Nah, mengatakan selamat tinggal kepada semua orang float, char, int, dan kata kunci lain yang Anda perlu menggunakan 25 00:01:53,830 --> 00:01:56,190 ketika mendeklarasikan variabel dan fungsi dalam C. 26 00:01:56,190 --> 00:02:00,420 Dalam PHP, tipe variabel ditentukan oleh nilai yang saat itu memegang. 27 00:02:00,420 --> 00:02:04,990 Jadi sebelum kita mengetik kode ini ke dalam sebuah file bernama dynamic.php, 28 00:02:04,990 --> 00:02:12,670 PHP secara dinamis diketik. Itu benar. 29 00:02:12,670 --> 00:02:17,590 Saya tidak setuju dengan fakta bahwa itu berarti kita mengucapkan selamat tinggal char, float, int, 30 00:02:17,590 --> 00:02:20,620 dan kata kunci lainnya. 31 00:02:20,620 --> 00:02:25,510 Perbedaan yang tepat antara dinamis diketik dan alternatif, 32 00:02:25,510 --> 00:02:32,010 yang statis diketik, adalah yang secara dinamis diketik, semua memeriksa jenis dan hal-hal 33 00:02:32,010 --> 00:02:37,350 terjadi pada waktu berjalan, sedangkan statis diketik itu terjadi pada waktu kompilasi. 34 00:02:37,350 --> 00:02:43,030 Kata statis secara umum tampaknya berarti hal waktu kompilasi. 35 00:02:43,030 --> 00:02:48,170 Saya kira ada kegunaan lain untuk itu, tapi di C ketika Anda mendeklarasikan variabel statis, 36 00:02:48,170 --> 00:02:52,650 penyimpanan dialokasikan pada waktu kompilasi. 37 00:02:52,650 --> 00:02:59,260 Di sini, dinamis diketik hanya berarti bahwa - 38 00:02:59,260 --> 00:03:04,350 Dalam C jika Anda mencoba untuk menambahkan string dan integer, ketika Anda kompilasi, 39 00:03:04,350 --> 00:03:11,000 itu akan mengeluh karena itu akan mengatakan bahwa Anda tidak dapat menambahkan sebuah int dan pointer. 40 00:03:11,000 --> 00:03:14,710 Itu tidak hanya operasi yang valid. 41 00:03:14,710 --> 00:03:21,170 Itu adalah hal lain yang kita akan mendapatkan dalam detik. 42 00:03:21,170 --> 00:03:24,860 Tapi itu semacam pemeriksaan, fakta bahwa itu mengeluh pada waktu kompilasi, 43 00:03:24,860 --> 00:03:29,220 adalah memeriksa jenis statis. 44 00:03:29,220 --> 00:03:35,220 Ada bahasa di mana Anda tidak perlu mengatakan char, float, int, dan semua hal-hal, 45 00:03:35,220 --> 00:03:40,940 tetapi bahasa dapat memberitahu dari konteks hal apa jenis itu seharusnya, 46 00:03:40,940 --> 00:03:43,980 tapi masih statis diketik. 47 00:03:43,980 --> 00:03:49,000 Jadi jika Anda mengambil 51, OCaml, Anda tidak perlu menggunakan salah satu jenis, 48 00:03:49,000 --> 00:03:58,700 tetapi masih akan pada waktu kompilasi mengatakan Anda tidak dapat melakukan ini karena Anda mencampur int dan string. 49 00:03:58,700 --> 00:04:05,650 Dinamis diketik hanya berarti bahwa kadang-kadang selama waktu berjalan Anda akan mendapatkan keluhan. 50 00:04:05,650 --> 00:04:13,430 Jika Anda juga menggunakan Java sebelumnya, secara umum, hampir semua bahasa C-jenis 51 00:04:13,430 --> 00:04:20,070 ini akan statis diketik, sehingga C, C + +, Java, semua orang umumnya statis diketik. 52 00:04:20,070 --> 00:04:22,910 Di Jawa ketika Anda mengkompilasi sesuatu dan Anda katakan 53 00:04:22,910 --> 00:04:26,670 string s sama dengan sesuatu yang baru yang tidak string, 54 00:04:26,670 --> 00:04:28,950 yang akan mengeluh karena mereka jenis hanya tidak cocok. 55 00:04:28,950 --> 00:04:31,180 Itu akan mengeluh pada waktu kompilasi. 56 00:04:31,180 --> 00:04:36,750 Tetapi juga memiliki beberapa waktu dinamis hal seperti jika Anda mencoba untuk melemparkan sesuatu 57 00:04:36,750 --> 00:04:40,500 untuk jenis yang lebih spesifik daripada jenis saat ini, 58 00:04:40,500 --> 00:04:45,610 tidak ada yang dapat Anda lakukan di waktu kompilasi untuk memeriksa apakah pemain yang akan berhasil. 59 00:04:45,610 --> 00:04:51,130 Java juga memiliki beberapa tipe dinamis memeriksa bahwa segera setelah sampai ke baris kode 60 00:04:51,130 --> 00:04:54,130 ketika itu benar-benar melaksanakan, itu akan melakukan cast, 61 00:04:54,130 --> 00:04:56,260 memeriksa apakah pemain yang berlaku di tempat pertama, 62 00:04:56,260 --> 00:04:59,890 dan jika tidak, maka akan mengeluh bahwa Anda memiliki jenis yang tidak valid. 63 00:04:59,890 --> 00:05:03,200 Tipe dinamis memeriksa. 64 00:05:03,200 --> 00:05:07,010 Ketik ini menjadi sebuah file bernama dynamic.php. 65 00:05:10,130 --> 00:05:12,380 Dynamic.php. 66 00:05:14,580 --> 00:05:17,190 Saya akan unzip format itu. 67 00:05:18,750 --> 00:05:21,880 Kami memiliki sebuah variabel, kita set ke 7 bilangan bulat, 68 00:05:21,880 --> 00:05:27,930 maka kita akan mencetak dan s% - 69 00:05:27,930 --> 00:05:32,830 Oh, kami mencetak jenis itu, sehingga GetType akan mengembalikan jenis variabel. 70 00:05:32,830 --> 00:05:35,720 Kami hanya mencetak jenis berulang-ulang. 71 00:05:35,720 --> 00:05:39,440 Kami hanya php.dynamic.php. 72 00:05:39,440 --> 00:05:45,920 Kita akan melihat bahwa hal itu berubah dari integer ke string ke Boolean seperti yang kita pergi melalui. 73 00:05:45,920 --> 00:05:54,590 Dalam C tidak ada tipe data Boolean, tidak ada tipe data string. 74 00:05:54,590 --> 00:06:00,500 Ada * char dan Boolean hanya cenderung int atau char atau sesuatu. 75 00:06:00,500 --> 00:06:05,690 Dalam PHP jenis memang ada, dan itulah salah satu keuntungan besar atas PHP C - 76 00:06:05,690 --> 00:06:13,290 bahwa operasi string yang jauh lebih mudah daripada di PHP C. Mereka hanya bekerja. 77 00:06:13,290 --> 00:06:18,290 >> Jadi kami datang kembali ke sini. 78 00:06:18,290 --> 00:06:21,260 Kami berlari dynamic.php. 79 00:06:21,260 --> 00:06:26,710 Ini memberitahu interpreter PHP, yang disebut php, untuk menjalankan kode PHP di dynamic.php. 80 00:06:26,710 --> 00:06:30,250 Jika Anda memiliki kesalahan dalam file, penafsir akan memberitahu Anda! 81 00:06:30,250 --> 00:06:39,110 Si penerjemah, ini merupakan salah satu perbedaan besar antara PHP dan C. 82 00:06:39,110 --> 00:06:48,200 Dalam C Anda harus mengkompilasi sesuatu dan kemudian Anda menjalankan file dikompilasi. 83 00:06:48,200 --> 00:06:50,490 Dalam PHP Anda tidak pernah mengkompilasi sesuatu. 84 00:06:50,490 --> 00:06:57,200 Jadi interpreter PHP pada dasarnya hanya membaca baris demi baris ini. 85 00:06:57,200 --> 00:07:02,900 Hits var = 7 maka hits printf maka hits var maka hits printf dan sebagainya. 86 00:07:02,900 --> 00:07:10,910 Ada sedikit kompilasi yang dilakukannya, dan cache hasil 87 00:07:10,910 --> 00:07:15,510 jadi jika Anda menjalankan script kemudian Anda dapat melakukan beberapa, 88 00:07:15,510 --> 00:07:19,280 tetapi pada dasarnya itu adalah baris demi baris semacam itu. 89 00:07:19,280 --> 00:07:25,280 Itu berarti bahwa banyak dari optimasi yang kita dapatkan di C, 90 00:07:25,280 --> 00:07:31,920 seperti kompilasi, itu hanya umumnya compiler dapat melakukan banyak trik untuk Anda. 91 00:07:31,920 --> 00:07:36,110 Hal ini dapat mengambil variabel yang tidak digunakan, dapat melakukan semua hal-hal ini, 92 00:07:36,110 --> 00:07:38,660 ia bisa melakukan rekursi ekor. 93 00:07:38,660 --> 00:07:42,550 Dalam PHP Anda tidak akan mendapatkan keuntungan yang 94 00:07:42,550 --> 00:07:45,690 karena itu hanya akan mulai menjalankan baris demi baris demi baris, 95 00:07:45,690 --> 00:07:49,950 dan itu tidak benar-benar mengenali hal-hal dengan mudah 96 00:07:49,950 --> 00:07:54,440 karena tidak lulus 1 kompilasi besar atas hal tersebut dan kemudian eksekusi; 97 00:07:54,440 --> 00:07:56,860 itu hanya baris demi baris. 98 00:08:00,730 --> 00:08:02,750 Jadi itulah penafsir. 99 00:08:02,750 --> 00:08:06,840 >> Kembali ke mengetik dinamis kami: pretty cool, eh? 100 00:08:06,840 --> 00:08:08,640 Anda pasti tidak bisa melakukan itu di C! 101 00:08:08,640 --> 00:08:11,860 Sekarang, lihat apakah Anda dapat mengetahui jenis dari masing-masing nilai berikut. 102 00:08:11,860 --> 00:08:14,760 Lihat ini untuk referensi. 103 00:08:14,760 --> 00:08:19,420 Jadi 3,50. Apa jenis apakah Anda berpikir bahwa akan menjadi? 104 00:08:24,480 --> 00:08:26,370 Berikut adalah jenis yang kita miliki. 105 00:08:26,370 --> 00:08:30,430 Kami memiliki bools, bilangan bulat, titik mengambang, string, array, objek, 106 00:08:30,430 --> 00:08:38,370 dan kemudian sumber daya, yang merupakan jenis samar. 107 00:08:38,370 --> 00:08:41,010 Saya pikir sebenarnya ada contoh di sini. 108 00:08:41,010 --> 00:08:43,740 Lalu ada NULL. NULL adalah jenis khusus. 109 00:08:43,740 --> 00:08:47,140 Tidak seperti C di mana NULL hanya pointer dengan alamat 0, 110 00:08:47,140 --> 00:08:54,930 di PHP, NULL adalah tipe sendiri di mana satu-satunya hal yang sah dari jenis yang NULL. 111 00:08:57,560 --> 00:09:00,670 Ini jauh lebih berguna untuk pengecekan error. 112 00:09:00,670 --> 00:09:04,310 Dalam C di mana kita punya masalah di mana jika Anda kembali NULL, 113 00:09:04,310 --> 00:09:08,660 artinya Anda kembali pointer NULL atau menggunakan NULL untuk menandakan kesalahan 114 00:09:08,660 --> 00:09:12,380 atau semua kebingungan yang kami punya pada satu titik. 115 00:09:12,380 --> 00:09:18,440 Di sini, kembali NULL umumnya berarti kesalahan. 116 00:09:20,860 --> 00:09:27,300 Banyak hal juga return false untuk kesalahan. 117 00:09:27,300 --> 00:09:33,140 Tapi intinya adalah jenis NULL, satu-satunya jenis NULL NULL. 118 00:09:33,140 --> 00:09:40,090 Kemudian callback seperti Anda dapat mendefinisikan beberapa fungsi anonim. 119 00:09:40,090 --> 00:09:46,420 Anda tidak harus memberikan fungsi nama, tetapi Anda tidak akan harus berurusan dengan itu di sini. 120 00:09:46,420 --> 00:09:53,940 Melihat jenis bahwa mereka mengharapkan kita untuk mengetahui, 121 00:09:53,940 --> 00:09:59,000 apa yang Anda pikir jenis 3,50 adalah? >> [Mahasiswa] Float. 122 00:09:59,000 --> 00:10:00,370 Ya. 123 00:10:00,370 --> 00:10:06,290 Jadi di sini, apa yang Anda pikir jenis ini? >> [Mahasiswa] Array. 124 00:10:06,290 --> 00:10:09,890 Ya. Yang pertama adalah float, yang kedua adalah array. 125 00:10:09,890 --> 00:10:14,500 Perhatikan bahwa array ini tidak seperti array C 126 00:10:14,500 --> 00:10:19,610 di mana Anda memiliki indeks 0 memiliki beberapa nilai, indeks 1 memiliki beberapa nilai. 127 00:10:19,610 --> 00:10:26,320 Berikut indeks adalah, b, dan c, dan nilai-nilai adalah 1, 2, dan 3. 128 00:10:26,320 --> 00:10:33,980 Dalam PHP tidak ada perbedaan antara sebuah array asosiatif dan hanya array biasa 129 00:10:33,980 --> 00:10:36,740 seperti yang Anda akan berpikir itu di C. 130 00:10:36,740 --> 00:10:43,040 Ada hanya ini, dan di bawah kap sebuah array biasa hanya sebuah array asosiatif 131 00:10:43,040 --> 00:10:50,000 di mana 0 peta untuk beberapa nilai dengan cara yang sama peta untuk beberapa nilai. 132 00:10:50,000 --> 00:11:00,410 Untuk alasan ini, PHP dapat menjadi sangat buruk untuk benar-benar cepat kode / pembandingan hal 133 00:11:00,410 --> 00:11:07,930 karena dalam C ketika Anda menggunakan sebuah array Anda tahu bahwa mengakses anggota adalah waktu yang konstan. 134 00:11:07,930 --> 00:11:11,860 Dalam PHP mengakses anggota adalah yang tahu berapa banyak waktu? 135 00:11:11,860 --> 00:11:18,970 Mungkin konstan jika hash dengan benar. 136 00:11:18,970 --> 00:11:21,620 Siapa yang tahu apa itu benar-benar melakukan bawah tenda? 137 00:11:21,620 --> 00:11:25,600 Anda benar-benar perlu untuk melihat pelaksanaan untuk melihat bagaimana hal itu akan berurusan dengan itu. 138 00:11:25,600 --> 00:11:28,550 Jadi fopen. 139 00:11:28,550 --> 00:11:36,420 Saya pikir di sini mari fopen pengguna hanya PHP untuk melihat jenis kembali. 140 00:11:36,420 --> 00:11:41,260 Kita lihat di sini Anda dapat melihat cukup banyak fungsi apapun di manual PHP 141 00:11:41,260 --> 00:11:47,540 dan ini adalah semacam halaman manual PHP. 142 00:11:47,540 --> 00:11:51,060 Jenis kembali akan menjadi sumber daya. 143 00:11:51,060 --> 00:11:56,050 Itulah mengapa aku mencarinya, karena kita tidak benar-benar mendefinisikan sumber daya. 144 00:11:56,050 --> 00:12:04,110 Ide sumber daya, di C Anda jenis mendapat * FILE atau apa pun; 145 00:12:04,110 --> 00:12:07,200 di PHP adalah sumber daya * FILE Anda. 146 00:12:07,200 --> 00:12:10,360 Ini adalah apa yang Anda akan membaca dari, itu apa yang Anda akan menulis untuk. 147 00:12:10,360 --> 00:12:20,710 Ini biasanya eksternal, sehingga sumber daya yang Anda dapat menarik hal-hal dari dan membuang hal-hal yang. 148 00:12:20,710 --> 00:12:26,520 Dan akhirnya, apa jenis NULL? >> [Mahasiswa] NULL. 149 00:12:26,520 --> 00:12:30,650 Ya. Jadi satu-satunya hal yang NULL NULL. 150 00:12:30,650 --> 00:12:33,480 NULL NULL. 151 00:12:35,490 --> 00:12:41,170 >> Salah satu fitur dari sistem tipe PHP (untuk lebih baik atau buruk) adalah kemampuannya untuk menyulap jenis. 152 00:12:41,170 --> 00:12:44,390 Ketika Anda menulis baris kode PHP yang menggabungkan nilai-nilai dari berbagai jenis, 153 00:12:44,390 --> 00:12:46,670 PHP akan mencoba untuk melakukan hal yang masuk akal. 154 00:12:46,670 --> 00:12:48,920 Cobalah setiap baris kode berikut PHP. Apa yang dicetak? 155 00:12:48,920 --> 00:12:51,000 Apakah apa yang Anda harapkan? Mengapa atau mengapa tidak? 156 00:12:51,000 --> 00:12:58,600 Fakta tentang PHP adalah apa yang membuatnya apa yang kita sebut lemah diketik. 157 00:12:58,600 --> 00:13:04,610 Lemah diketik dan sangat diketik, 158 00:13:04,610 --> 00:13:06,840 ada kegunaan yang berbeda untuk istilah-istilah tersebut, 159 00:13:06,840 --> 00:13:12,020 tetapi kebanyakan orang menggunakan lemah diketik dan sangat diketik berarti hal semacam ini 160 00:13:12,020 --> 00:13:15,920 di mana ("1" + 2), yang bekerja. 161 00:13:15,920 --> 00:13:18,290 Dalam C yang tidak akan bekerja. 162 00:13:18,290 --> 00:13:22,490 Anda bisa membayangkan hal ini tidak bekerja. 163 00:13:22,490 --> 00:13:29,200 Banyak orang mencampur mengetik dinamis dan mengetik lemah dan statis mengetik dan mengetik yang kuat. 164 00:13:29,200 --> 00:13:34,050 Python adalah contoh lain dari bahasa yang dinamis diketik. 165 00:13:34,050 --> 00:13:41,770 Anda dapat membuang sekitar jenis dalam variabel dan itu akan menentukan pada saat run 166 00:13:41,770 --> 00:13:44,680 setiap checkings kesalahan. 167 00:13:44,680 --> 00:13:50,740 Dalam Python itu akan mengeksekusi ini dan itu akan melihat ("1" + 2); 168 00:13:50,740 --> 00:13:55,920 dan ini akan gagal karena ia mengatakan Anda tidak dapat menambahkan string dan integer. 169 00:13:55,920 --> 00:14:00,860 Dalam PHP, yang sama dinamis diketik, ini tidak akan gagal. 170 00:14:00,860 --> 00:14:04,220 Mengetik lemah hubungannya dengan fakta bahwa ia melakukan hal-hal dengan jenis 171 00:14:04,220 --> 00:14:07,800 yang tidak benar-benar masuk akal tentu. 172 00:14:07,800 --> 00:14:17,420 Jadi ("1" + 2), saya bisa membayangkan bahwa menjadi string 12, saya bisa membayangkan itu menjadi string 3, 173 00:14:17,420 --> 00:14:20,710 Aku bisa membayangkan itu menjadi 3 bilangan bulat. 174 00:14:20,710 --> 00:14:24,530 Ini tidak selalu didefinisikan dengan baik, dan kita mungkin akan melihat di sini 175 00:14:24,530 --> 00:14:29,140 bahwa ketika kita cetak ("1" + 2), itu mungkin akan berakhir menjadi berbeda 176 00:14:29,140 --> 00:14:32,320 dari pencetakan (1 + "2"). 177 00:14:32,320 --> 00:14:39,700 Dan ini cenderung, menurut pendapat saya, menjadi buruk. 178 00:14:39,700 --> 00:14:44,240 Di sini kita dapat mencoba ini. 179 00:14:44,240 --> 00:14:48,740 Trik lain sedikit tentang PHP adalah Anda tidak perlu untuk benar-benar menulis file. 180 00:14:48,740 --> 00:14:52,790 Itu telah menjalankan modus perintah. 181 00:14:52,790 --> 00:14:57,710 Jadi php-r, maka kita bisa melempar perintah di sini: 182 00:14:57,710 --> 00:15:06,610 "Print ('1 '+ 2)," dan aku akan melemparkan baris baru. 183 00:15:19,550 --> 00:15:23,970 Ini dicetak 3. 184 00:15:31,100 --> 00:15:35,330 Sepertinya mencetak 3 dan itu adalah 3 integer. 185 00:15:35,330 --> 00:15:38,420 Jadi sekarang mari kita coba sebaliknya: 186 00:15:38,420 --> 00:15:42,970 "Print (1 + '2 '); 187 00:15:45,560 --> 00:15:50,490 Kami mendapatkan 3, dan itu juga akan menjadi bilangan bulat 3? Saya jujur ​​tidak tahu. 188 00:15:50,490 --> 00:15:54,030 Sepertinya yang konsisten. 189 00:15:54,030 --> 00:15:59,550 Tidak pernah ada kesempatan itu menjadi 12 string atau sesuatu seperti itu 190 00:15:59,550 --> 00:16:08,080 karena PHP, tidak seperti JavaScript dan Jawa juga, 191 00:16:08,080 --> 00:16:11,670 memiliki operator yang terpisah untuk penggabungan. 192 00:16:11,670 --> 00:16:14,930 Rangkaian di PHP adalah titik. 193 00:16:14,930 --> 00:16:22,950 Jadi pencetakan (1 '2 '.); Akan memberi kita 12. 194 00:16:25,790 --> 00:16:32,420 Hal ini cenderung menyebabkan kebingungan di mana orang mencoba untuk melakukan sesuatu seperti str + = 195 00:16:32,420 --> 00:16:37,840 beberapa hal lain yang mereka ingin menambahkan ke akhir dari string mereka, dan itu akan gagal. 196 00:16:37,840 --> 00:16:40,770 Anda perlu melakukan str. = 197 00:16:42,000 --> 00:16:46,240 Jadi jangan lupa Rangkaian di PHP adalah sebuah titik. 198 00:16:46,240 --> 00:16:52,100 Hal-hal lain untuk mencoba: cetak ("CS" + 50); 199 00:16:55,750 --> 00:17:03,610 Aku sudah bilang bahwa tidak ada harapan ini mengakibatkan CS50 200 00:17:03,610 --> 00:17:06,119 Rangkaian karena tidak +. 201 00:17:06,119 --> 00:17:08,440 Apa yang Anda pikir ini akan berakhir menjadi? 202 00:17:10,359 --> 00:17:13,460 Saya jujur ​​sama sekali tidak tahu. 203 00:17:14,250 --> 00:17:16,460 Sepertinya itu hanya 50. 204 00:17:16,460 --> 00:17:21,490 Ia melihat string, dan saya yakin jika kita menempatkan 123CS - 205 00:17:21,490 --> 00:17:29,640 Ia melihat string pertama, mencoba untuk membaca integer dari itu atau nomor dari itu. 206 00:17:29,640 --> 00:17:31,710 Dalam hal ini melihat 123CS. 207 00:17:31,710 --> 00:17:35,190 "Itu tidak masuk akal sebagai integer, jadi aku hanya akan memikirkan 123." 208 00:17:35,190 --> 00:17:38,580 Jadi 123 + 50 akan menjadi 173. 209 00:17:38,580 --> 00:17:40,740 Dan di sini ia mulai membaca ini sebagai integer. 210 00:17:40,740 --> 00:17:45,690 Ia tidak melihat apa-apa, sehingga hanya memperlakukan sebagai 0. Jadi 0 + 50 akan menjadi 50. 211 00:17:45,690 --> 00:17:51,600 Ini Aku menduga akan melakukan sesuatu yang mirip. 212 00:17:51,600 --> 00:17:54,310 Aku berpikir 99. 213 00:17:54,310 --> 00:17:57,580 Ya, karena itu akan mengambil pertama - 214 00:18:12,880 --> 00:18:15,730 Jadi 99. 215 00:18:15,730 --> 00:18:21,970 Berikut (10/7), jika ini adalah C, apa yang akan yang kembali? 216 00:18:23,700 --> 00:18:29,630 [Mahasiswa] 1. >> Ya, itu akan menjadi 1 karena 10/7 adalah membagi 2 bilangan bulat. 217 00:18:29,630 --> 00:18:32,910 Integer dibagi dengan integer akan mengembalikan integer. 218 00:18:32,910 --> 00:18:37,750 Hal ini tidak dapat kembali 1 apapun titik yang akan, sehingga hanya akan mengembalikan 1. 219 00:18:37,750 --> 00:18:46,120 Berikut mencetak (10/7), itu akan benar-benar menafsirkan itu. 220 00:18:46,120 --> 00:18:53,760 Dan ini berarti bahwa jika Anda benar-benar ingin melakukan pembulatan integer dan hal-hal seperti itu, 221 00:18:53,760 --> 00:18:59,950 Anda perlu melakukan print (lantai (10/7)); 222 00:18:59,950 --> 00:19:08,460 Dalam C itu mungkin aneh bahwa Anda dapat mengandalkan pemotongan bilangan bulat teratur, 223 00:19:08,460 --> 00:19:12,260 tapi di PHP Anda tidak bisa karena akan otomatis mengubahnya menjadi pelampung. 224 00:19:13,430 --> 00:19:17,610 Dan kemudian (7 + true); apa yang Anda pikir itu akan menjadi? 225 00:19:18,550 --> 00:19:23,640 Saya menduga 8 jika itu akan menafsirkan benar sebagai 1. 226 00:19:23,640 --> 00:19:25,740 Sepertinya itu 8. 227 00:19:25,740 --> 00:19:31,710 >> Jadi apa pun yang kita lakukan dalam 10 menit terakhir Anda harus benar-benar tidak pernah lakukan. 228 00:19:31,710 --> 00:19:39,870 Anda akan melihat kode yang melakukan hal ini. 229 00:19:39,870 --> 00:19:42,700 Tidak harus sesederhana ini. 230 00:19:42,700 --> 00:19:47,240 Anda bisa memiliki 2 variabel, dan 1 variabel terjadi menjadi string 231 00:19:47,240 --> 00:19:51,310 dan variabel lainnya terjadi menjadi sebuah int, dan kemudian Anda menambahkan variabel-variabel bersama-sama. 232 00:19:51,310 --> 00:20:00,120 Karena PHP secara dinamis diketik dan tidak akan melakukan pengecekan jenis untuk Anda 233 00:20:00,120 --> 00:20:03,640 dan sejak itu lemah diketik dan karena itu hanya akan membuang otomatis hal bersama-sama 234 00:20:03,640 --> 00:20:11,490 dan semuanya hanya akan bekerja, sulit untuk tahu bahwa variabel ini harus string sekarang, 235 00:20:11,490 --> 00:20:14,930 jadi saya tidak harus menambahkannya ke variabel ini, yang merupakan integer. 236 00:20:18,780 --> 00:20:24,560 Praktik terbaik adalah jika variabel adalah string, menyimpannya sebagai string selamanya. 237 00:20:24,560 --> 00:20:26,980 Jika suatu variabel int, tetap sebagai int selamanya. 238 00:20:26,980 --> 00:20:30,770 Jika Anda ingin berhubungan dengan bilangan bulat dan string, 239 00:20:30,770 --> 00:20:36,970 Anda dapat menggunakan varsint - itu JavaScript. 240 00:20:36,970 --> 00:20:42,520 Intval. Saya melakukan hal ini sepanjang waktu. PHP dan JavaScript saya mencampur semuanya. 241 00:20:42,520 --> 00:20:47,600 Jadi intval akan mengembalikan nilai integer dari variabel. 242 00:20:47,600 --> 00:20:56,550 Jika kita lulus dalam "cetak (intval ('123 ')); Anda mendapatkan 123. 243 00:21:06,820 --> 00:21:15,850 Intval sendiri tidak akan melakukan cek bagi kita bahwa itu eksklusif integer. 244 00:21:15,850 --> 00:21:20,460 Manual PHP, ada fungsi begitu banyak tersedia, 245 00:21:20,460 --> 00:21:26,560 jadi di sini saya pikir apa yang akan saya gunakan adalah is_numeric pertama. 246 00:21:26,560 --> 00:21:32,590 Saya menduga bahwa kembali palsu. 247 00:21:32,590 --> 00:21:35,780 Itu hal lain kita harus pergi ke atas adalah ===. 248 00:21:37,850 --> 00:21:44,020 Jadi is_numeric (''123df), Anda tidak akan berpikir bahwa sebagai is_numeric. 249 00:21:44,020 --> 00:21:46,720 Dalam C Anda harus iterate atas semua karakter 250 00:21:46,720 --> 00:21:50,410 dan memeriksa untuk melihat apakah karakter setiap digit atau apa pun. 251 00:21:50,410 --> 00:21:53,850 Berikut is_numeric akan melakukannya untuk kita, 252 00:21:53,850 --> 00:21:56,520 dan itu kembali palsu. 253 00:21:56,520 --> 00:22:02,120 Jadi ketika saya dicetak itu, dicetak apa-apa, jadi di sini saya membandingkannya dengan melihat, 254 00:22:02,120 --> 00:22:05,490 apakah Anda kebetulan menjadi salah? Dan jadi sekarang itu mencetak 1. 255 00:22:05,490 --> 00:22:10,060 Rupanya itu mencetak 1 sebagai benar bukannya mencetak benar sebagai benar. 256 00:22:10,060 --> 00:22:15,790 Aku ingin tahu apakah saya melakukan print_r. Tidak, itu masih tidak 1. 257 00:22:15,790 --> 00:22:26,760 >> Kembali ke ===, == masih ada, 258 00:22:26,760 --> 00:22:32,260 dan jika Anda berbicara dengan Tommy mengatakan dia akan baik-baik saja ==. 259 00:22:32,260 --> 00:22:37,700 Aku akan mengatakan bahwa == mengerikan dan Anda tidak harus menggunakan ==. 260 00:22:37,700 --> 00:22:44,870 Perbedaannya adalah bahwa == membandingkan hal-hal 261 00:22:44,870 --> 00:22:48,450 mana bisa berlaku bahkan jika mereka bukan tipe yang sama, 262 00:22:48,450 --> 00:22:53,810 sedangkan === membandingkan hal-hal dan cek pertama mereka jenis yang sama? 263 00:22:53,810 --> 00:22:58,010 Ya. Oke, sekarang aku akan melihat apakah mereka benar-benar dibandingkan harus sama. 264 00:22:58,010 --> 00:23:08,890 Anda mendapatkan hal-hal aneh seperti 10 sama - mari kita melihat apa yang mengatakan. 265 00:23:08,890 --> 00:23:15,570 Jadi ('10 '== '1 e1'); 266 00:23:15,570 --> 00:23:17,980 Hal ini mengembalikan nilai true. 267 00:23:17,980 --> 00:23:21,420 Apakah ada yang punya tebakan mengapa hal ini mengembalikan nilai true? 268 00:23:25,180 --> 00:23:27,120 Ini bukan hanya tentang itu. Mungkin ini adalah petunjuk. 269 00:23:27,120 --> 00:23:33,170 Tetapi jika saya mengubah bahwa untuk f - darn it! Saya tetap menggunakan tanda kutip ganda. 270 00:23:33,170 --> 00:23:38,780 Alasan tanda kutip ganda berteriak pada saya adalah karena saya telah menempatkan ini dalam tanda kutip ganda. 271 00:23:38,780 --> 00:23:43,850 Jadi aku bisa melarikan diri tanda kutip ganda di sini, tapi tanda kutip tunggal membuatnya lebih mudah. 272 00:23:43,850 --> 00:23:49,120 Jadi ('10 '== '1 f1'); tidak mencetak benar. ('10 '== '1 E1'); mencetak benar. 273 00:23:49,120 --> 00:23:56,330 [Mahasiswa] Apakah hex? >> Ini bukan hex, tapi dekat itu seperti - 274 00:23:56,330 --> 00:24:01,060 1E1 notasi ilmiah. 275 00:24:01,060 --> 00:24:07,950 Ia mengakui 1E1 sebagai 1 * 10 ^ 1 atau apa pun. 276 00:24:07,950 --> 00:24:11,510 Mereka adalah bilangan bulat yang sama. 277 00:24:11,510 --> 00:24:15,930 Jika kita melakukan === maka itu akan menjadi palsu. 278 00:24:15,930 --> 00:24:28,490 Aku benar-benar tidak tahu jika kita lakukan == bagaimana (10 dan ''10abc);? Baiklah. Jadi itu benar. 279 00:24:28,490 --> 00:24:35,940 Jadi sama seperti ketika Anda melakukan (10 + ''10abc), dan itu akan menjadi 20, 280 00:24:35,940 --> 00:24:38,800 di sini (10 == ''10abc); benar. 281 00:24:38,800 --> 00:24:45,350 Lebih buruk lagi hal-hal seperti (false == NULL); benar 282 00:24:45,350 --> 00:24:52,210 atau (palsu == 0); benar, (palsu == []); 283 00:24:52,210 --> 00:25:00,970 Ada kasus aneh - Itu salah satu kasus yang aneh. 284 00:25:00,970 --> 00:25:08,110 Perhatikan bahwa (palsu == []); benar. 285 00:25:08,110 --> 00:25:11,950 ('0 '== False); benar. 286 00:25:11,950 --> 00:25:16,090 ('0 '== []); Adalah palsu. 287 00:25:16,090 --> 00:25:19,090 Jadi == sama sekali tidak transitif. 288 00:25:19,090 --> 00:25:26,830 bisa sama dengan b dan bisa sama dengan c, 289 00:25:26,830 --> 00:25:29,340 tapi b mungkin tidak sama dengan c. 290 00:25:29,340 --> 00:25:35,580 Itulah kekejian bagi saya, dan Anda harus selalu menggunakan ===. 291 00:25:35,580 --> 00:25:38,590 [Mahasiswa] Bisakah kita lakukan == juga!? >> [Bowden] Ya. 292 00:25:38,590 --> 00:25:44,600 Setara akan! = Dan ==.! 293 00:25:44,600 --> 00:25:48,230 Ini sebenarnya dibesarkan di spec pset 294 00:25:48,230 --> 00:25:52,000 di mana banyak pengembalian fungsi - 295 00:25:52,000 --> 00:25:53,890 Manual PHP yang baik tentang hal ini. 296 00:25:53,890 --> 00:25:59,140 Ini menempatkan dalam kotak merah besar, "Ini akan mengembalikan false jika ada kesalahan." 297 00:25:59,140 --> 00:26:03,940 Tapi 0 kembali adalah hal yang sangat masuk akal untuk kembali. 298 00:26:03,940 --> 00:26:08,250 Pikirkan tentang semua fungsi yang diharapkan untuk mengembalikan integer. 299 00:26:11,250 --> 00:26:17,880 Katakanlah fungsi ini seharusnya untuk menghitung jumlah baris dalam sebuah file atau sesuatu. 300 00:26:17,880 --> 00:26:23,490 Dalam keadaan normal, Anda melewati fungsi ini file 301 00:26:23,490 --> 00:26:27,120 dan itu akan mengembalikan integer yang mewakili jumlah baris. 302 00:26:27,120 --> 00:26:30,820 Jadi 0 adalah angka yang masuk akal jika file tersebut hanya kosong. 303 00:26:30,820 --> 00:26:36,810 Tapi bagaimana jika Anda lulus file tidak valid dan fungsi terjadi untuk return false 304 00:26:36,810 --> 00:26:38,860 jika anda menambahkan file tidak valid? 305 00:26:38,860 --> 00:26:46,500 Jika Anda hanya melakukan == Anda tidak membedakan kasus antara file yang tidak valid dan file kosong. 306 00:26:48,870 --> 00:26:51,350 Selalu gunakan ===. 307 00:26:55,690 --> 00:26:58,000 Itu semua dari mereka. 308 00:26:58,000 --> 00:27:01,660 >> Dalam PHP, tipe array yang berbeda dari apa yang Anda terbiasa di C. 309 00:27:01,660 --> 00:27:06,650 Memang, Anda mungkin sudah melihat ini di atas ketika Anda melihat bahwa ini adalah dari tipe array. 310 00:27:06,650 --> 00:27:15,640 Sintaks braket baru sebagai PHP 5.4, yang merupakan versi terbaru dari PHP. 311 00:27:15,640 --> 00:27:36,960 Sebelum ini Anda selalu harus menulis array ('a' -> 1, 'b' -> 2. 312 00:27:36,960 --> 00:27:41,160 Itu adalah konstruktor untuk array. 313 00:27:41,160 --> 00:27:45,950 Sekarang PHP akhirnya datang sekitar untuk sintaks yang bagus hanya kurung persegi, 314 00:27:45,950 --> 00:27:50,900 yang hanya jauh lebih baik daripada array. 315 00:27:50,900 --> 00:27:54,480 Tapi mengingat PHP 5.4 adalah versi terbaru, 316 00:27:54,480 --> 00:27:59,090 Anda mungkin mengalami tempat-tempat yang bahkan tidak memiliki PHP 5.3. 317 00:27:59,090 --> 00:28:08,220 Selama musim panas kami berlari ke dalam masalah ini di mana PHP 5.3 adalah apa yang kita miliki pada alat, 318 00:28:08,220 --> 00:28:14,480 namun server yang kita dikerahkan semua buku kelas dan submit dan semua hal yang 319 00:28:14,480 --> 00:28:16,750 adalah PHP 5.4. 320 00:28:16,750 --> 00:28:23,060 Tidak mengetahui hal ini, kami kembangkan di 5.3, didorong ke 5,4, 321 00:28:23,060 --> 00:28:25,660 dan sekarang semua yang tak satu pun mendadak kode kita bekerja 322 00:28:25,660 --> 00:28:28,680 karena ada terjadi telah terjadi perubahan antara 5,3 dan 5,4 323 00:28:28,680 --> 00:28:31,030 yang tidak kompatibel, 324 00:28:31,030 --> 00:28:35,770 dan kita harus pergi dan memperbaiki semua hal-hal kita yang tidak bekerja untuk PHP 5.4. 325 00:28:39,210 --> 00:28:42,320 Untuk kelas ini, karena alat memiliki PHP 5.4, 326 00:28:42,320 --> 00:28:45,490 itu baik-baik saja untuk menggunakan tanda kurung siku. 327 00:28:47,240 --> 00:28:50,440 Tetapi jika Anda sedang mencari sesuatu di Internet, 328 00:28:50,440 --> 00:28:54,880 jika Anda mencari beberapa jenis barang array, kemungkinan besar Anda akan melihat 329 00:28:54,880 --> 00:29:02,020 mantra keluar sintaks array konstruktor karena itu sudah ada sejak lahir PHP 330 00:29:02,020 --> 00:29:07,340 dan sintaks braket persegi telah sekitar selama beberapa bulan terakhir 331 00:29:07,340 --> 00:29:10,020 atau setiap kali datang sekitar 5,4. 332 00:29:10,020 --> 00:29:12,710 Ini adalah bagaimana Anda indeks. 333 00:29:12,710 --> 00:29:30,610 Sama seperti di C bagaimana Anda akan index oleh tanda kurung siku seperti $ array [0], $ array [1], $ array [2], 334 00:29:30,610 --> 00:29:36,320 Anda indeks dengan cara yang sama jika Anda kebetulan memiliki indeks Anda menjadi string. 335 00:29:36,320 --> 00:29:40,440 Array Jadi $ array ['a'] dan $ ['b']. 336 00:29:40,440 --> 00:29:47,410 $ Array [b]. Mengapa hal ini salah? 337 00:29:52,490 --> 00:29:59,870 Ini mungkin akan menghasilkan peringatan tapi masih bekerja. PHP cenderung untuk melakukan itu. 338 00:29:59,870 --> 00:30:04,890 Hal ini cenderung hanya, "Aku akan memperingatkan Anda tentang hal ini, tapi aku hanya akan terus 339 00:30:04,890 --> 00:30:07,550 "Dan melakukan apapun yang saya bisa." 340 00:30:07,550 --> 00:30:11,500 Ini mungkin akan menerjemahkan ke string, 341 00:30:11,500 --> 00:30:15,000 namun ada kemungkinan bahwa di beberapa titik di masa lalu seseorang mengatakan 342 00:30:15,000 --> 00:30:20,180 mendefinisikan b untuk menjadi 'HELLO WORLD'. 343 00:30:20,180 --> 00:30:28,740 Jadi sekarang b bisa menjadi array konstan dan $ [b] benar-benar akan melakukan 'HELLO WORLD'. 344 00:30:28,740 --> 00:30:32,380 Saya pikir pada saat ini, atau setidaknya pengaturan PHP kita, 345 00:30:32,380 --> 00:30:37,870 jika Anda mencoba untuk indeks ke array dan kunci yang tidak ada, maka akan gagal. 346 00:30:37,870 --> 00:30:40,150 Saya tidak berpikir itu hanya akan memperingatkan Anda. 347 00:30:40,150 --> 00:30:44,560 Atau setidaknya Anda dapat mengaturnya sehingga tidak hanya memperingatkan Anda, itu hanya lurus ke atas gagal. 348 00:30:44,560 --> 00:30:49,290 >> Cara Anda memeriksa untuk melihat apakah ada sebenarnya seperti indeks adalah isset. 349 00:30:49,290 --> 00:30:54,690 Jadi isset ($ array ['HELLO WORLD']) akan kembali palsu. 350 00:30:54,690 --> 00:30:59,160 isset ($ array ['b']) akan kembali benar. 351 00:31:06,830 --> 00:31:09,880 Anda dapat mencampur tersebut syntaxes. 352 00:31:15,060 --> 00:31:22,440 Aku cukup yakin apa array ini akan berakhir menjadi adalah - Kita bisa menguji itu. 353 00:31:43,290 --> 00:31:45,700 Oh, saya perlu PHPWord. 354 00:31:53,960 --> 00:32:00,260 Ini adalah mencampur sintaks di mana Anda menentukan apa kuncinya adalah 355 00:32:00,260 --> 00:32:03,330 dan Anda tidak menentukan apa kuncinya adalah. 356 00:32:03,330 --> 00:32:05,520 Jadi 3 di sini adalah nilai. 357 00:32:05,520 --> 00:32:08,080 Anda tidak secara eksplisit mengatakan apa kuncinya akan menjadi. 358 00:32:08,080 --> 00:32:11,670 Apa yang Anda pikir kuncinya akan menjadi? 359 00:32:11,670 --> 00:32:21,410 [Mahasiswa] 0. >> Aku menebak 0 hanya karena itu yang pertama kita belum ditentukan. 360 00:32:21,410 --> 00:32:23,500 Kami benar-benar bisa melakukan beberapa kasus. 361 00:32:23,500 --> 00:32:28,030 Jadi print_r adalah mencetak rekursif. Ini akan mencetak seluruh array. 362 00:32:28,030 --> 00:32:32,700 Ini akan mencetak subarrays dari array jika ada. 363 00:32:32,700 --> 00:32:36,630 Jadi print_r ($ array); php.test.php. 364 00:32:36,630 --> 00:32:38,810 Ini memang terlihat seperti itu memberikannya 0. 365 00:32:38,810 --> 00:32:43,530 Ada sebenarnya sesuatu yang perlu diingat di sini, tapi kami akan kembali ke sana dalam detik. 366 00:32:43,530 --> 00:32:45,850 Tapi apa yang terjadi jika saya membuat indeks 1? 367 00:32:45,850 --> 00:32:51,170 PHP tidak membedakan antara indeks string dan indeks integer, 368 00:32:51,170 --> 00:33:00,280 sehingga pada titik ini saya baru saja didefinisikan indeks 1 dan saya bisa melakukan keduanya array $ [1] dan $ array ['1 '] 369 00:33:00,280 --> 00:33:06,250 dan itu akan menjadi indeks yang sama dan tombol yang sama. 370 00:33:06,250 --> 00:33:13,000 Jadi sekarang apa yang Anda pikirkan 3 akan menjadi? >> [Mahasiswa] 2. >> [Bowden] aku menebak 2. 371 00:33:16,000 --> 00:33:18,690 Ya. Ini 2. 372 00:33:18,690 --> 00:33:24,790 Bagaimana jika kita melakukan hal ini adalah 10, ini adalah 4? Apa yang Anda pikir indeks 3 akan menjadi? 373 00:33:27,360 --> 00:33:29,110 Aku berpikir 11. 374 00:33:29,110 --> 00:33:33,060 Saya menebak seperti apa PHP tidak - dan saya pikir saya sudah melihat ini sebelumnya - 375 00:33:33,060 --> 00:33:39,760 adalah hanya melacak apa indeks numerik tertinggi itu digunakan sejauh ini. 376 00:33:39,760 --> 00:33:44,230 Ini tidak akan menetapkan indeks string ke 3. Ini akan selalu menjadi indeks numerik. 377 00:33:44,230 --> 00:33:47,690 Jadi melacak yang tertinggi itu diberikan sejauh ini, yang kebetulan 10, 378 00:33:47,690 --> 00:33:52,540 dan itu akan memberikan 11 sampai 3. 379 00:33:52,540 --> 00:34:02,110 Apa yang saya katakan sebelumnya, perhatikan cara ia mencetak array ini. 380 00:34:02,110 --> 00:34:06,850 Mencetak 10, tombol 4, kunci 11, kunci d. 381 00:34:06,850 --> 00:34:09,790 Atau bahkan mari kita lakukan - 382 00:34:15,760 --> 00:34:22,489 Saya kira saya tidak menaruh 0, tapi itu mencetak 1, 2, 3, 4. 383 00:34:22,489 --> 00:34:29,330 Bagaimana jika saya beralih sini? Atau mari kita benar-benar beralih 2 tersebut. 384 00:34:29,330 --> 00:34:31,940 Sekarang mencetak 2, 1, 3, 4. 385 00:34:31,940 --> 00:34:41,270 Array PHP tidak seperti meja biasa hash Anda. 386 00:34:41,270 --> 00:34:45,570 Ini sangat masuk akal untuk menganggap mereka sebagai tabel hash 99% dari waktu. 387 00:34:45,570 --> 00:34:53,790 Tapi dalam tabel hash Anda tidak ada rasa urutan hal-hal yang dimasukkan. 388 00:34:53,790 --> 00:34:56,639 Jadi segera setelah Anda memasukkannya ke dalam tabel hash Anda, 389 00:34:56,639 --> 00:35:00,590 berasumsi tidak ada linked list dan Anda bisa menilai dalam linked list 390 00:35:00,590 --> 00:35:03,980 yang dimasukkan terlebih dahulu. 391 00:35:03,980 --> 00:35:10,060 Tapi di sini kita disisipkan 2 pertama dan ia tahu ketika itu mencetak array ini bahwa 2 datang pertama. 392 00:35:10,060 --> 00:35:13,090 Ia tidak mencetak keluar hanya dalam urutan apapun. 393 00:35:13,090 --> 00:35:17,550 Struktur data teknis bahwa itu adalah menggunakan peta memerintahkan, 394 00:35:17,550 --> 00:35:24,690 sehingga memetakan kunci dengan nilai-nilai dan mengingat urutan di mana orang-orang kunci yang dimasukkan. 395 00:35:24,690 --> 00:35:31,600 Pada dasarnya itu untuk beberapa komplikasi di mana itu untuk benar-benar menjengkelkan - 396 00:35:31,600 --> 00:35:34,510 Katakanlah Anda memiliki sebuah array 0, 1, 2, 3, 4, 5 397 00:35:34,510 --> 00:35:37,700 dan Anda ingin mengambil indeks 2. 398 00:35:37,700 --> 00:35:47,750 Salah satu cara untuk melakukannya, mari kita lihat apa yang terlihat seperti. 399 00:35:47,750 --> 00:35:50,410 0, 2, 1, 3, 4. 400 00:35:50,410 --> 00:35:54,880 Unset terjadi unset kedua variabel dan indeks array. 401 00:35:54,880 --> 00:35:58,630 Jadi unset ($ array [2]); 402 00:35:58,630 --> 00:36:03,430 Sekarang ini apa yang akan terlihat seperti? 2 hanya pergi, jadi itu baik-baik saja. 403 00:36:03,430 --> 00:36:11,670 Lebih menjengkelkan adalah jika Anda ingin hal-hal untuk benar-benar menjadi seperti array. 404 00:36:11,670 --> 00:36:14,910 Aku akan menaruh nomor acak. 405 00:36:14,910 --> 00:36:20,400 Sekarang perhatikan indeks saya. 406 00:36:20,400 --> 00:36:26,860 Saya ingin hanya menjadi seperti array C di mana ia pergi dari 0 sampai panjang - 1 407 00:36:26,860 --> 00:36:30,810 dan saya dapat iterate atas seperti itu. 408 00:36:30,810 --> 00:36:38,520 Tapi begitu saya diset indeks kedua, apa yang ada di indeks 3 tidak sekarang menjadi indeks 2. 409 00:36:38,520 --> 00:36:44,790 Sebaliknya hanya menghilangkan indeks itu dan sekarang Anda pergi 0, 1, 3, 4. 410 00:36:44,790 --> 00:36:48,740 Ini adalah hal yang wajar. 411 00:36:48,740 --> 00:36:53,950 Ini hanya mengganggu dan Anda harus melakukan hal-hal seperti sambatan array. Ya. 412 00:36:53,950 --> 00:36:57,200 >> [Mahasiswa] Apa yang akan terjadi jika Anda memiliki untuk loop 413 00:36:57,200 --> 00:36:59,630 dan Anda ingin pergi ke semua elemen? 414 00:36:59,630 --> 00:37:02,290 Ketika itu menghantam 2, akan menghasilkan hasil yang pernah? 415 00:37:02,290 --> 00:37:10,150 Iterasi atas array. Ada 2 cara yang bisa melakukannya. 416 00:37:10,150 --> 00:37:12,770 Anda dapat menggunakan reguler untuk loop. 417 00:37:12,770 --> 00:37:22,000 Ini adalah satu lagi kerumitan PHP. 418 00:37:22,000 --> 00:37:27,420 Kebanyakan bahasa, saya akan mengatakan, memiliki semacam panjang atau len atau sesuatu 419 00:37:27,420 --> 00:37:30,470 menunjukkan panjang array. 420 00:37:30,470 --> 00:37:32,820 Di PHP itu hitungan. 421 00:37:32,820 --> 00:37:36,160 Jadi count ($ array); $ i + +) 422 00:37:36,160 --> 00:37:42,950 Mari kita cetak ($ ​​array [$ i]); 423 00:37:45,920 --> 00:37:48,820 Perhatikan: Undefined offset: 2. 424 00:37:48,820 --> 00:37:51,610 Ini hanya akan gagal. 425 00:37:51,610 --> 00:38:03,020 Ini adalah alasan bahwa, untuk sebagian besar, Anda tidak perlu iterate melalui array seperti ini. 426 00:38:03,020 --> 00:38:07,110 Mungkin berlebihan, tapi Anda tidak pernah perlu iterate melalui array seperti ini 427 00:38:07,110 --> 00:38:19,410 karena PHP menyediakan sintaks foreach yang mana foreach ($ array as $ item). 428 00:38:19,410 --> 00:38:31,830 Sekarang jika kita mencetak ($ ​​item), - kami membahasnya dalam kedua - yang bekerja baik-baik saja. 429 00:38:31,830 --> 00:38:38,960 Cara foreach bekerja adalah argumen pertama adalah array yang Anda iterasi. 430 00:38:38,960 --> 00:38:44,060 Dan argumen kedua, item, melalui masing-masing lulus dari untuk loop 431 00:38:44,060 --> 00:38:52,690 itu akan mengambil hal berikutnya dalam array. Jadi ingat array memiliki perintah. 432 00:38:52,690 --> 00:38:55,690 Pertama kali melalui untuk loop, item akan menjadi 123 433 00:38:55,690 --> 00:38:59,540 maka akan menjadi 12 maka akan 13 maka akan 23 maka akan 213. 434 00:38:59,540 --> 00:39:04,670 Hal mendapatkan benar-benar aneh ketika Anda melakukan sesuatu seperti foreach. 435 00:39:04,670 --> 00:39:07,480 Mari kita lihat apa yang terjadi karena Anda tidak harus melakukan ini. 436 00:39:07,480 --> 00:39:13,320 Bagaimana jika kita unset ($ array [1]); 437 00:39:20,410 --> 00:39:26,030 Itu mungkin diharapkan. 438 00:39:26,030 --> 00:39:30,950 Kau iterasi atas array ini, dan setiap kali Anda unsetting indeks pertama. 439 00:39:30,950 --> 00:39:39,720 Jadi untuk indeks 0, hal item, pertama mengambil nilai 0, sehingga akan menjadi 123. 440 00:39:39,720 --> 00:39:44,630 Tapi dalam untuk loop yang kita unset indeks 1, sehingga berarti 12 hilang. 441 00:39:44,630 --> 00:39:57,480 Jadi cetak. PHP_EOL. 442 00:39:57,480 --> 00:40:03,580 PHP_EOL hanya newline, tapi secara teknis lebih portabel 443 00:40:03,580 --> 00:40:08,890 sejak baris di Windows berbeda dari baris pada Mac dan UNIX. 444 00:40:08,890 --> 00:40:18,040 Pada Windows newline adalah \ r \ n, sedangkan di tempat lain itu cenderung hanya menjadi \ n. 445 00:40:18,040 --> 00:40:25,150 PHP_EOL dikonfigurasi sehingga menggunakan apa pun baris baru dari sistem anda. 446 00:40:25,150 --> 00:40:29,310 Jadi cetak itu. Jangan print_r ($ array) di akhir. 447 00:40:32,830 --> 00:40:37,390 Saya tidak tahu bahwa itu akan menjadi perilaku. 448 00:40:41,740 --> 00:40:48,960 Barang masih mengambil nilai 12 meskipun kita unset 12 sebelum kita pernah harus itu dari array. 449 00:40:52,770 --> 00:40:58,840 Jangan mengambil kata-kata saya ini, tapi tampaknya foreach membuat copy dari array 450 00:40:58,840 --> 00:41:02,160 dan kemudian item mengambil semua nilai copy itu. 451 00:41:02,160 --> 00:41:07,760 Jadi bahkan jika Anda memodifikasi array di dalam untuk loop, 452 00:41:07,760 --> 00:41:17,240 itu tidak akan peduli. Barang akan mengambil nilai-nilai asli. 453 00:41:17,240 --> 00:41:19,240 Mari kita coba unsetting itu. 454 00:41:19,240 --> 00:41:24,460 Bagaimana jika ini adalah $ array [1] = "halo"; 455 00:41:24,460 --> 00:41:31,770 Meskipun kita meletakkan "halo" ke dalam array, item tidak pernah mengambil nilai tersebut. 456 00:41:31,770 --> 00:41:37,430 Ada satu lagi sintaks foreach loop untuk 457 00:41:37,430 --> 00:41:45,900 di mana Anda meletakkan 2 variabel dipisahkan oleh panah. 458 00:41:45,900 --> 00:41:49,680 Variabel pertama akan menjadi kunci dari nilai tersebut, 459 00:41:49,680 --> 00:41:53,050 dan variabel kedua akan menjadi item yang sama persis. 460 00:41:53,050 --> 00:42:01,610 Hal ini menarik di sini, tapi jika kita kembali ke kasus awal kami 'a' -> 1, 461 00:42:01,610 --> 00:42:06,090 'B' -> 1, 462 00:42:06,090 --> 00:42:14,470 di sini jika kita hanya iterate untuk setiap array sebagai item, item akan menjadi 1 setiap saat. 463 00:42:14,470 --> 00:42:18,170 Tetapi jika kita juga ingin mengetahui kunci yang terkait dengan item yang 464 00:42:18,170 --> 00:42:25,230 maka kita lakukan sebagai $ key -> $ item. 465 00:42:25,230 --> 00:42:31,980 Jadi sekarang kita bisa melakukan print ($ key ':'.. 466 00:42:31,980 --> 00:42:39,380 Sekarang itu iterasi dan mencetak setiap tombol dan nilainya terkait. 467 00:42:39,380 --> 00:42:47,030 >> Suatu hal tambahan yang bisa kita lakukan di foreach loop adalah Anda mungkin melihat sintaks ini. 468 00:42:47,030 --> 00:42:54,770 Ampersands sebelum nama variabel cenderung bagaimana PHP melakukan referensi. 469 00:42:54,770 --> 00:43:00,460 Dimana referensi yang sangat mirip dengan pointer, 470 00:43:00,460 --> 00:43:04,820 Anda tidak memiliki pointer, sehingga Anda tidak pernah berurusan dengan memori secara langsung. 471 00:43:04,820 --> 00:43:12,620 Tapi Anda memiliki referensi di mana 1 variabel mengacu pada hal yang sama seperti variabel lain. 472 00:43:12,620 --> 00:43:21,450 Di dalam sini mari kita lakukan $ item. Mari kita kembali ke 1, 10. 473 00:43:21,450 --> 00:43:28,800 Mari kita lakukan $ item + +, itu masih ada di PHP. Anda masih bisa melakukan + +. 474 00:43:28,800 --> 00:43:38,260 php.test.php. Saya harus mencetaknya. print_r ($ array); 475 00:43:38,260 --> 00:43:42,730 Kami mencetak 2, 11. 476 00:43:42,730 --> 00:43:49,560 Jika saya baru saja dilakukan foreach ($ array as $ item) maka item akan menjadi nilai 1 477 00:43:49,560 --> 00:43:54,190 pertama kalinya melalui loop. Ini akan kenaikan 1 sampai 2 dan kemudian kita sudah selesai. 478 00:43:54,190 --> 00:43:57,260 Jadi itu akan pergi melalui lulus kedua loop dan item yang 10. 479 00:43:57,260 --> 00:44:01,570 Ia bertambah item untuk 11, dan kemudian itu hanya dibuang. 480 00:44:01,570 --> 00:44:06,670 Kemudian kita print_r ($ array), dan mari kita melihat bahwa ini hanya 1, 10. 481 00:44:06,670 --> 00:44:09,070 Jadi kenaikan kami lakukan hilang. 482 00:44:09,070 --> 00:44:13,410 Tapi foreach ($ array sebagai & $ item) 483 00:44:13,410 --> 00:44:21,910 sekarang item ini adalah item yang sama seperti ini di sini. Ini hal yang sama. 484 00:44:21,910 --> 00:44:26,820 Jadi $ item + + adalah memodifikasi berbagai 0. 485 00:44:29,330 --> 00:44:41,850 Pada dasarnya, Anda juga dapat melakukan $ k - array> $ item dan Anda dapat melakukan $ [$ k] + +; 486 00:44:41,850 --> 00:44:48,650 >> Jadi cara lain untuk melakukan hal itu, kita bebas untuk memodifikasi item, 487 00:44:48,650 --> 00:44:54,070 tapi itu tidak akan mengubah array asli kami. 488 00:44:54,070 --> 00:44:59,720 Namun jika kita menggunakan k, yang merupakan kunci kita, maka kita dapat hanya indeks ke array kita menggunakan bahwa kunci 489 00:44:59,720 --> 00:45:01,530 dan kenaikan itu. 490 00:45:01,530 --> 00:45:05,410 Ini lebih langsung memodifikasi array asli kami. 491 00:45:05,410 --> 00:45:10,690 Anda bahkan dapat melakukan itu jika karena alasan tertentu Anda ingin kemampuan untuk memodifikasi - 492 00:45:10,690 --> 00:45:13,510 Sebenarnya, ini sangat masuk akal. 493 00:45:13,510 --> 00:45:16,020 Anda tidak ingin harus menulis $ array [$ k] + +, 494 00:45:16,020 --> 00:45:27,890 Anda hanya ingin menulis $ item + + tetapi Anda masih ingin mengatakan jika ($ k === 'a') 495 00:45:27,890 --> 00:45:30,620 maka kenaikan item dan kemudian mencetak array kita. 496 00:45:30,620 --> 00:45:36,290 Jadi sekarang apa yang kita harapkan print_r lakukan? Nilai-nilai apa yang harus dicetak? 497 00:45:36,290 --> 00:45:43,770 [Mahasiswa] 2 dan 10. >> [Bowden] Hanya jika kunci adalah 'a' kita benar-benar mencetak itu. 498 00:45:51,940 --> 00:45:55,670 >> Anda mungkin sangat jarang, jika pernah, perlu mendefinisikan fungsi dalam PHP, 499 00:45:55,670 --> 00:46:03,370 tapi Anda mungkin melihat sesuatu yang serupa di mana Anda mendefinisikan fungsi seperti fungsi apapun. 500 00:46:03,370 --> 00:46:09,900 Biasanya Anda akan mengatakan ($ foo, $ bar) dan kemudian menentukan untuk menjadi apa pun. 501 00:46:09,900 --> 00:46:17,580 Tapi kalau aku melakukan ini, maka itu berarti bahwa apa pun memanggil apapun, 502 00:46:17,580 --> 00:46:25,110 apapun panggilan baz, sehingga argumen pertama dilewatkan ke baz dapat diubah. 503 00:46:25,110 --> 00:46:38,100 Mari kita lakukan $ foo + +; 504 00:46:38,100 --> 00:46:48,020 dan dalam sini mari kita lakukan baz ($ item); 505 00:46:48,020 --> 00:46:52,250 Sekarang kita memanggil fungsi. 506 00:46:52,250 --> 00:46:56,780 Argumen ini diambil oleh referensi, yang berarti bahwa jika kita memodifikasi 507 00:46:56,780 --> 00:47:00,390 kita memodifikasi hal yang lulus masuk 508 00:47:00,390 --> 00:47:04,420 Dan mencetak ini kita harapkan - kecuali aku mengacaukan sintaks - kami mendapat 2, 11, 509 00:47:04,420 --> 00:47:06,300 sehingga benar-benar bertambah. 510 00:47:06,300 --> 00:47:08,790 Pemberitahuan kita perlu referensi di 2 tempat. 511 00:47:08,790 --> 00:47:13,050 Bagaimana jika saya melakukan ini? Apa artinya ini? 512 00:47:13,050 --> 00:47:15,810 [Mahasiswa] Ini akan berubah. >> Ya. 513 00:47:15,810 --> 00:47:18,290 Item hanya sebuah salinan dari nilai dalam array. 514 00:47:18,290 --> 00:47:26,670 Jadi item yang akan berubah menjadi 2, tapi array ['a'] akan tetap 1. 515 00:47:26,670 --> 00:47:32,560 Atau bagaimana jika saya melakukan ini? 516 00:47:32,560 --> 00:47:39,260 Sekarang item dikirim sebagai copy ke baz. 517 00:47:39,260 --> 00:47:46,330 Jadi salinan argumen akan bertambah menjadi 2, 518 00:47:46,330 --> 00:47:49,240 tapi item itu sendiri tidak pernah bertambah untuk 2. 519 00:47:49,240 --> 00:47:52,880 Dan item adalah hal yang sama seperti braket Array apapun, 520 00:47:52,880 --> 00:47:55,380 sehingga array yang tidak pernah bertambah. 521 00:47:55,380 --> 00:47:57,960 Jadi baik tempat-tempat membutuhkannya. 522 00:47:57,960 --> 00:48:03,830 >> PHP biasanya cukup cerdas tentang hal ini. 523 00:48:03,830 --> 00:48:06,570 Anda mungkin berpikir saya ingin lulus dengan referensi - 524 00:48:06,570 --> 00:48:09,560 Ini benar-benar sebuah pertanyaan di salah satu psets. 525 00:48:09,560 --> 00:48:14,480 Itu adalah hal yang questions.txt mana dikatakan, 526 00:48:14,480 --> 00:48:19,280 Mengapa Anda ingin lulus struct ini dengan referensi? 527 00:48:19,280 --> 00:48:21,250 Apa jawabannya? 528 00:48:21,250 --> 00:48:25,100 [Mahasiswa] Jadi Anda tidak perlu menyalin sesuatu yang besar. >> Ya. 529 00:48:25,100 --> 00:48:32,920 Sebuah struct dapat sewenang-wenang besar, dan ketika Anda melewati struct sebagai argumen 530 00:48:32,920 --> 00:48:36,800 perlu menyalin bahwa seluruh struct untuk lulus ke fungsi, 531 00:48:36,800 --> 00:48:40,410 sedangkan jika Anda hanya melewati struct dengan referensi 532 00:48:40,410 --> 00:48:46,530 maka hanya perlu menyalin alamat 4-byte sebagai argumen ke fungsi. 533 00:48:48,520 --> 00:48:52,320 PHP adalah sedikit lebih pintar dari itu. 534 00:48:52,320 --> 00:49:00,650 Jika saya memiliki beberapa fungsi dan saya lulus untuk itu sebuah array dari 1.000 hal, 535 00:49:00,650 --> 00:49:03,990 artinya itu akan harus menyalin semua 1.000 dari hal-hal 536 00:49:03,990 --> 00:49:10,450 untuk lulus ke fungsi? Ia tidak perlu melakukan itu segera. 537 00:49:10,450 --> 00:49:15,940 Jika dalam fungsi ini tidak pernah benar-benar memodifikasi foo, 538 00:49:15,940 --> 00:49:22,660 jadi jika ($ foo === 'hello') kembali benar.; 539 00:49:22,660 --> 00:49:26,460 Perhatikan kita tidak pernah benar-benar diubah di dalam argumen fungsi ini, 540 00:49:26,460 --> 00:49:30,010 yang berarti bahwa apa pun disahkan sebagai foo pernah perlu disalin 541 00:49:30,010 --> 00:49:32,100 karena tidak modifikasi. 542 00:49:32,100 --> 00:49:39,240 Jadi cara kerja PHP adalah argumen selalu dilewatkan dengan referensi 543 00:49:39,240 --> 00:49:42,170 sampai Anda benar-benar mencoba untuk memodifikasinya. 544 00:49:42,170 --> 00:49:51,160 Sekarang jika saya mengatakan $ foo + +, sekarang akan membuat salinan foo asli dan memodifikasi salinan. 545 00:49:51,160 --> 00:49:53,090 Ini menghemat waktu. 546 00:49:53,090 --> 00:49:58,210 Jika Anda tidak pernah menyentuh ini array besar, Anda tidak pernah benar-benar memodifikasi, 547 00:49:58,210 --> 00:50:02,360 tidak perlu membuat salinan, 548 00:50:02,360 --> 00:50:06,640 sedangkan jika kita hanya menempatkan ini ampersand yang berarti bahkan tidak salin 549 00:50:06,640 --> 00:50:08,640 bahkan jika Anda memodifikasinya. 550 00:50:08,640 --> 00:50:10,680 Perilaku ini disebut copy-on-write. 551 00:50:10,680 --> 00:50:17,380 Anda akan melihatnya di tempat lain, terutama jika Anda mengambil kursus sistem operasi. 552 00:50:17,380 --> 00:50:23,880 Copy-on-write adalah pola yang cukup umum di mana Anda tidak perlu membuat salinan dari sesuatu 553 00:50:23,880 --> 00:50:26,650 kecuali itu benar-benar berubah. Ya. 554 00:50:26,650 --> 00:50:29,520 [Mahasiswa] Bagaimana jika Anda memiliki peningkatan dalam tes, 555 00:50:29,520 --> 00:50:33,700 sehingga hanya 1 elemen dari 1.000 akan perlu diubah? 556 00:50:33,700 --> 00:50:38,770 Saya tidak yakin. 557 00:50:38,770 --> 00:50:51,250 Saya pikir itu akan menyalin seluruh hal, tapi mungkin itu cukup pintar itu - 558 00:50:51,250 --> 00:51:00,020 Sebenarnya, apa yang saya pikirkan adalah bayangkan kita memiliki sebuah array yang terlihat seperti ini: $ array2 = [ 559 00:51:00,020 --> 00:51:11,000 Lalu 'a' indeks array [1 2 3 4], dan indeks 'b' adalah sebuah array apapun. 560 00:51:11,000 --> 00:51:15,380 Saya perlu koma antara semua dari mereka. Bayangkan ada koma. 561 00:51:15,380 --> 00:51:21,210 Kemudian 'c' adalah nilai 3. 562 00:51:24,210 --> 00:51:26,290 Oke. 563 00:51:26,290 --> 00:51:33,440 Sekarang katakanlah kita lakukan $ baz ($ array2); 564 00:51:33,440 --> 00:51:36,540 mana baz tidak mengambil ini dengan referensi. 565 00:51:43,510 --> 00:51:47,370 Jadi $ foo ['c'] + +; 566 00:51:47,370 --> 00:51:52,340 Ini adalah contoh di mana kita melewati array2 sebagai argumen 567 00:51:52,340 --> 00:51:57,010 dan kemudian ia memodifikasi indeks spesifik dari array dengan incrementing itu. 568 00:51:57,010 --> 00:52:01,090 Saya jujur ​​tidak tahu apa PHP yang akan dilakukan. 569 00:52:01,090 --> 00:52:07,200 Hal ini dapat dengan mudah membuat salinan dari seluruh hal, tetapi jika itu pintar, 570 00:52:07,200 --> 00:52:15,030 itu akan membuat salinan dari tombol-tombol mana hal ini akan memiliki nilai yang berbeda yang 571 00:52:15,030 --> 00:52:20,620 tapi ini masih bisa menunjuk ke array yang sama 1,2,3,4 572 00:52:20,620 --> 00:52:22,320 dan ini masih bisa menunjuk ke array yang sama. 573 00:52:22,320 --> 00:52:24,170 Aku akan iPad itu. 574 00:52:28,900 --> 00:52:45,950 Kami lulus dalam array ini di mana orang ini poin ke 3, ini menunjukkan pria untuk [1,2,3,4], 575 00:52:45,950 --> 00:52:51,350 orang ini menunjukkan [34, ...] 576 00:52:51,350 --> 00:52:58,590 Sekarang kita lewat ke baz, kita memodifikasi ini. 577 00:52:58,590 --> 00:53:03,550 Jika PHP cerdas, itu hanya bisa melakukan - 578 00:53:11,850 --> 00:53:18,230 Kami masih harus menyalin beberapa memori, tetapi jika ada ini subarrays bersarang besar 579 00:53:18,230 --> 00:53:21,560 kita tidak perlu untuk menyalin. 580 00:53:21,560 --> 00:53:27,530 Saya tidak tahu apakah itu apa yang dilakukannya, tapi aku bisa membayangkan itu melakukan hal itu. 581 00:53:29,050 --> 00:53:36,690 Ini juga merupakan keuntungan cukup besar dari C atas PHP. 582 00:53:36,690 --> 00:53:40,320 >> PHP membuat hidup jadi lebih mudah untuk banyak hal, 583 00:53:40,320 --> 00:53:45,060 tetapi Anda jenis sama sekali tidak tahu seberapa baik itu akan tampil 584 00:53:45,060 --> 00:53:52,530 karena saya tidak tahu di bawah kap ketika itu membuat salinan ini dari hal-hal, 585 00:53:52,530 --> 00:53:55,170 oh, adalah bahwa akan salinan waktu yang konstan, 586 00:53:55,170 --> 00:54:01,140 apakah hanya akan mengubah 1 pointer, apakah akan menjadi salinan linier ridiculously sulit? 587 00:54:01,140 --> 00:54:03,000 Bagaimana jika tidak bisa menemukan ruang? 588 00:54:03,000 --> 00:54:06,760 Apakah itu kemudian perlu untuk menjalankan pengumpulan sampah untuk mendapatkan ruang lagi? 589 00:54:06,760 --> 00:54:11,210 Dan pengumpulan sampah dapat mengambil sewenang-wenang panjang. 590 00:54:11,210 --> 00:54:13,600 Dalam C Anda tidak perlu khawatir tentang hal-hal ini. 591 00:54:13,600 --> 00:54:19,780 Setiap baris Anda menulis Anda dapat alasan yang cukup banyak tentang bagaimana hal itu akan tampil. 592 00:54:26,800 --> 00:54:29,150 >> Mari kita melihat kembali ini. 593 00:54:35,400 --> 00:54:37,520 Bagaimana baik adalah bahwa Anda tidak harus berurusan dengan fungsi hash, 594 00:54:37,520 --> 00:54:39,010 terkait daftar, atau sesuatu seperti itu? 595 00:54:39,010 --> 00:54:41,980 Sejak bekerja dengan tabel hash sangat mudah sekarang, inilah teka-teki menyenangkan untuk bekerja pada. 596 00:54:41,980 --> 00:54:45,920 Membuka sebuah file yang bernama unique.php dan di dalamnya menulis sebuah program PHP 597 00:54:45,920 --> 00:54:48,330 (Juga dikenal sebagai "script"). 598 00:54:48,330 --> 00:54:55,700 Kita cenderung untuk memanggil mereka skrip jika mereka hal-hal singkat yang Anda jalankan pada baris perintah. 599 00:54:55,700 --> 00:55:02,950 Pada dasarnya, setiap bahasa yang Anda tidak mengkompilasi tetapi Anda akan menjalankan executable 600 00:55:02,950 --> 00:55:05,920 pada baris perintah, Anda dapat memanggil bahwa script dieksekusi. 601 00:55:05,920 --> 00:55:08,510 Aku bisa juga menulis sebuah program C yang melakukan hal ini, 602 00:55:08,510 --> 00:55:12,300 tapi saya tidak menyebutnya sebuah naskah sejak pertama kali saya mengkompilasi dan kemudian menjalankan biner. 603 00:55:12,300 --> 00:55:15,480 Tapi ini program PHP kita akan memanggil script. 604 00:55:15,480 --> 00:55:23,830 Atau jika kita menulis dalam Python atau Perl atau node.js atau salah satu dari hal-hal, 605 00:55:23,830 --> 00:55:26,500 kami akan memanggil mereka semua skrip karena Anda menjalankan mereka di baris perintah 606 00:55:26,500 --> 00:55:30,040 tapi kami tidak kompilasi mereka. 607 00:55:30,860 --> 00:55:33,400 Kita bisa melakukan hal ini cukup cepat. 608 00:55:36,960 --> 00:55:41,480 Kami tidak akan menggunakan argv. Mari kita meniup melalui ini. 609 00:55:41,480 --> 00:55:45,730 Sebut saja unik, menulis sebuah program. 610 00:55:45,730 --> 00:55:49,400 Anda dapat mengasumsikan bahwa input akan berisi satu kata per baris. 611 00:55:49,400 --> 00:55:52,020 Sebenarnya, argv akan cukup sepele untuk digunakan. 612 00:56:03,730 --> 00:56:06,720 unique.php. 613 00:56:08,550 --> 00:56:13,750 Hal pertama yang pertama, kita ingin memeriksa apakah kita telah melewati 1 baris perintah argumen. 614 00:56:13,750 --> 00:56:20,900 Sama seperti yang Anda harapkan argc dan argv di C, kita masih memiliki orang-orang di PHP. 615 00:56:20,900 --> 00:56:33,900 Jadi, jika ($ 2 == argc!) Maka saya tidak akan berurusan dengan mencetak pesan atau apapun. 616 00:56:33,900 --> 00:56:37,340 Saya hanya akan keluar, kode kesalahan dari 1. 617 00:56:37,340 --> 00:56:41,340 Saya juga bisa kembali 1. 618 00:56:41,340 --> 00:56:53,180 Jarang di PHP Anda di negara ini di mana kita berada di - 619 00:56:53,180 --> 00:56:57,820 Biasanya Anda berada dalam fungsi yang disebut oleh fungsi dipanggil oleh fungsi yang disebut oleh fungsi. 620 00:56:57,820 --> 00:57:02,070 Dan jika ada sesuatu yang tidak beres dan Anda hanya ingin keluar dari segala sesuatu seluruhnya, 621 00:57:02,070 --> 00:57:05,680 keluar hanya berakhir program. 622 00:57:05,680 --> 00:57:08,160 Hal ini juga ada di C. 623 00:57:08,160 --> 00:57:10,700 Jika Anda berada di sebuah fungsi dalam fungsi dalam fungsi dalam fungsi 624 00:57:10,700 --> 00:57:17,540 dan Anda ingin hanya membunuh program, Anda dapat memanggil keluar dan hanya akan keluar. 625 00:57:17,540 --> 00:57:23,120 Tapi di PHP itu bahkan lebih jarang bahwa kita berada di tingkat atas. 626 00:57:23,120 --> 00:57:26,090 Biasanya kita di dalam semacam fungsi, sehingga kita sebut keluar 627 00:57:26,090 --> 00:57:29,650 sehingga kita tidak harus kembali sampai 1 hal yang kemudian menyadari ada kesalahan 628 00:57:29,650 --> 00:57:32,270 sehingga kembali naik jika yang mengakui ada kesalahan. 629 00:57:32,270 --> 00:57:35,270 Kami tidak ingin berurusan dengan itu, jadi keluar (1); 630 00:57:35,270 --> 00:57:38,240 kembali (1), dalam hal ini akan setara. 631 00:57:38,240 --> 00:57:44,000 >> Lalu apa yang kita ingin membuka kita ingin fopen. 632 00:57:44,000 --> 00:57:46,760 Argumen akan terlihat sangat mirip. 633 00:57:46,760 --> 00:57:51,600 Kami ingin fopen ($ argv [1], dan kami ingin membukanya untuk membaca. 634 00:57:51,600 --> 00:57:55,720 Yang mengembalikan sumber daya yang kita akan menelepon f. 635 00:57:55,720 --> 00:58:02,180 Hal ini terlihat cukup mirip dengan bagaimana C melakukannya kecuali kita tidak harus mengatakan * FILE. 636 00:58:02,180 --> 00:58:06,170 Sebaliknya kita hanya mengatakan $ f. Oke. 637 00:58:06,170 --> 00:58:17,190 Sebenarnya, saya pikir ini bahkan memberi kita petunjuk untuk fungsi PHP disebut file. PHP File. 638 00:58:17,190 --> 00:58:23,990 Apa ini akan lakukan adalah membaca seluruh file ke dalam array. 639 00:58:23,990 --> 00:58:29,770 Anda bahkan tidak perlu fopen itu. Ini akan melakukannya untuk Anda. 640 00:58:37,450 --> 00:58:43,700 Jadi $ baris = file ($ argv [1]); 641 00:58:43,700 --> 00:58:49,680 Sekarang semua baris file berada di garis. Sekarang kita ingin mengurutkan baris. 642 00:58:49,680 --> 00:58:52,180 Bagaimana kita bisa mengurutkan baris? 643 00:58:52,180 --> 00:58:54,920 Kami mengurutkan baris. 644 00:58:54,920 --> 00:58:58,080 Dan sekarang kita bisa mencetaknya atau apa pun. 645 00:58:58,080 --> 00:59:05,580 Mungkin cara termudah adalah foreach ($ baris sebagai $ line) echo $ line; 646 00:59:05,580 --> 00:59:10,960 [Mahasiswa] Bukankah kita bahkan menyeberangi garis dengan referensi sesuatu ke semacam? 647 00:59:10,960 --> 00:59:28,850 Di sinilah semacam akan ditetapkan sebagai semacam fungsi (& $ array). 648 00:59:28,850 --> 00:59:32,650 Ketika Anda memanggil fungsi Anda tidak lulus dengan referensi. 649 00:59:32,650 --> 00:59:36,900 Ini fungsi yang mendefinisikan itu sebagai mengambil sebagai referensi. 650 00:59:36,900 --> 00:59:40,900 Ini sebenarnya persis apa yang salah 651 00:59:40,900 --> 00:59:46,220 ketika kita meletakkan segala sesuatu ke server kami ketika kami pergi 5,3-5,4. 652 00:59:46,220 --> 00:59:53,800 Sampai 5,4, ini masuk akal. 653 00:59:53,800 --> 00:59:58,740 Sebuah fungsi tidak mengharapkan untuk menerimanya sebagai referensi, tetapi Anda dapat lulus sebagai referensi 654 00:59:58,740 --> 01:00:02,860 jadi jika fungsi tidak terjadi mengubahnya, itu masih dimodifikasi. 655 01:00:02,860 --> 01:00:05,850 Pada 5,4, Anda tidak seharusnya melakukan hal ini. 656 01:00:05,850 --> 01:00:11,740 Jadi sekarang satu-satunya cara Anda melewati referensi adalah jika fungsi eksplisit melakukannya. 657 01:00:11,740 --> 01:00:19,840 Jika Anda tidak ingin mengubah itu, maka Anda perlu melakukan copy $ = $ garis dan copy lulus. 658 01:00:19,840 --> 01:00:24,820 Jadi sekarang baris akan dipertahankan dan copy akan berubah. 659 01:00:27,670 --> 01:00:31,460 php.unique.php. Saya mungkin telah mengacaukan sesuatu. 660 01:00:31,460 --> 01:00:33,190 Unexpected 'semacam'. 661 01:00:38,320 --> 01:00:43,850 Ada akan menjadi sesuatu yang melakukan hal ini untuk kita. 662 01:00:43,850 --> 01:00:45,820 Ini bahkan tidak ada. 663 01:00:45,820 --> 01:00:52,140 Perhatikan ketika Anda membaca manual yang argumen pertama diharapkan menjadi array 664 01:00:52,140 --> 01:00:56,490 dan itu diambil oleh referensi. 665 01:00:58,160 --> 01:01:03,540 Mengapa hal ini mengeluh kepada saya? Karena saya memiliki semacam fungsi masih di sini bahwa saya tidak ingin. 666 01:01:03,540 --> 01:01:09,210 Oke, php.unique.php. Aku tidak lulus argumen karena saya tidak punya file. 667 01:01:09,210 --> 01:01:13,560 Ini php.unique.php pada test.php. 668 01:01:13,560 --> 01:01:19,080 Berikut ini adalah test.php semua dicetak dalam urutan diurutkan bagus. 669 01:01:19,080 --> 01:01:24,600 Perhatikan bahwa perintah diurutkan agak aneh untuk sebuah file kode 670 01:01:24,600 --> 01:01:27,460 karena semua baris kosong kami akan datang pertama 671 01:01:27,460 --> 01:01:30,190 Kemudian akan datang semua dari 1 kami lekukan tingkat 672 01:01:30,190 --> 01:01:33,360 kemudian datang semua lekukan no kami. 673 01:01:33,360 --> 01:01:38,620 Ya. >> [Mahasiswa] Jadi untuk kode sumber itu tidak dikirimkan dengan referensi? 674 01:01:38,620 --> 01:01:42,240 Apakah itu umumnya lewat nilai? 675 01:01:42,240 --> 01:01:50,240 [Bowden] Ketika Anda memanggil fungsi, ia tidak pernah menentukan apakah itu dikirimkan dengan referensi. 676 01:01:50,240 --> 01:01:53,960 Ini adalah definisi fungsi yang menentukan apakah itu dikirimkan dengan referensi. 677 01:01:53,960 --> 01:01:59,450 Dan melihat definisi fungsi semacam atau hanya melihat ini, 678 01:01:59,450 --> 01:02:02,820 dibutuhkan argumen dengan referensi. 679 01:02:02,820 --> 01:02:07,160 Jadi terlepas dari apakah Anda ingin mengambilnya dengan referensi, itu tidak mengambilnya dengan referensi. 680 01:02:07,160 --> 01:02:10,200 Ini memodifikasi array di tempat. 681 01:02:10,200 --> 01:02:17,400 Ini hanya tidak diperbolehkan. Anda tidak diizinkan untuk melakukan hal ini. >> [Mahasiswa] Oh, oke. 682 01:02:17,400 --> 01:02:22,410 [Bowden] ini, semacam akan mengambil garis dengan referensi dan memodifikasinya. 683 01:02:22,410 --> 01:02:26,850 Dan lagi, jika Anda tidak ingin melakukan itu, Anda bisa membuat salinan semacam. 684 01:02:26,850 --> 01:02:35,850 Bahkan dalam kasus ini, copy sebenarnya bukan salinan baris. 685 01:02:35,850 --> 01:02:40,620 Itu hanya menunjuk pada hal yang sama sampai pertama akan dimodifikasi, 686 01:02:40,620 --> 01:02:44,430 di mana itu pertama akan mendapatkan dimodifikasi dalam fungsi semacam, 687 01:02:44,430 --> 01:02:50,940 di mana, karena itu copy-on-menulis, sekarang salinan copy yang akan dibuat. 688 01:02:57,500 --> 01:03:04,250 Anda juga dapat melakukan hal ini. Itulah tempat lain Anda dapat melihat ampersand. 689 01:03:04,250 --> 01:03:07,190 Anda melihatnya dalam loop foreach, Anda melihatnya dalam deklarasi fungsi, 690 01:03:07,190 --> 01:03:10,040 dan Anda melihat itu ketika baru saja menetapkan variabel. 691 01:03:10,040 --> 01:03:12,350 Sekarang kita telah mencapai apa-apa dengan melakukan hal ini 692 01:03:12,350 --> 01:03:15,600 karena copy dan garis secara harfiah hal yang sama. 693 01:03:15,600 --> 01:03:19,940 Anda dapat menggunakan garis dan menyalin bergantian. 694 01:03:19,940 --> 01:03:25,430 Anda dapat melakukan unset ($ copy), dan yang tidak garis diset, 695 01:03:25,430 --> 01:03:29,120 Anda hanya kehilangan referensi Anda untuk hal yang sama. 696 01:03:29,120 --> 01:03:33,440 Jadi pada titik ini, sekarang baris adalah satu-satunya cara Anda dapat mengakses baris. 697 01:03:36,450 --> 01:03:38,770 >> Pertanyaan? 698 01:03:41,000 --> 01:03:42,460 Ya. 699 01:03:42,460 --> 01:03:45,880 [Mahasiswa] Completely off topic, tapi Anda tidak harus menutup PHP dengan - >> Anda tidak. 700 01:03:45,880 --> 01:03:47,730 Oke. 701 01:03:47,730 --> 01:03:53,790 [Bowden] Aku akan pergi sejauh mengatakan itu praktik buruk untuk menutupnya. 702 01:03:53,790 --> 01:03:57,580 Itu mungkin berlebihan, terutama dalam naskah, 703 01:03:57,580 --> 01:04:03,740 tapi mari kita lihat apa yang terjadi jika saya melakukan ini. 704 01:04:03,740 --> 01:04:08,890 Itu tidak melakukan apa pun. Bagaimana jika saya ingin - [sighs] 705 01:04:13,870 --> 01:04:16,960 Saya harus lulus argumen. 706 01:04:19,000 --> 01:04:22,050 Tembak. Aku menelepon salah. 707 01:04:24,340 --> 01:04:28,310 Jadi php.unique.php dengan argumen. 708 01:04:28,310 --> 01:04:30,980 Sekarang aku bahkan tidak perlu ini. 709 01:04:34,520 --> 01:04:37,740 Saya akan menambahkan sebuah argumen yang valid. 710 01:04:37,740 --> 01:04:42,050 Ini dicetak apapun itu pencetakan. 711 01:04:45,260 --> 01:04:50,080 Saya mencetak copy dan copy tidak ada. Jadi garis. 712 01:04:53,650 --> 01:04:58,270 Ini dicetak segalanya, dan kemudian melihat semua sampah ini di sini, 713 01:04:58,270 --> 01:05:06,690 karena dalam hal PHP yang berada di luar tag PHP 714 01:05:06,690 --> 01:05:09,520 hanya akan dicetak harfiah. 715 01:05:09,520 --> 01:05:18,050 Itulah sebabnya HTML, hal ini sangat baik yang bisa saya lakukan div bla, bla, bla kelas atau apa pun, 716 01:05:18,050 --> 01:05:25,140 bla, bla, bla, dan kemudian melakukan beberapa kode PHP dan kemudian melakukan div akhir. 717 01:05:25,140 --> 01:05:36,460 Dan sekarang ini saya mendapatkan mencetak div bagus saya sampai atas, segala sesuatu yang PHP dicetak, div di bawah. 718 01:05:36,460 --> 01:05:43,510 Bencana ketika sesuatu seperti ini terjadi, yang cukup umum, 719 01:05:43,510 --> 01:05:47,930 hanya newline tersesat di bagian bawah file. 720 01:05:47,930 --> 01:05:50,940 Anda tidak akan berpikir itu akan menjadi yang besar kesepakatan 721 01:05:50,940 --> 01:05:58,660 sampai Anda mempertimbangkan kenyataan bahwa dengan browser - 722 01:05:58,660 --> 01:06:03,880 >> Bagaimana pengalihan kerja atau pada dasarnya setiap pekerjaan header, 723 01:06:03,880 --> 01:06:07,980 ketika Anda membuat koneksi ke sebuah situs web dan mengirimkan kembali semua header dan hal 724 01:06:07,980 --> 01:06:12,020 seperti respon 200 atau respon redirect atau apa pun, 725 01:06:12,020 --> 01:06:18,230 header hanya berlaku sampai byte pertama data dikirim. 726 01:06:18,230 --> 01:06:23,140 Anda dapat mengarahkan ribuan kali, namun segera setelah byte pertama data dikirim 727 01:06:23,140 --> 01:06:26,120 Anda tidak seharusnya redirect lagi. 728 01:06:26,120 --> 01:06:31,860 >> Jika Anda memiliki baris baru nyasar di bagian bawah file 729 01:06:31,860 --> 01:06:37,260 dan mari kita mengatakan bahwa Anda menggunakan fungsi ini dan kemudian Anda ingin - 730 01:06:41,580 --> 01:06:52,870 Mari kita mengatakan itu file lain yang index.php dan Anda require_once sesuatu - 731 01:06:52,870 --> 01:06:56,920 Saya tidak bisa memikirkan contoh yang baik dari itu. 732 01:06:56,920 --> 01:07:04,740 Masalah ini terjadi ketika baris ini di bagian bawah akan bergema. 733 01:07:04,740 --> 01:07:08,660 Anda tidak ingin apa-apa telah bergema belum. 734 01:07:10,820 --> 01:07:15,700 Meskipun Anda tidak berniat untuk mendapatkan sesuatu yang menggema, sesuatu yang tidak bisa bergema 735 01:07:15,700 --> 01:07:17,990 dan jadi sekarang Anda tidak seharusnya untuk mengirim header lagi 736 01:07:17,990 --> 01:07:20,030 dan Anda akan mendapatkan keluhan. 737 01:07:22,170 --> 01:07:24,420 Anda hanya tidak membutuhkan orang tag penutup. 738 01:07:24,420 --> 01:07:27,420 Jika Anda berencana untuk melakukan sesuatu dengan HTML - 739 01:07:27,420 --> 01:07:30,490 dan itu sangat masuk akal untuk melakukan apapun di sini div 740 01:07:30,490 --> 01:07:39,450 dan kemudian pada titik ini Anda bisa atau Anda tidak bisa memasukkan mereka. 741 01:07:39,450 --> 01:07:41,590 Itu tidak terlalu penting. 742 01:07:41,590 --> 01:07:45,450 Namun dalam skrip PHP itu jarang untuk menutupnya. 743 01:07:45,450 --> 01:07:50,400 Ketika semuanya PHP, benar-benar semuanya, 744 01:07:50,400 --> 01:07:55,460 Anda tidak benar-benar perlu untuk menutupnya / Anda tidak harus menutupnya. 745 01:08:02,030 --> 01:08:05,720 >> Berurusan dengan string jauh lebih bagus daripada di C. 746 01:08:05,720 --> 01:08:09,470 Dalam PHP Anda dapat menentukan string dengan tanda kutip tunggal atau ganda. 747 01:08:09,470 --> 01:08:12,820 Dengan tanda kutip tunggal Anda tidak dapat menggunakan "melarikan diri" urutan. 748 01:08:12,820 --> 01:08:17,640 Terus-menerus melarikan diri, bla, bla, bla. 749 01:08:19,920 --> 01:08:24,010 Jadi printf sangat langka di PHP. 750 01:08:24,010 --> 01:08:32,290 Saya kira saya akan menggunakan printf jika saya ingin melakukan hal semacam - di pset 5 Anda menggunakan sprintf atau apa pun. 751 01:08:32,290 --> 01:08:36,060 Tapi Anda ingin melakukan 001.jpg 002.jpg dan. 752 01:08:36,060 --> 01:08:40,300 Jadi untuk hal semacam itu di mana aku benar-benar ingin memformat teks yang saya akan menggunakan printf. 753 01:08:40,300 --> 01:08:44,689 Tapi kalau tidak aku hanya akan menggunakan string concatenation. 754 01:08:44,689 --> 01:08:47,000 Saya tidak pernah benar-benar menggunakan printf. 755 01:08:49,229 --> 01:09:00,170 Kami hanya membedakan antara rincian tanda kutip tunggal dan tanda kutip ganda. 756 01:09:00,170 --> 01:09:07,490 Perbedaan terbesar adalah bahwa tanda kutip tunggal, maka akan dicetak harfiah. 757 01:09:07,490 --> 01:09:15,390 Tidak ada tipe data char di PHP, tidak seperti C, jadi ini setara dengan ini. 758 01:09:15,390 --> 01:09:17,970 Mereka berdua string. 759 01:09:17,970 --> 01:09:29,180 Dan hal yang menyenangkan tentang string kutip tunggal adalah saya bisa mengatakan 'hello world! " bla, bla, bla, 760 01:09:29,180 --> 01:09:33,340 $ $ Wooo. 761 01:09:33,340 --> 01:09:38,260 Apa yang terjadi ketika saya mencetak ini akan mencetak secara harfiah. 762 01:09:38,260 --> 01:09:40,680 Mari kita menyingkirkan semua barang-barang kami. 763 01:09:40,680 --> 01:09:44,700 Jadi echo $ str1; 764 01:09:48,569 --> 01:09:56,570 Ini benar-benar dicetak semua hal-hal: tanda-tanda dolar, 765 01:09:56,570 --> 01:09:58,770 backslash n, yang Anda akan berpikir akan menjadi baris - 766 01:09:58,770 --> 01:10:01,500 semua hal-hal mencetak harfiah. 767 01:10:01,500 --> 01:10:05,650 Satu-satunya hal yang Anda butuhkan untuk melarikan diri adalah tanda kutip tunggal 768 01:10:05,650 --> 01:10:09,470 karena kalau tidak akan berpikir itu menutup tanda kutip tunggal. 769 01:10:09,470 --> 01:10:15,050 Ganda kutipan, sama sekali berbeda. 770 01:10:20,300 --> 01:10:25,870 Kita sudah melihat sintaks yang cluing kita pada apa yang akan sangat salah. 771 01:10:25,870 --> 01:10:36,190 php.unique. Undefined variable: wooo karena ini dianggap sebagai variabel yang disebut wooo. 772 01:10:36,190 --> 01:10:42,400 Tanda kutip ganda membiarkan Anda memasukkan variabel ke - 773 01:10:42,400 --> 01:10:52,730 Katakanlah $ name = "Rob"; 774 01:10:52,730 --> 01:10:58,020 Jadi echo "Hai, nama saya $ name!!"; 775 01:10:58,020 --> 01:11:09,260 Ia mengakui ini sebagai variabel. 776 01:11:09,260 --> 01:11:21,210 Ketika saya menjalankan itu - dan saya akan memasukkan baris baru - Hai, nama saya Rob! dan hello world!! 777 01:11:21,210 --> 01:11:24,910 Ini karena saya tidak pernah dihapus pencetakan wooo atas. 778 01:11:24,910 --> 01:11:30,020 Ada 1 langkah lebih lanjut yang dapat Anda lakukan. 779 01:11:30,020 --> 01:11:39,250 $ Array = [1, 2, 3]; 780 01:11:39,250 --> 01:11:43,270 Bagaimana jika saya ingin mencetak indeks pertama dari array? 781 01:11:43,270 --> 01:11:45,150 Anda melakukan $ array [0]. 782 01:11:45,150 --> 01:11:49,280 The sintaks adalah petunjuk. Apa ini akan lakukan? 783 01:11:52,320 --> 01:11:54,510 php.unique. 784 01:11:54,510 --> 01:11:59,860 Hai, nama saya adalah 1! yang tidak apa yang saya inginkan. 785 01:11:59,860 --> 01:12:05,050 Sintaks berbohong kepada saya. 786 01:12:05,050 --> 01:12:13,020 Mari kita coba 'a' -> 1, 'b' -> 2. 787 01:12:18,450 --> 01:12:21,440 Itulah bagaimana saya harus menuliskannya. 788 01:12:26,350 --> 01:12:32,160 Tak terduga tunggal kutipan (T_ENCAPSED bla, bla, bla, bla, bla). 789 01:12:32,160 --> 01:12:41,780 Idenya adalah bahwa itu tidak mengakui ini sebagai bagian dari array. 790 01:12:41,780 --> 01:12:46,620 Ini tidak mengakui ini sebagai array diindeks oleh surat. 791 01:12:46,620 --> 01:12:49,870 Anda ingin melakukan itu dikelilingi oleh kurung kurawal, 792 01:12:49,870 --> 01:12:54,730 dan sekarang apa yang ada di tanda kurung kurawal ini akan diinterpolasi, 793 01:12:54,730 --> 01:13:00,340 yang merupakan kata yang kita gunakan untuk memasukkan variabel-variabel ajaib ke tempat yang tepat. 794 01:13:00,340 --> 01:13:04,280 Sekarang melakukan hal ini, php.unique, dan Hi, nama saya adalah 1! seperti yang diharapkan 795 01:13:04,280 --> 01:13:07,720 atau Hi, nama saya Rob! 796 01:13:14,110 --> 01:13:23,130 Satu hal yang agak baik tentang tanda kutip tunggal adalah bahwa - 797 01:13:23,130 --> 01:13:28,480 Ada beberapa biaya untuk interpolasi. 798 01:13:30,520 --> 01:13:35,100 Jika Anda menggunakan tanda kutip ganda, penafsir harus pergi ke string ini, 799 01:13:35,100 --> 01:13:41,500 memastikan bahwa, "Oh, inilah variabel Sekarang aku harus pergi mendapatkan variabel itu dan memasukkannya di sini.." 800 01:13:41,500 --> 01:13:48,930 Bahkan jika Anda tidak menggunakan variabel, 801 01:13:48,930 --> 01:13:52,220 tidak ada dalam kutipan ganda perlu diinterpolasi, 802 01:13:52,220 --> 01:13:56,800 tetapi masih akan lebih lambat karena harus pergi ke tanda kutip ganda 803 01:13:56,800 --> 01:14:00,130 mencari hal-hal yang perlu diinterpolasi. 804 01:14:00,130 --> 01:14:05,360 Jadi tanda kutip tunggal dapat menjadi sedikit lebih cepat jika tidak ada yang perlu diinterpolasi, 805 01:14:05,360 --> 01:14:15,650 dan saya cenderung bahkan menggunakan tanda kutip tunggal untuk, 'Hai, nama saya'. $ Array ['a'] pula. 806 01:14:15,650 --> 01:14:20,430 Itu akan menjadi setara dengan apa yang kita miliki sebelumnya. 807 01:14:24,840 --> 01:14:28,440 Tapi itu masalah preferensi. 808 01:14:28,440 --> 01:14:34,750 Jika Anda menggunakan PHP, Anda mungkin tidak peduli tentang perbedaan kecepatan. 809 01:14:34,750 --> 01:14:39,480 Ada tidak cukup untuk alasan mereka untuk memulai dengan. 810 01:14:39,480 --> 01:14:43,030 >> Setiap pertanyaan terakhir? 811 01:14:47,430 --> 01:14:51,710 >> Kami benar-benar bahkan tidak mendapatkan melalui semua itu, tapi hal ini membosankan. 812 01:14:51,710 --> 01:14:59,080 Hal terakhir yang jenis yang baik di PHP adalah ketika Anda sedang berhadapan dengan HTML, 813 01:14:59,080 --> 01:15:06,450 Anda akan menggunakannya sedikit, sehingga sintaks pintas bagus untuk mencetak variabel. 814 01:15:32,400 --> 01:15:36,730 Tanpa menempatkan PHP di sini, ini disebut tag singkat. 815 01:15:36,730 --> 01:15:44,330 Secara resmi sebagai PHP 5.4, hal ini sudah ditinggalkan. 816 01:15:44,330 --> 01:15:48,640 Anda disarankan untuk menempatkan php. 817 01:15:48,640 --> 01:15:55,770 Hal ini masih didukung, tag begitu singkat dengan <= yang masih baik-baik saja?. 818 01:15:55,770 --> 01:16:02,480 Hal ini secara default didukung, sehingga Anda dapat menggunakan ini seperti yang Anda inginkan, dan mereka cukup nyaman. 819 01:16:02,480 --> 01:16:05,700 >> Ada pertanyaan? 820 01:16:07,780 --> 01:16:09,270 Baiklah. 821 01:16:10,840 --> 01:16:13,800 >> Tetap berkelas, San Diego. 822 01:16:13,800 --> 01:16:16,070 [Terkekeh] 823 01:16:18,620 --> 01:16:22,660 Bye. [Tertawa] 824 01:16:24,350 --> 01:16:28,470 [Tepuk tangan] [tertawa] 825 01:22:46,460 --> 01:22:49,460 >> [CS50.TV]