DAVID MALAN: Baiklah. Ini adalah CS50, dan ini adalah akhir minggu sembilan. Sudah badai yang lebih beberapa hari lepas. Dan masalah ditetapkan tujuh, jika anda lutut jauh ke dalam ia, menyedari ada cukup sedikit baru yang di sana. Tetapi mari kita lihat jika kita tidak boleh sekeping semua bersama-sama di sini secara ringkas sebelum itu tersasar dari dalam lagi arah lain dan seeing di mana lagi kita boleh pergi. Jadi setakat ini, kita telah berbincang mengenai HTML. Kami telah berbincang mengenai CSS. Kami telah berbincang mengenai PHP. Anda telah mula mengalami SQL. Hari ini, kita akan bercakap sedikit kira-kira JavaScript. Tetapi bagaimana semua ini berbeza bahasa patut bersama-sama? Oleh itu, kita bercakap minggu lepas mengenai tanggapan yang mempunyai pelayan. Jadi mari kita hanya menarik persegi panjang ini sebagai pelayan web di sini. Dan pelayan web berfungsi pasti fail. Dan beberapa fail-fail boleh fail HTML. Jadi salah satu perkara-perkara yang pelayan web boleh meludah keluar mungkin fail yang kita hanya akan menarik seperti ini mengandungi beberapa HTML. Jadi dari segi orang biasa itu, apa yang adakah HTML membiarkan anda lakukan? PENONTON: Page kelihatan bagus. DAVID MALAN: OK, membuat halaman yang kelihatan bagus, walaupun saya rasa saya telah terbukti yang sebaliknya. Jadi HTML tidak membiarkan anda meletakkan muka surat struktur, dan ia membolehkan anda untuk jenis estetika menandakan sehingga halaman, menandakan sehingga kandungan statik, supaya anda boleh melihatnya dengan pelayar web. Tetapi itu kunci. Ia kandungan statik. Anda menulisnya, anda menyimpannya, dan kemudian anda hantar. Dan pelayan web kemudian berfungsi ia sehingga pengunjung anda. Tetapi kita menyesuaikan dgn mode perkara menggunakan yang berbeza bahasa sama sekali. Kami mula menggunakan atribut gaya pada tag tertentu. Dan sifat gaya marilah kita ditetapkan perkara seperti saiz font dan warna. Dan anda mungkin telah mula menemui, atau anda tidak lama lagi akan untuk akhir projek-projek berpotensi, namun lain ciri-ciri yang anda boleh gunakan dalam CSS. Dan sebagainya dari segi orang biasa itu, apa yang benar-benar maka tidak CSS lakukan? Mereka hanya contoh daripadanya. Apa yang membolehkan anda melakukan itu HTML nampaknya tidak daripada apa yang kita telah melihat setakat ini? PENONTON: Tentukan gaya sendiri. DAVID MALAN: Tentukan gaya oleh diri sendiri. Jadi menentukan perkara seperti kelas anda mungkin dihadapi, atau unik mengenal pasti nod dalam dokumen supaya bahawa anda boleh menyesuaikan dgn mode mereka. Tetapi lebih khusus, saya katakan bahawa CSS benar-benar membolehkan anda mengambil perkara-perkara yang sambungan terakhir dan membolehkan anda untuk menentukan banyak lebih tepat estetika, manakala HTML sebahagian besar membolehkan anda struktur halaman anda. Dan walaupun terdapat beberapa mungkir, seperti kita melihat tag untuk tag menuju, yang kurang bercakap membuat perkara yang besar dan berani. Itulah definisi cantik generik tag - besar dan berani. Apa saiz font tu? Apa warna itu? Bagaimana berani itu? Dan CSS membolehkan anda lebih halus perkara lagu seperti itu. Serta susun atur, kerana beberapa daripada anda telah lihat. Dan terus-terang, CSS adalah sedikit bahasa tidak kemas. Ia sangat berkuasa dalam bahawa anda boleh membuat secara literal apa-apa laman web yang anda telah dilihat di web hari ini dengan itu, tetapi ia adalah jenis sakit di leher. Dan sebahagian dari kamu telah terbentur kepala anda dinding sudah adil berbuat sesuatu yang bodoh seperti pusat menu pada masalah ditetapkan tujuh jika anda mendapat ke ketika itu sudah. Tetapi sedar, perkara-perkara mendapatkan lebih mudah dari masa ke masa. Anda mula notis corak. Dan sekali lagi, Google akan menjadi rakan anda untuk pelbagai cara di mana anda boleh menyelesaikan pelbagai masalah. Dan saya berani mengatakan dengan CSS, HTML dan lebih secara amnya, anda boleh menyelesaikan masalah dalam banyak cara yang lebih, semua yang mungkin sangat baik betul, daripada yang anda boleh dalam sesuatu seperti C, walaupun kini PHP, atau JavaScript. Terdapat hanya banyak berbeza cara-cara untuk meletakkan perkara-perkara. Tetapi ini mula mendapat kemas, kita kata. Hanya jenis percampuran HTML anda dan CSS anda dengan sifat gaya itu sedikit ceroboh. Dan supaya kita sebaliknya berkata, jenis secara abstrak bercakap, yang anda perlu sekurang-kurangnya mula faktor keluar CSS anda mungkin. Tidak gaya anda sifat, tetapi sekurang-kurangnya menggunakan tag gaya di dalam apa sebahagian daripada laman web? PENONTON: Ketua. DAVID MALAN: Dalam kepala. Sehingga kini, kami hanya mempunyai hak milik ke atas sana, tetapi anda juga boleh menambah gaya tag, dan anda boleh meletakkan CSS anda secara kasar bercakap ke arah bahagian atas halaman. Tetapi kita mengambil perkara satu langkah ke hadapan dan kami kira bahawa daripada lebih ke dalam fail yang berasingan. Dan sebagainya ini dua fail adalah entah bagaimana kini dihubungkan. Dan sesungguhnya ia adalah tag yang melakukan itu. Dan apa yang salah satu yang menyeluruh motivasi untuk memfaktorkan CSS kami lebih-lebih? PENONTON: gunapakai semula. DAVID MALAN: gunapakai semula. Betul? Anda mungkin telah melihat dalam p yang ditetapkan tujuh sudah bahawa banyak halaman, yang Laman membeli, halaman jualan, yang halaman portfolio, mungkin berstruktur agak sama. Ada logo kewangan CS50 di bahagian atas melainkan jika anda telah memutuskan untuk mengubahnya. Ada nota kaki di bawah laman. Dan CSS membolehkan anda kemudian kepada faktor keluar ke dalam fail yang berasingan supaya jika anda mahu menukar sesuatu yang global seluruh seluruh laman web anda, anda boleh benar-benar hanya mengubahnya di satu tempat. Tetapi ada harga yang anda bayar berpotensi dengan mempunyai kira keluar CSS dari fail HTML saya ke dalam yang berasingan memfailkan rujukan ia dengan tag, yang kita lihat pada hari Isnin. Apa yang mungkin menjadi kekangan yang timbul ini? Memikirkan kembali minggu lalu untuk apabila kita bercakap tentang HTTP dan TCP / IP dan bagaimana internet berfungsi. Sesuatu di sini? PENONTON: Ia mengambil lebih banyak masa. DAVID MALAN: Ia mengambil lebih banyak masa. Mengapa? PENONTON: [didengar]. DAVID MALAN: Yeah. Jadi ia boleh dikatakan mengambil masa yang agak lebih banyak masa. Kerana satu, CSS adalah jelas tidak dalam fail yang sama. Jadi sekarang anda mempunyai untuk tidak membuat satu, tetapi dua permintaan. Dan setiap orang-orang permintaan seperti yang kita lihat dalam Chrome dalam apa yang dikenali sebagai Inspektor, dan kita melihat tekan rangkaian, setiap daripada fail-fail memerlukan seseorang HTTP permintaan, yang kita lihat mengambil beberapa jumlah masa. Sekarang, mungkin ia tidak banyak. Mungkin ia hanya 20 milisaat. Mungkin ia 200 milisaat. Tetapi berfikir tentang halaman seperti Facebook, atau CNN atau Google, yang jauh lebih besar daripada contoh-contoh yang kita telah melihat setakat ini. Halaman tersebut mungkin mempunyai berpuluh-puluh gambar, setiap yang mungkin memerlukan Muat turun fail. Jadi perkara-perkara boleh berpotensi mula perlahan. Dan terutama pada hari ini apabila kita semua mempunyai telefon bimbit dalam poket kita dan sambungan internet perlahan, perlu menunggu beberapa lagi milisaat, beberapa lebih milisaat untuk tambahan fail sebenarnya boleh lambat. Latency ialah perkataan yang menerangkan jenis menunggu yang anda mempunyai yang anda mengalami semasa menunggu beberapa keping maklumat. Tetapi ada satu terbalik. Jadi bukan semua jenis yang - ia sebenarnya adalah sedikit mundur maju di sini. Kelemahan sekarang, tetapi apa yang pelayar boleh melakukan jika mereka bijak untuk mengelakkan perlu meminta styles.css yang sama memfailkan lagi boleh untuk melakukan apa? Cache ia. Jadi caching - C-A-C-H-E - secara amnya bermakna di sini hanya untuk menyelamatkan memfailkan anda minta kali pertama, dan kemudian memeriksa cache anda untuk itu. Semak anda jenis bekas penyimpanan, dan jika anda sudah mempunyai salinan styles.css, walaupun beberapa yang lain halaman dalam p-set, atau mana-mana laman web, meminta sekali lagi, hanya untuk memberi pengguna bahawa salinan cache sama. Jangan mengganggu orang yang memintanya. Kelemahan sana, walaupun, sebagai sebahagian dari kamu telah tersandung dalam p-set. Jika anda membuat perubahan pada pelayan dan anda kembali ke penyemak imbas dan anda tambah nilai, kadang-kadang pelayar tidak anda nikmat dan tidak mengganggu memuat turun semula fail styles.css anda kerana, datang, apakah kemungkinan yang gaya yang menggunakan Facebook akan menukar jam ke jam atau hari ke hari? Ia agak rendah. Mereka mungkin berubah dari masa ke masa, tetapi tidak dengan minit atau mengikut jam. Jadi helah, hanya FYI ketika melakukan web pembangunan, sering tahan beralih utama misalnya dan kemudian klik menambah nilai dalam pelayar anda, dan kehendak yang biasanya memberitahu reload pelayar segala-galanya, walaupun anda sudah mempunyai ia dalam cache. Jadi sekali lagi, upsides dan kelemahan, tetapi semua mereka akhirnya mereka bentuk keputusan. Jadi sekarang, kami tidak hanya berakhir cerita di sini. Jika saya kini kembali dan kembali dan belakang dan kembali, kami mula memperkenalkan bukan sahaja HTML, tetapi PHP. Jadi dari segi orang biasa itu, apa yang adakah PHP marilah kita lakukan? PENONTON: [didengar]. DAVID MALAN: Apa itu? PENONTON: Memperkenalkan logik kepada kod. DAVID MALAN: Ya, memperkenalkan logik ke dalam kod anda. Jadi ia adalah satu bahasa pengaturcaraan benar dengan gelung, dan pembolehubah, dan fungsi, dan syarat-syarat, dan semua perkara yang kita telah menggunakan perjalanan pulang apabila sejak awal. Dan PHP, kita telah melihat, boleh digunakan sama ada pada baris arahan - ia tidak perlu mempunyai apa-apa kaitan dengan web, walaupun itulah benar-benar asal-usul dan apa yang cenderung pandai dan kondusif untuk - tetapi anda boleh menggunakan PHP semata-mata dengan sifat daripada fakta bahawa ia mempunyai print () fungsi, dan fungsi () printf, atau gema () fungsi. Ada tandan cara anda boleh mencetak teks dengan PHP. Oleh itu, anda boleh menggunakan pengaturcaraan ini bahasa untuk output tepat apa yang kita bercakap tentang sebelum ini. Anda dinamik boleh menjana HTML anda. Mungkin tidak semua itu. Mungkin anda keras perkara kod, seperti header, dan footer, dan logo, dan lembaran gaya anda, dan semua itu. Tetapi sesuatu seperti p-set tujuh, mana anda hendak pergi memanipulasi saham dan menunjukkan portfolio pengguna, yang merupakan akan berubah secara dinamik, anda boleh pasti menggunakan PHP dan logik ia memberi anda sebagai bahasa pengaturcaraan untuk output secara dinamik subset halaman. Oleh itu, apabila anda bercakap tentang laman web dinamik, atau pengaturcaraan web, itu apa yang anda benar-benar bercakap tentang. Menggunakan bahasa seperti PHP, atau perkara-perkara dipanggil Python, atau Ruby, atau Java, atau namun bahasa-bahasa lain, untuk query pangkalan data kerap, atau pelayan yang lain, dan kemudian meludah keluar dinamik HTML. Sekarang keputusan akhir, sebagai diketepikan, adalah bahawa HTML kebanyakan laman web, termasuk p yang ditetapkan tujuh anda, mungkin akan menjadi kucar-kacir besar jika anda melihat sumber kod dalam pelayar. Itu bukan satu masalah besar. Pada ketika ini, apabila kita mengambil berat tentang gaya, kami mengambil berat tentang barangan yang anda menulis. Kami tidak akan mengambil berat tentang barangan yang bahawa apa yang output kod anda. Jadi jangan bimbang tentang lekukan di sini jika ia PHP itulah sebenarnya keluarkan barangan. Lagipun, pelayar tidak akan peduli, dan manusia tidak akan mencari pada sumber juga. Kami kakitangan, misalnya, akan mencari di PHP anda. Jadi biarlah saya memberi satu contoh yang cepat sekarang mengapa lagi ini mungkin berguna. Jadi terus-terang, saya tidak ingat yang lalu masa saya menggunakan C untuk menyelesaikan masalah dalam di dunia sebenar. Ia mungkin di sekolah siswazah apabila Saya perlu menggunakan bahasa yang adalah tahap yang agak rendah dan memberikan saya peluang untuk melakukan sesuatu yang sangat tinggi melaksanakan untuk benar-benar menyimpan sebagai CPU kitaran yang saya dapat, dalam sebahagian besar kerana saya telah menggunakan set data yang besar, dan tiap-tiap kitaran CPU dikira. Dan terus-terang, walaupun dalam perkara-perkara seperti telefon hari ini dan peranti lain di mana anda tidak cukup mempunyai sebanyak memori dan anda tidak cukup mempunyai sebagai banyak CPU, dengan menggunakan bahasa yang lebih cepat masih menarik. Tetapi dalam dunia sebenar, apabila anda hanya mahu membuang beberapa program bersama-sama untuk menganalisis beberapa data, atau anda telah dikumpul sejumlah besar pendaftaran untuk beberapa kumpulan pelajar dan anda ingin sangat cepat mengautomasikan menghantar e-mel satu demi satu untuk setiap seorang daripada mereka pendaftar, anda akan mencapai bahasa peringkat lebih tinggi daripada C jadi untuk bercakap. Sesuatu seperti PHP atau Python, atau Ruby, atau setengah dozen orang lain yang wujud pada hari ini. Tetapi ketiga-tiga mungkin yang paling bergaya sekarang. Dan apa ini bermakna bahawa anda boleh membuka sebuah editor teks seperti gedit atau paling apa-apa lagi dan kemudian hanya mula menulis kod tanpa perlu bimbang kira-kira menyusun, tanpa perlu benar-benar bimbang tentang pengurusan ingatan, dengan mengingati walaupun yang sedikit sloppiness akhirnya akan datang kembali menggigit anda jika set data mendapat lebih besar atau masalah yang mendapat besar. Tetapi apa yang dimaksudkan untuk kami adalah seperti berikut. Biar saya pergi ke hadapan dan menjalankan buku ejaan masalah set enam. Jadi ini adalah pelaksanaan berasaskan indone-saya yang saya digunakan pada besar papan di mana saya tidak dilakukan dengan baik. Kami akan kembali dalam masa seminggu dan semula mereka yang tidak berakhir di atas yang lembaga besar di kuliah terakhir kami. Tetapi untuk sekarang, biarlah saya teruskan dan hanya menjalankan penyelesaian saya dalam teks, dan kami akan melakukan Bible King James, dan di sini kita pergi. Jadi mereka adalah semua kononnya kata yang salah Mengeja daripada Bible King James. Dan pelaksanaan saya mengambil setengah kedua dalam jumlah. Jadi tidak terlalu buruk kepada ini komputer tertentu. Tetapi memikirkan berapa banyak kod saya untuk menulis. Fikirkan berapa banyak kod anda terpaksa menulis. Fikirkan berapa banyak masa yang anda gunakan dalam D-dewan atau asrama anda atau di mana sahaja sebenarnya pengekodan sehingga penyelesaian itu. Nah, jika saya benar-benar mempunyai tahap yang lebih tinggi bahasa seperti PHP, ambil perhatian apa yang boleh saya lakukan di sini. Pertama, katakan bahawa ini adalah sebaliknya kod pengedaran anda. Fail ini dipanggil buku ejaan. Ia boleh didapati sebagai sebahagian daripada hari ini kod pengedaran. Dan saya akan melambai tangan saya di kebanyakan butir-butir, tetapi ini sebenarnya satu contoh yang menarik tentang bagaimana anda mungkin pelabuhan bahasa seperti C kepada PHP. Saya benar-benar membuka dua tingkap teks, satu dengan versi C saya speller.c, dan saya hanya mula menterjemahkannya dalam saya menuju ke PHP dan menaip dengan menggunakan fungsi bersamaan terdekat. Jadi beberapa perkara-perkara ini adalah berbeza. Kami melihat masa lalu bahawa PHP tidak menggunakan termasuk di agak cara yang sama. Ia menggunakan memerlukan biasanya, walaupun termasuk tidak ada. Tentukan adalah sedikit berbeza daripada # Menentukan dalam C, tetapi itu bagaimana kita membuat satu pemalar. $ Argc ternyata wujud dalam PHP, jadi kami telah melihat bahawa sebelum. Ini hanya pembolehubah, semua yang bermula dengan tanda-tanda dolar. Ingat ini hanya sekumpulan terapung mata. Jadi cerita panjang pendek, anda dialu-alukan untuk flip melalui ini jika ingin tahu, ini adalah hampir penukaran barisan untuk talian daripada Versi C speller.c ke dalam PHP. Dan anda boleh melakukan ini sekali lagi untuk setengah dozen bahasa lain. Tetapi apa yang menarik ialah ini. Atau apa yang terus-terang mengecewakan adalah ini. Biar saya pergi ke hadapan dan menaip mengenai dictionary.php, dan tuntutan bahawa saya akan pergi ke hadapan dan melaksanakan semula masalah set enam di sini. Jadi mari kita mencadangkan pertama bahawa dalam ini fail, yang akan dilaksanakan dalam PHP, jadi biarlah saya membuka tag saya seperti itu. Izinkan saya memberikan diri saya global berubah-ubah, $ saiz mendapat sifar. Dan saya akan memberi diri saya jadual hash. Saya akan menggunakan jadual hash untuk perkara ini. Bagaimana saya mengisytiharkan jadual hash dalam PHP? Selesai. OK. Kurungan itu, hukumkanlah kurungan rapat mewakili apa dalam PHP, seperti yang kita lihat? Pelbagai, tetapi pelbagai yang boleh menjadi pelbagai bersekutu. Pelbagai bersekutu adalah struktur data yang mengaitkan kunci dengan nilai. Sekarang dalam yang paling mudah berangka diindeks pelbagai, mereka kunci adalah apa? Sifar, satu, dua, tiga, bukan? Sekolah lama barangan kembali dari C. Tetapi ia boleh juga menjadi tali seperti foo, dan bar, atau maxwell, atau mana-mana tali tersebut. Jadi saya boleh memanfaatkan yang dalam hanya seketika. Biar saya pergi ke hadapan dan mengisytiharkan fungsi seperti - mari kita buat beban () pertama. Jadi beban fungsi (). Dan PHP adalah sedikit berbeza kerana anda benar-benar taip fungsi, tetapi anda tidak menaip jenis pulangan. Saya akan teruskan dan mengatakan bahawa fungsi beban () perlu mengambil dalam Hujah $ kamus, hanya seperti versi C lakukan. Saya melakukan yang dari ingatan. Dan saya mencadangkan bahawa saya akan melakukan ini. Saya hanya akan melakukan foreach. Saya akan memanggil fungsi yang dipanggil fail (), lulus dalam nama yang memfailkan, yang merupakan pembolehubah $ Kamus sebagai $ perkataan. Dan kemudian di dalam saya untuk gelung di sini, saya akan pergi ke hadapan dan menyimpan dalam saya $ $ Jadual yang perkataan mendapat benar. Selesai. Oh, tunggu. Selesai. OK. Itulah beban fungsi () berkata dalam PHP. Sekarang, mengapa yang bekerja? Dan saya jenis menipu di sini. Jadi, satu, foreach kita saw masa secara ringkas lepas. Ia hanya bermakna bahawa anda boleh melelar lebih pelbagai tanpa mengganggu dengan i dan n dan plus plus, dan semua itu. Kamus sudah tentu nama fail, sesuatu seperti besar atau kecil, kedua-dua kamus kami menggunakan masa lepas. Fail adalah fungsi yang membuka teks fail, membaca dalam baris demi baris, dan tangan anda menyokong pelbagai besar, setiap unsur-unsur yang merupakan line dari fail itu. Jadi, itu gabungan fopen, dan fread, dan semasa gelung, dan fclose, dan semua itu. Akhir sekali, sebagai perkataan hanya bermakna itulah ubah saya akan mempunyai akses kepada pada setiap lelaran dalam gelung ini. Jadi ringkasnya, pelapik satu ini di sini bermaksud membuka fail yang namanya dalam kamus, pembolehubah, melelar lebih ia baris demi baris, dan setiap kali anda mendapat garis, simpan dalam satu perkataan ubah dipanggil, dan kemudian melakukan sesuatu dengan perkataan. Apa yang saya mahu lakukan? Saya mahu meletakkan perkataan ke dalam jadual hash saya. Well, saya boleh meletakkan sesuatu di dalam saya hash jadual seperti dalam C menggunakan kurungan persegi. Ini adalah nama untuk jadual hash saya. Saya akan indeks ke dalam hash yang jadual di lokasi ini. Jadi tidak braket sifar, tidak braket satu. Kurungan quote unquote sesuatu, apa sahaja perkataan yang. Dan seperti yang anda mungkin ada di anda indone kerja jadual hash, anda hanya kedai berkesan yang Boolean, secara tersirat atau dengan jelas. Selesai. Saya menyimpan nilai sebenar. Sekarang ada beberapa perkara Saya memotong sudut di sini. Secara teknikal, ada akan menjadi baris baru menjengkelkan, / n, pada akhir setiap kata-kata. Jadi saya mungkin perlu memanggil fungsi PHP dipanggil cop (), yang akan agak literal cop yang luar. Dan saya benar-benar perlu melakukan satu perkara yang lain. Saya sepatutnya kenaikan saiz pada setiap lelaran, jadi saya mengesan global dengan apa yang ada. Dan terus-terang, dan ini adalah salah satu daripada aspek stupider PHP, jika anda menggunakan pembolehubah global, anda perlu secara jelas mengatakan bahawa anda adalah. Jadi saya akan untuk benar-benar taip global $ Saiz, $ jadual global, dan kini fungsi saya selesai. Jadi tidak cukup sebagai mudah seperti sebelum ini, tetapi mungkin mengambil masa kurang daripada C versi, mungkin? OK. Jadi sekarang mari kita buat cek fungsi (). Mari kita lihat jika ini sekurang-kurangnya mengambil jam pada akhir bahawa kami mengambil masa dalam C. Jadi biarlah saya pergi ke hadapan dan mengisytiharkan memeriksa sebagai fungsi. Mengambil masa dalam perkataan hujah, yang merupakan akan datang dari buku ejaan. Dan saya hanya akan memeriksa jika berikut isset berubah-ubah, jadual kurungan strtolower perkataan - mari kita mengimbangi semua kurungan saya - kemudian kembali benar. Yang lain - yang benar-benar keras sebahagian daripada program ini. Else, pulangan palsu. Selesai. Itulah cek (). Sekarang, mengapa ini berfungsi? Nah, satu saya lulus dalam perkataan, yang merupakan rentetan. Dua, saya memeriksa di dalam hash meja, yang dipanggil $ meja. Saya memaksa ia kepada huruf kecil dengan memanggil fungsi yang agak sama tolower () dalam C, tetapi ini tidak keseluruhan perkataan, bukan watak tunggal. Dan jika itu ditetapkan, dalam erti kata lain ada adalah nilai yang ditetapkan, dalam erti kata lain, jika ia benar, maka ya, ini adalah perkataan. Kerana saya meletakkan di sana dengan beban (). Dan jika tidak, saya akan kembali palsu. Sekarang yang lain adalah mudah. Saiz Fungsi (), bagaimana saya melakukan ini? Saya pada dasarnya melakukan kembali saiz $. Tetapi saya secara teknikal perlu melakukan perkara yang menyakitkan hati. Dan sebenarnya sehingga mendengar, saya memotong satu sudut terlalu banyak. Saya benar-benar perlu lakukan $ jadual global. Tetapi itu yang berkata, memunggah). Memunggah () amat menakjubkan. Fungsi memunggah (). Bagaimana saya mahu untuk melaksanakan memunggah ()? Selesai. OK. Jadi memunggah (), pengurusan ingatan adalah sepenuhnya dijaga untuk anda dalam sesuatu seperti PHP dan banyak bahasa peringkat yang lebih tinggi. Jadi ini luar biasa. Seperti mengapa neraka yang kita menghabiskan masa lalu lapan minggu ditambah pada C bertulis nampaknya benar-benar perlahan, benar-benar masa memakan masalah dengan puluhan jam daripada bekerja di bawah tali pinggang kita? Nah, untuk satu perkara, ini boleh bekerja denda untuk program kecil. Ia sudah tentu dipercepatkan saya masa pembangunan. Tetapi mari kita lihat apa yang berlaku dalam dunia sebenar. Biar saya pergi ke direktori ini dalam tetingkap terminal. Ada buku ejaan. Dan notis sebagai diketepikan, dan anda mungkin temui ini dalam masalah set enam atau masalah ditetapkan tujuh. Anda tidak tegas perlu berakhir PHP fail dengan lanjutan. php. Jika anda meletakkan baris seperti yang pertama di bahagian paling atas, itu adalah satu barisan khas sintaksis yang pada asasnya bermakna mencari program yang dipanggil PHP dan menggunakannya untuk mentafsir fail ini. Jadi sekarang tidak ada benar-benar tahu bahawa Saya menjalankan program PHP. Saya boleh berlari ia hanya seolah-olah ia telah sesuatu yang disusun di C. Tetapi di sini perkara itu. Sebenarnya, mari kita buat ini lagi. Dropbox/pset6 /. Ada buku ejaan. OK, 0.44 saat. Ia mendapat lebih cepat kali ini. Sekarang mari kita pergi ke dalam versi PHP. Nice sentuhan. Tetapi hanya berfikir berapa banyak masa Saya disimpan di waktu pejabat. OK. Jadi 3.59 saat, yang sebenarnya tidak bunyi yang tepat sama ada. Tetapi itu kerana cerita panjang pendek, apabila anda mencetak sejumlah besar barangan untuk skrin, ini sendiri melambatkan perkara turun. Apa yang benar-benar mengambil CPU dalam perkakas adalah 3.59 saat, di bezakan kepada C, yang mengambil masa 0.44 saat yang paling baru-baru ini. Yang benar-benar suatu perintah magnitud yang berbeza. Jadi di mana adalah harga yang datang dari? Mengapa begitu lebih perlahan? Mengapa PHP melaksanakan begitu buruk? Danielle? PENONTON: Anda sebenarnya tidak menggunakan jadual hash. DAVID MALAN: saya tidak benar-benar menggunakan jadual hash. Jadi saya jenis lakukan. Jadi ia pelbagai bersekutu. Kemungkinan besar jika orang-orang di PHP adalah benar-benar pintar, mereka menggunakan di bawah hud jadual hash sebenar dilaksanakan dalam sesuatu seperti C atau C + +. Tetapi. Yeah. PENONTON: [didengar]. DAVID MALAN: Yeah. Jadi setiap fungsi saya menulis sekarang - sebenarnya, anda boleh mengatakan bahawa sekali lagi satu sedikit lebih kuat? PENONTON: Setiap satu daripada fungsi-fungsi yang anda termasuk mempunyai lebih banyak penuh sekalipun daripada - DAVID MALAN: Jadi, itu amat benar. Terdapat banyak lagi overhed bahawa kita tidak benar-benar melihat dengan memfokus kepada dictionary.php, yang saya hanya menulis. Sebaliknya, ada jurubahasa keseluruhan akan di latar belakang. Malah, apabila saya berlari program ini, ia tidak berjalan sifar disusun dan orang-orang yang direka untuk CPU Intel saya. Sebaliknya, ia telah berjalan baris demi baris Kod PHP yang kelihatan betul-betul seperti kita ditaip ia. Dan demikian apabila anda menggunakan bahasa ditafsirkan, anda sebenarnya membayar harga ini. Ia akan mengambil sedikit masa untuk membaca atas fail anda ke bawah, kiri ke betul, dan kemudian melaksanakan setiap line lagi dan lagi. Sekarang dalam realiti, terutama di web, anda sebenarnya boleh mempercepatkan proses ini oleh caching keputusan Kod PHP yang ditafsirkan. Dan yang masuk akal di web, kerana jika anda tidak mempunyai satu pengguna seperti saya di sini, tetapi 1,000 atau 10,000 pengguna, maka mungkin kali pertama fail adalah diakses ia perlahan, tetapi selepas itu ia lebih cepat. Tetapi ini juga, sekali lagi, adalah keseimbangan. Dan untuk sesuatu seperti data penyelidikan ditetapkan, malah sesuatu yang besar seperti ini, pengguna anda akan akhirnya mula berasa kelembapan itu. Jadi ringkasnya, ditafsirkan bahasa adalah sangat banyak dalam tren, sangat popular, dan terus terang mungkin bahasa anda perlu mencapai apabila menyelesaikan masalah selepas CS50. Tetapi sedar berapa banyak yang anda benar-benar mengambil mudah di bawah hood benar-benar orang-orang beberapa minggu lalu dalam hash jadual, dan pokok-pokok, dan cuba, yang digunakan untuk benar-benar akhirnya melaksanakan perkara-perkara seperti kurungan terbuka, kurungan persegi, yang kita kini boleh terima kasih ambil mudah. Jadi mari kita lihat sekarang dalam konteks web ini. Dan saya nyatakan masa lalu bahawa ada sekumpulan superglobals dalam PHP yang tidak benar-benar berkaitan pada baris arahan. Mereka lebih relevan dalam konteks menggunakan PHP dalam konteks web. Maka, PHP pada pelayan web untuk untuk menjana barangan seperti HTML. Dan kita menoleh pada $ _GET dan $ _POST dan itu di mana pengguna-pengguna ' input berakhir hanya jika anda menyerahkan membentuk ke fail yang berakhir dengan. php di web yang server seperti perkakas. Tetapi mari kita lihat secara ringkas di $ _COOKIE Dan $ _SESSION. Dari segi orang biasa itu, apa yang cookie sebagai anda memahaminya dalam konteks menggunakan web? PENONTON: Fail pada komputer. DAVID MALAN: Yeah. Ia adalah satu fail pada komputer pengguna ditanam dengan apa jua laman web anda berlaku untuk melawat. Oleh itu, apabila anda pergi ke Facebook, apabila anda pergi untuk bankofamerica.com, apabila anda pergi untuk google.com, apabila anda pergi ke hampir mana-mana laman web di dunia hari ini, termasuk cs50.net, cookie ditanam pada komputer anda, yang sama ada nilai yang disimpan dalam RAM dalam anda komputer dalam ingatan penyemak imbas anda, atau kadang-kadang memang fail disimpan pada pemacu keras anda. Dan apa yang biasanya disimpan di dalam fail yang bukan nama pengguna anda, tidak anda kata laluan, biasanya tidak sesuatu sensitif kecuali laman web tidak begitu baik dengan keselamatan mereka, tetapi sebaliknya ia adalah pengecam unik besar di kalangan perkara-perkara lain. Ia adalah satu nombor rawak yang besar yang ditanam di anda komputer tetapi anda boleh fikirkan sebagai semacam suatu cap tangan maya seperti dari kelab atau beberapa taman hiburan yang membolehkan kakitangan, pemilik yang perkhidmatan, ingat siapa anda. Jadi, jika nombor rawak yang besar adalah seperti 12345678, walaupun itulah jelas tidak terlalu rawak, memikirkan bahawa sebagai setem tangan yang apabila anda melawat facebook.com buat kali pertama, mereka setem nombor yang di tangan anda. Dan kemudian kerana anda bercakap HTTP, anda menjadi pelayar, dan kerana Facebook jelas bercakap yang sama seperti web pelayan, HTTP protokol mengatakan bahawa bila-bila masa anda kemudiannya melawat facebook.com, sama ada kedua kemudian, sejam kemudian, walaupun pada hari berikutnya, selagi anda tidak mempunyai jelas log keluar, yang berkesan adalah seperti mencuci tangan anda. HTTP mengatakan anda hendaklah mengemukakan anda setem tangan setiap kali anda kembali ke laman web itu. Apa Facebook maka tidak adalah mereka melihat bahawa setem tangan dan mereka berkata, oh, 123456789. Saya tidak tahu pada pandangan pertama bahawa ini David Malan di Cambridge, Massachusetts, tetapi mereka boleh menyemak mereka pangkalan data dan, orang mengatakan, oh yang pada yang komputer kita ditanam 123456789 David Malan dari Cambridge, Massachusetts. Mari kita menunjukkan pengguna yang kemudiannya profil beliau halaman atau News Feed beliau. Tetapi ada masalah di sini jika ini ialah bagaimana web memang berfungsi. Mari kita lihat satu contoh yang cepat. Mari kita benar-benar pergi untuk mengatakan facebook.com. Tetapi sebelum kita boleh pergi ke sana, apatah saya pergi ke hadapan dan membuka itu Chrome Inspektor di sini. Biar saya melihat tab rangkaian. Dan sekarang mari kita pergi ke hadapan dan menaip dalam https://facebook.com. Dan saya melakukan itu supaya kita tidak melihat semua orang-orang pelencongan dan sisa masa melihat melalui mereka. Biar saya tekan enter. Baiklah. Kita melihat sejumlah besar permintaan. Datang Facebook. Terdapat sejumlah besar fail. Dan di sini, semalam menyebut saya kependaman kali terakhir, itu banyak permintaan HTTP. Tetapi yang pertama adalah mungkin yang paling menarik. Jadi mari kita tatal ke bawah di sini, dan Saya akan mengezum di dalam satu saat. Ini akan menjadi jenis keadaan huru-hara, tetapi mari kita lihat. Facebook menghantar kami keseluruhan sekumpulan barangan. Tetapi wah, menarik. Mereka tidak menanam satu, tetapi empat setem tangan ke tangan saya di sini. Set-cookie, Set-cookie, set-kuki, set-cookies. Dan terdapat beberapa ciri-ciri di sini. Kesemua mereka menyebut beberapa jenis tamat. Dan ia kelihatan seperti Facebook berharap ingat saya sehingga 2015. Jadi, itu mungkin masa di mana Saya mesti log keluar atau mereka akan hanya secara automatik menganggap saya tidak akan kembali. Itulah sebenarnya yang layak jumlah masa. Dan terdapat beberapa yang lain perkara yang berlaku di sini. Kuki ini muncul untuk menjadi paksa dihapuskan dengan mengatakan ia tamat pada tahun 1970 sebelum cookies wujud. Jadi pelayar hanya akan menganggap OK, itu seperti membasuh setem tangan. Tetapi sekarang apabila pelayar saya membuat permintaan seterusnya - izinkan saya pergi ke hadapan dan melakukan ini sekali lagi dan menambah nilai. Sekarang saya skrol kembali ke atas permintaan dan pergi ke di sini, permintaan tajuk. Notis ini. Jadi sekarang saya tidak di bawah tajuk tindak balas, tetapi notis ia berkata permintaan tajuk. Dan notis bahawa pelayar saya sebagai sebahagian daripada permintaan selepas tambah nilai memukul mempunyai menghantar sekurang-kurangnya berikut maklumat. Tidak set-cookies, tetapi cookies. Jadi ini adalah baris, header HTTP supaya untuk bercakap, di mana pelayar saya adalah jenis daripada tanpa mengetahui saya ia membentangkan tangan saya untuk pemeriksaan Facebook. Jadi ini cookies boleh digunakan maka untuk apa? Untuk ingat siapa anda, atau ingat bagaimana banyak kali anda pernah ke sana, atau benar-benar apa-apa. Jadi di sini adalah counter.php. Dan biarlah saya mengezum masuk pada fon. Dan setiap kali saya muat semula laman ini, notis ia mengingati berapa kali Saya telah berada di sana. Nah, itu bukan semua yang menarik. Mari kita menutup tab itu, dan sekarang mari kita kembali ke http://localhost/counter.php. Oh, itu menarik. Ia masih ingat, walaupun walaupun saya menutup tab. Dan terus-terang, jika saya menutup penyemak imbas, jika dilaksanakan dengan cara yang betul, saya masih ingat bahawa pengguna ini yang dia merupakan kali pertama, dan hanya sekali saya pergi ke menu Chrome, yang di sini di sini, dan pergi ke Sejarah, dan klik Clear Browsing Data, sebagai sebahagian daripada anda mungkin perlu dalam lalu, barulah akan cookies anda sebenarnya dihapuskan semasa web pembangunan. Jadi, jika kita pergi - mari kita menutup gedit sini. Dan jika kita pergi sekarang ke fail ini. Biar saya pergi ke kami vhosts / localhost / awam, dan biarlah saya lakukan counter.php. Perhatikan bahawa ini adalah cukup program mudah. Ia adalah satu laman web yang agak mudah. Jadi bahagian atas fail hanya komen. Tetapi inilah barisan baru yang anda boleh telah dilihat sudah dalam p-set tujuh, session_start (). Ini adalah baris kod PHP yang dasarnya memberitahu pelayan web, membuat pasti untuk menghapuskan tangan dan membuat pastikan setem tangan. Itu semua garis yang tidak, dan ia melakukan semua proses itu untuk kita. Kemudian notis Saya baru sahaja mendapat dua cawangan di sini. Jika di dalam kunci kaunter ini berubah-ubah global khas yang dipanggil $ _SESSION Ditetapkan - dalam erti kata lain, jika terdapat beberapa nilai di sana - mari kita mendapatkannya dan menyimpannya dalam tempatan ubah dipanggil $ kaunter. Yang lain, mari kita memberikan $ kaunter nilai lalai 0. Sekarang di sini adalah salah satu aspek PHP itulah kedua-dua satu rahmat dan kutuk. PHP adalah sedikit ceroboh. Jadi sedangkan di C, apa yang akan dilakukan skop kaunter telah sama ada di sini atau di sini? Ia akan telah dikurung kepada orang-orang pendakap kerinting. Rasa apa? Dalam PHP, ia wujud walaupun di luar mereka pendakap kerinting, di sini, dan di sini, dan di sini, dan di sini, dan malah di bawah. Jadi saya katakan ini adalah satu rahmat dalam erti kata bahawa anda tidak perlu berfikir sebagai keras seperti yang kita lakukan minggu lalu. Tetapi ia juga sedikit sumpahan di yang tidak kira di mana anda menggunakan berubah-ubah dalam PHP, sekurang-kurangnya dalam program seperti ini, ia boleh diakses secara global lebih baik atau untuk lebih teruk. Jadi, anda perlu ingat sekarang bahawa pembolehubah anda mungkin tidak ditentukan. Anda mungkin telah ditakrifkan mereka di tempat lain. Tetapi apa yang saya akan lakukan akhirnya? Saya akan menyimpan dalam yang global berubah-ubah sebagai nilai utama kaunter hasil daripada melakukan kaunter campur 1. Jadi ini adalah hanya aritmetik yang melakukan incrementation kaunter itu. Dan hakikat bahawa saya menyimpan yang nilai kembali di sini adalah cara untuk dasarnya mengemaskini pangkalan data untuk ingat bahawa pengguna 123456789 telah di sini dua kali. Dan apabila saya melakukannya sekali lagi masa depan saya memuatkan semula halaman, ia akan memeriksa tangan saya setem dan berkata, oh, pengguna 123456789 kini Sudah tiga kali. Dan jadi apa PHP dan bahasa yang sama lakukan untuk kita adalah mereka memikirkan bagaimana dan di mana dan untuk berapa lama untuk menyimpan nilai dalam ini khas Superglobal. Dan ini Superglobal masa yang akan datang saya melawat halaman adalah jenis ajaib pra-penduduk, penuh dengan nilai-nilai yang berada di sana kali terakhir anda melawat, sama ada yang kedua yang lalu, seminggu yang lalu, atau pada tahun 2013 dan kita sedang bercakap kira-kira 2015. PHP dan pelayan web akan menjaga daripada semua itu untuk anda. PENONTON: [didengar]. DAVID MALAN: Pembolehubah dalam PHP adalah dasarnya sentiasa global melainkan jika anda mengisytiharkan mereka dalam fungsi, dan kemudian mereka tempatan untuk fungsi sahaja. Tetapi kerana saya tidak menulis apa-apa fungsi, mereka kini berkesan global sepanjang keseluruhan fail saya di sini. PENONTON: Adakah cara yang untuk membuat mereka tempatan? DAVID MALAN: Adakah terdapat apa-apa cara untuk membuat mereka tempatan? Hanya dengan membungkus mereka ke dalam fungsi. Yang pada versi terbaru PHP, anda boleh melakukan ini dengan fungsi tanpa nama. Tetapi lebih kepada yang di konteks JavaScript. Tetapi jawapan ringkasnya adalah tidak. Satu jawapan yang lebih lama adalah ya. Nice. Soalan kuiz yang baik. Baiklah. Jadi akhir sekali, halaman itu sendiri adalah sebenarnya agak mudah. Perhatikan bahawa sekali saya keluar mod PHP, ingat bahawa semua barangan ini ke bawah di bawah hanya akan mendapatkan meludah keluar mentah kepada pelayar. Yang halus, kerana saya ingin menghantar pengguna beberapa HTML, tetapi saya mahu untuk secara dinamik mengemaskini HTML itu. Dan satu cara yang boleh saya lakukan ini adalah untuk menyusun sangat cepat jatuh kembali ke dalam PHP mod, penggunaan kurungan terbuka tanda tanya tanda yang sama, dan kemudian output nilai kaunter. Atau jika ini kelihatan sedikit samar, ini tanda sama sebenarnya hanya beberapa gula sintaksis untuk ini printf ($ kaunter). Tetapi terus terang, itu hanya sedikit hodoh dan menjengkelkan sedikit untuk menaip. Jadi PHP sangat baik menawarkan ciri ini di mana anda hanya boleh mengatakan ia lebih ringkas dengan cara yang sama. Jadi apa yang berlaku di bawah hud? Mari cepat melihat rangkaian tekan sini untuk counter.php. Dan biarlah saya teruskan dan pertama mari kita membersihkan cookies anda. Mari kita data melayari jelas sejak permulaan masa. Sekarang mari kita kembali di sini. Sekarang mari kita memuat semula halaman. Dan saya kembali pada sifar. Kerana setem tangan saya telah dibasuh, Saya kini mendapat kuki baru. Sesungguhnya jika saya melihat tekan rangkaian dan melihat pengepala sambutan, notis perkakas sedang menghantar saya cookie yang namanya agak sewenang-wenangnya, tetapi jenis munasabah, PHPSESSID. Dan ia menghantar saya ini benar-benar nombor rawak yang besar. Ia tidak cukup nombor. Ia tidak cukup perenambelasan. Ia beberapa jenis string abjad angka, tetapi mungkin ia secara rawak. Dan itu adalah setem tangan supaya untuk bercakap bahawa saya merujuk kepada. Sementara itu jika saya klik tambah nilai dan kemudian melihat garis kedua ini untuk kedua saya permintaan, notis sekarang bahawa permintaan saya header termasuk PHPSESSID sama ini, tidak set-cookie, tetapi hanya cookies. Dan itulah persembahan pelayar saya setem tangan saya. Jadi sekarang sebagai memujuknya, dan kami akan bercakap lebih tentang perkara ini dalam seminggu atau lebih, tetapi dengan cara apa adakah ini membuat anda terdedah, akaun Facebook anda terdedah, dan lain-lain akaun terdedah? PENONTON: Jika seseorang mempunyai cookie anda. DAVID MALAN: Ya, jika seseorang mempunyai cookie anda. Maksud saya benar-benar, sama seperti sebahagian dari kamu mungkin telah mencuba pada seperti kelab atau taman hiburan, jika anda mencuba sesuatu yang seperti ini untuk menyalin setem, walaupun ke belakang ke tangan orang lain, dan kemudian dia membentangkan sebagai mereka sendiri, jika ia benar-benar tidak kelihatan serupa, 123456789, maka web server nampaknya hanya akan percaya bahawa pengguna yang anda. Dan ini merupakan satu asas ancaman bila-bila masa anda menggunakan cookies kerana jika seseorang hanya spoofs jadi untuk bercakap cookie anda, angka daripada apa yang adalah, sama ada dengan benar-benar menirunya dengan melihat komputer anda dan menjadi seperti, OK. Cookie Daud adalah JJ3JIK dan sebagainya, dan kemudian mereka cukup bijak untuk tahu bagaimana untuk jenis menghantar secara manual yang cookie dari pelayar atau dari program mereka menulis, mereka boleh sama sekali log masuk ke laman web anda. Ia tidak begitu sukar untuk berpura-pura menjadi orang lain kecuali kita semula p-set dua, yang memperkenalkan apa? PENONTON: Kriptografi. DAVID MALAN: Sedikit sedikit kriptografi. Kriptografi yang mudah, sekurang-kurangnya pada edisi standard, tetapi kripto tetap. kurang. Jadi ternyata jika anda menyulitkan semua header ini sesuatu yang menggunakan anda sekarang mungkin tahu lebih akrab sebagai SSL, lapisan soket selamat, atau https:// URL, maka semua perkara-perkara ini kita telah sambil mengerling ke arah sebenarnya disulitkan, yang bermaksud bahawa ia seperti anda tidak boleh membaca setem tangan. Hanya facebook.com boleh, atau google.com, atau dalam kes ini, perkakas boleh membaca bahawa setem tangan. Malangnya walaupun, dan sekali lagi, ini adalah terlalu sesuai dengan barangan NSA yang akhir-akhir, walaupun SSL mudah pecah. Dan ia sebenarnya tidak sukar walaupun retak penyulitan itu. Tidak begitu banyak oleh keretakan penyulitan, tetapi dengan memperdayakan yang pelayar ke decrypting data awal. Apapun, kita akan mengusik anda dengan itu tidak lama lagi. Buat masa ini, hanya takut. Ia tragedi jenis benar. Baiklah. Jadi, di manakah kini meninggalkan kita? Nah, mari kita melakukan ini. Mari kita pergi ke hadapan dan mengambil yang cepat penggoda sebelum kita berehat. Dan saya fikir kita akan berlegar masa yang lebih lama hari ini, tetapi kita akan menyelam ke dalam sesuatu yang baru dan seksi, yang akan mengasah selera anda untuk lebih. Jadi, itu penggoda. Jadi SQL, kita mula bercakap tentang pernah jadi secara ringkas kali terakhir. Anda benar-benar akan mendapatkan tangan anda kotor dengan beberapa dalam p yang ditetapkan tujuh. Dan dari segi orang biasa itu, apakah SQL - S-Q-L - lakukan untuk anda? Apakah ia? Yeah. PENONTON: Mari kita data akses anda. DAVID MALAN: Yeah. Ia mari kita data akses anda dalam pangkalan data. Structured Query Language. Dan ini pada asasnya adalah bahasa pengaturcaraan. Terdapat ciri-ciri itu yang kita bahkan tidak akan menggunakan di dalam kelas. Tetapi anda boleh berkesan menentukan fungsi. Mereka dipanggil disimpan prosedur dalam SQL. Tetapi kita akan menyimpannya agak mudah dan hanya menggunakannya untuk beberapa operasi asas seperti memilih data, memasukkan data, mengemaskini data, dan memadam data. Dan anda benar-benar dapat memikirkan pangkalan data, seperti pangkalan data SQL, sebagai hanya menjadi Microsoft Excel. Kerana SQL merujuk kepada hubungan yang pangkalan data, di mana berhubung hanya bermakna jadual. Baris dan lajur. Jadi apa sahaja yang anda boleh dimasukkan ke dalam spreadsheet seperti ini atau Google Docs, anda boleh dimasukkan ke dalam pangkalan data SQL dengan mengisytiharkan meja. Sekarang, bagaimana anda sebenarnya mengakses maklumat itu? Nah, dengan arahan atau pertanyaan seperti ini. SELECT, INSERT, UPDATE, DELETE dan. Dan sebahagian besar, mereka adalah empat bahan-bahan hanya anda perlu melakukan sesuatu yang agak kuat dalam masalah set tujuh. Kini kembali pada hari tersebut, anda akan benar-benar berinteraksi dengan pangkalan data dalam hitam dan putih tetingkap terminal di segera berkelip seperti ini. Dan pangkalan data kami berjalan di perkakas dipanggil MySQL, yang merupakan enjin pangkalan data sumber bebas dan terbuka. Jika anda Google dan membaca Wikipedia artikel, anda akan tahu bahawa nama itu adalah sedikit peralihan untuk beberapa versi Linux. Pangkalan data Maria sebenarnya adalah garpu boleh dikatakan MySQL. Cerita pendek yang panjang, Oracle membeli MySQL. Oracle sebuah syarikat besar. Rakyat telah bimbang bahawa ia akan tidak lagi kekal sebagai sumber cukup sebagai terbuka, jadi ini adalah hanya satu salinan MySQL itulah masih bebas, masih sumber terbuka, dan dipasang di Fedora Linux secara lalai. Tetapi ini adalah jenis sakit di leher untuk mengetahui dengan pangkalan data dengan cara ini. Oleh itu, kita termasuk dalam perkakas yang CS50 alat sumber terbuka percuma yang dipanggil phpMyAdmin. Hanya kebetulan yang ia ditulis dalam PHP. Tidak ada asas perlu untuk PHP di sini. Tetapi ini hanya alat berasaskan web yang kita turun secara percuma, dipasang di perkakas, yang membolehkan kita untuk mempunyai antara muka pengguna grafik dengan yang untuk meneroka p set tujuh pangkalan data dengan mana untuk mencipta pangkalan data baru, katakan untuk projek akhir anda sendiri jika anda akan seperti, dan akhirnya mewujudkan seperti laman web dinamik CS50 Kewangan yang membolehkan anda untuk query data dan mengemaskini data secara dinamik. Anda tidak akan perlu untuk menggunakan hanya fail teks yang mudah atau CSV. Anda sebenarnya boleh menggunakan pangkalan data pintar program supaya anda boleh melaksanakan lebih pertanyaan canggih daripada hanya membaca melalui semua linear. Jadi misalnya, ini adalah apa yang kita berikan anda keluar dari kotak untuk p yang ditetapkan tujuh. Ini adalah sebuah meja dengan nampaknya sekurang-kurangnya tiga tiang, salah satu daripadanya ialah nama pengguna, satu daripadanya adalah hash, dan yang satu lagi adalah ID. Tetapi perkara yang menarik, dan hanya untuk dapati daripada satu pemikiran di sini, nama pengguna adalah mungkin sudah unik, bukan? Maksud saya, kebanyakan laman web mana-mana, jika anda mempunyai nama pengguna, terdapat tidak boleh dua Caesars. Tidak boleh ada dua malans. Tidak boleh ada dua jharvards. Yang unik. Jika tidak, mereka tidak tahu yang mana jharvard sebenarnya. Jadi apa yang mungkin menjadi motivasi untuk juga mempunyai kolum ketiga di sebelah kiri ada dipanggil ID, yang kelihatan seperti bilangan itu juga unik? Rasanya berlebihan sedikit kepada saya pada pandangan pertama. Mengapa ia menarik mungkin mempunyai bukan sahaja nama samaran yang unik, tetapi juga nombor yang unik? PENONTON: Mereka boleh mempunyai kata laluan yang sama. DAVID MALAN: Orang mungkin mempunyai kata laluan yang sama, pasti. Yang benar-benar boleh berlaku. Tetapi jika mereka mempunyai nama pengguna yang unik ini, saya akan berhujah bahawa yang tidak benar-benar perkara, kerana jika mereka taip mereka nama pengguna, saya hanya perlu menyemak mereka kata laluan, hash mereka berpandangan demikian. Mengapa lagi? PENONTON: lebih cepat mencari. DAVID MALAN: lebih cepat mencari. Mengapa? PENONTON: ID hanya satu. DAVID MALAN: ID hanya salah satu watak, atau lebih tepat, ia adalah nombor, jadi ia mungkin 32 bit atau sesuatu seperti itu. Manakala nama pengguna, nampaknya Jason Sehingga Hirschhorn ini terdapat jenis sungguh panjang, dan ia akan membawa saya lebih banyak masa kepada rentetan membandingkan H-I-R-S-C-H-H-O-R-N, dan mungkin a / 0 atau sesuatu seperti itu, untuk untuk mencari Jason, berbanding dengan hanya mengatakan berikan saya nombor pengguna dua. Itulah 32 bit. Ia adalah satu INT tunggal yang anda perlu membandingkan. Dan sesungguhnya, itulah mengapa pangkalan data cenderung untuk memberikan ID unik untuk baris di dalamnya. Sekarang apa jenis data lain terdapat selain INT dan nampaknya tali seperti ini? Nah, untuk menjadi lebih betul, Pangkalan data SQL, seperti MySQL, mempunyai bidang CHAR. Dan Char sedikit mengelirukan bukan CHAR tunggal. Satu bidang CHAR dalam pangkalan data MySQL adalah satu atau lebih aksara, tetapi ia adalah nombor tetap aksara. Jadi misalnya, jika saya pergi ke phpMyAdmin sebagai anda mungkin telah, atau tidak lama lagi masalah akan menetapkan tujuh, dan saya pergi kepada pangkalan data saya, dan hanya untuk keseronokan, mari kita buat jadual baru yang dikenali sebagai menguji dengan hanya dua tiang. Saya kemudian akan klik Go. Dan ini akan menjadi agak biasa, terutamanya kerana anda menggerumit sekitar sendiri. Di sini saya mungkin menaip ID untuk mewujudkan jadual baru jenis INT. Tetapi di sini saya mungkin menaip nama pengguna untuk mencipta jadual yang lebih awal. Dan notis Saya mempunyai sejumlah jenis untuk dipilih. Dan ini juga adalah mengapa phpMyAdmin adalah jenis yang bagus. Ia adalah jenis pengajaran diri dalam yang anda boleh hanya jenis titik, dan klik, dan melihat menu dropdown, dan membuat kesimpulan dari bahawa apa kuasa SQL memberikan anda. Dan sesungguhnya, jika saya memilih CHAR, saya kemudian perlu menentukan panjang, atau bagaimana banyak nilai-nilai, berapa banyak aksara. Jadi nilai yang biasa adalah perkara-perkara seperti 255, tetapi yang sedikit panjang. Biasanya adalah lapan bagi nama pengguna. Tetapi itu sedikit kecil pada hari ini. Jadi ini adalah satu keputusan reka bentuk. Adakah 8 aksara max, 32, 255, 1000? Ia benar-benar terpulang kepada anda. Tetapi bidang CHAR adalah nombor tetap. Jadi, pilih terlalu sedikit dan anda jenis diskru jika anda mahu nama pengguna yang lebih lama. Pilih terlalu banyak dan apa yang Kelemahan? PENONTON: [didengar]. DAVID MALAN: Ia membazir. Sama seperti dalam C, jika anda mempunyai yang lebih besar sebahagian memori daripada yang anda perlukan, anda hanya membuang masa dan membazirkan ruang. Jadi sebagai alternatif, terdapat VARCHAR, yang menyelesaikan masalah ini dengan merawat panjang bukan sebagai panjang tetap, tetapi sebagai panjang maksimum, dan menggunakan beberapa pembolehubah aksara, yang kemudiannya cenderung untuk menggunakan hanya sebagai banyak aksara yang anda sebenarnya perlukan. Yang berbunyi sempurna. Mengapa kita tidak menghapuskan Data CHAR menaip kemudian? Apa yang mungkin menjadi keburukan menggunakan VARCHARs, yang berbunyi seperti ia adalah satu kemenangan yang bagus? Yeah? PENONTON: [didengar]. DAVID MALAN: OK, baik. Jadi, jika semua data anda adalah sama panjang, apa yang kebimbangan? PENONTON: Kerana anda membuang data dengan memberitahu mereka semua. DAVID MALAN: Jadi, jika semua data anda adalah panjang yang sama, walaupun, saya akan berhujah itu yang menyatakan panjang maksimum pada VARCHAR tidak berbeza menyatakan panjang tetap pada CHAR jika anda tahu jumlah itu terlebih dahulu. Tetapi ada sesungguhnya, dan saya akan jenis cabutan daripada jawapan yang realiti yang masih ada mak, yang boleh mengganggu, terutamanya jika anda menghadapi nama seseorang itu luar biasa panjang yang anda tidak menjangka. Dan ia juga sedikit kurang cekap untuk benar-benar mencari di VARCHARs sebagai bertentangan dengan mencari aksara, terutamanya untuk jadual lama yang mempunyai banyak dan banyak data. Jadi di sini juga, tematik sekali lagi ada pilihan yang jelas. Jadi hanya untuk memberi anda rasa lain jenis data yang mungkin menarik minat sama ada untuk p yang ditetapkan tujuh atau dalam masa akan datang, ada INT. Ada BIGINT, yang adalah seperti panjang panjang. Ia cenderung untuk menjadi 64 bit. Ada perpuluhan, yang anda akan lihat di set masalah, yang merupakan lebih jawapan lebih bersih untuk masalah yang kita dihadapi dengan terapung dan terapung menunjukkan ketakpersisan. Dan kemudian ada DATETIME. Ada beribu-jenis data yang mempunyai untuk kelihatan seperti setahun, sebulan, sehari, dan satu jam, minit, dan kedua. Tetapi pangkalan data SQL juga mempunyai perkara yang kita akan memanggil indeks. Dan indeks adalah sesuatu yang anda nyatakan semasa membuat jadual untuk membuat pencarian dan operasi lain lebih cekap. Secara khusus, ada sesuatu yang dipanggil indeks RENDAH bahawa anda boleh mengisytiharkan seperti berikut. Kami melakukan ini untuk anda dengan jadual pengguna kami memberi anda. Tetapi notis jika saya telah mencipta secara manual meja pengguna di sini memberi ia nama pengguna. Saya sudah ID dinyatakan. Saya dinyatakan INT. Saya sebutkan nama pengguna dengan maksimum 32 aksara. Tetapi jika kita menyimpan menatal dalam ini agak tingkap luas, notis ada sekumpulan perkara lain yang saya boleh menentukan. Satu, saya boleh menentukan sifat-sifat seperti, anda tahu apa, ini INT harus tidak ditandatangani. Saya tidak mahu nombor negatif, jadi mari kita membuat ia tidak ditandatangani. Nol tidak relevan di sini kerana Saya mahu setiap pengguna untuk mempunyai nombor yang unik. Saya tidak mahu ia menjadi null. Tetapi ini adalah menarik. Saya boleh menentukan bahawa ID adalah sama ada utama utama pangkalan data ini, atau ia unik, atau ia diindeks, atau teks penuh. Jadi untuk tujuan hari ini, cerita lama pendek, RENDAH bermakna hendaklah ini kedua-dua konsep dan teknikal bidang yang kita gunakan untuk unik mengenal pasti pengguna. Oleh itu, apabila kita melihat pengguna, ini adalah jenis sebuah janji untuk melihat mereka kebanyakannya oleh yang pasti unik. Dan pangkalan data akan memastikan bahawa jika anda mempunyai beberapa pengguna 3, anda tidak boleh fizikal memasukkan pengguna lain dengan nombor yang sama 3. Pangkalan data ini hanya akan menolak untuk menyimpan perubahan anda. Yang merupakan satu perkara yang baik, kerana anda boleh melindungi diri anda daripada diri sendiri. diri Secara alternatif, untuk nama pengguna. Jadi baris kedua, ingat, adalah medan nama pengguna. Jadi barisan kedua di sini adalah nama pengguna, seperti yang kita lakukan pada hujung sebelah kiri sana. Jadi apa lagi yang mungkin saya ingin nyatakan? Saya tidak dibenarkan, menurut SQL, untuk menentukan dua kunci utama. anda boleh menentukan kunci sama di mana anda melihat kedua-dua bidang, tetapi mereka tidak boleh individu menjadi kunci utama. Jadi, itu keluar daripada soalan. Jadi yang mungkin saya mahu pilih? Nah, UNIK adalah sama dalam semangat kepada utama utama di mana anda menentukan ini bidang itu menjadi unik, tetapi ia tidak akan menjadi orang yang Saya menggunakan setiap masa. Dan kita tidak akan menggunakan satu ini semua masa untuk apa alasan lagi? Ia perlahan berpotensi jika ia nama pengguna yang lama. Ia hanya membuang masa. INDEKS, sementara itu, menyatakan bahawa ia tidak akan menjadi unik, tetapi saya ingin anda untuk bekerja sihir anda di bawah hud untuk menjadikannya lebih cepat untuk saya mencari di bidang ini. Jadi ini mungkin tidak relevan di sini. Untuk nama pengguna, saya berpendapat bahawa UNIK adalah jawapan yang baik. Tetapi menganggap bahawa kami membuat pengguna lebih menarik daripada sekadar nama pengguna, Hash, dan nombor ID. Bagaimana jika kita memberikan orang nama-nama penuh? Bagaimana jika kita memberikan mereka alamat dan data lain tentang mereka? Nah, jika anda menentukan bahawa lajur dalam pangkalan data diindeks, ini bermakna bahawa MySQL, atau Oracle, atau apa sahaja pangkalan data anda menggunakan, perlu bekerja sihir dan menggunakan beberapa jenis data mewah struktur seperti pokok, atau indone, atau jadual hash, atau sesuatu untuk menjamin bahawa apabila anda mencari data menggunakan pilih pada bidang tertentu - seperti menunjukkan saya semua orang yang tinggal di Oxford Street. Satu pertanyaan seperti itu. Jika anda telah dinyatakan terlebih dahulu bahawa anda mahu indeks di padang itu, carian akan banyak, lebih cepat. Jika anda tidak menentukan indeks, yang terbaik yang boleh anda lakukan adalah carian linear jika ia tidak disusun. Tetapi jika anda menetapkan INDEKS, pintar orang yang membuat pangkalan data - orang-orang seperti anda yang kini tahu pokok-pokok dan cuba dan jadual hash - secara automatik akan membina seperti data yang struktur dalam RAM untuk memastikan bahawa mereka carian adalah lebih cepat. Sementara teks penuh adalah sama dalam semangat, tetapi membolehkan anda untuk melakukan wildcard carian, seperti menunjukkan saya semua orang yang tinggal di jalan-jalan yang bermula dengan surat O untuk apa-apa sebab. Anda boleh melakukan carian wildcard seperti itu. Atau, perkara yang lebih menarik seperti persembahan saya semua orang yang mempunyai perkataan - tunjukkan kepada saya semua orang yang namanya bermula dengan suatu surat tertentu. Anda boleh mencari kata kunci dengan cara ini. Baiklah. Jadi, peluang reka bentuk ada yang berpotensi. Ada orang lain yang saya akan melambai-lambaikan tangan saya di. Ia ternyata bahawa anda boleh mempunyai enjin simpanan yang berbeza. Dan ini adalah lebih batin daripada kita perlu pasti untuk masalah ditetapkan tujuh. Secara lalai, anda semua menggunakan sesuatu yang dinamakan SQL. Anda akan melihat menyebut tempat ini dalam antara muka phpMyAdmin yang paling mungkin. Tetapi tahu bahawa terdapat reka bentuk yang lain keputusan yang mempunyai potensi kepentingan datang projek akhir jika anda melakukan sesuatu yang berasaskan web. Tetapi mari kita melakukan ini. Mari kita pergi ke hadapan dan meletakkan ini di skrin sebagai penggoda untuk cerita yang melibatkan anda, rakan sebilik yang, dan segelas susu. Mari kita minit dua atau lebih memecahkan sini. Dan jika anda boleh melekat di sekeliling, mari kita datang belakang, kelihatan sedikit lebih pada SQL, dan maka sedikit JavaScript dengan p-set lapan dalam fikiran. Baiklah. Jadi, mari kita membawa anda berfikir tentang kes sudut yang dengan mudah boleh timbul dalam konteks menggunakan pangkalan data, atau terus-terang, walaupun menggunakan perkara-perkara dunia sebenar seperti ATM untuk mendapatkan wang. Jadi inilah peti sejuk. Katakan anda mempunyai satu terlalu dalam asrama atau rumah anda. Dan anda telah mendapat salah satu rakan sebilik, dan kedua-dua anda benar-benar suka susu misalnya. Jadi anda pulang dari kelas satu hari. Dia bukan lagi kembali. Anda membuka peti sejuk. Anda benar-benar mahu segelas besar susu. Tidak ada susu. Jadi apa yang anda lakukan? Anda menutup peti sejuk. Anda merebut kunci anda. Anda keluar ke dataran. Dan anda mendapat selaras di CVS di mereka perkara checkout diri, yang sentiasa mengambil masa lebih lama daripada benar-benar mempunyai juruwang. Bagaimanapun. Jadi kemudian, sementara itu, dot dot dot, anda rakan sebilik datang rumah dan dia juga mempunyai keinginan yang untuk susu. Jadi dia membuka peti sejuk, kelihatan di dalam, dan oh, celaka. Tiada susu. Jadi dia mengetuai keluar, berlaku untuk pergi kepada CVS lain, yang hanya satu menghalang diri untuk sebab-sebab tertentu, dan dia atau dia mendapat selaras untuk membeli susu. Sementara itu, anda pulang ke rumah, dia atau dia datang rumah, dan apa yang anda akhirnya mempunyai? Dua kali ganda susu. Tetapi anda tidak benar-benar suka susu yang banyak. Jadi sekarang anda mempunyai susu sehingga kini salah seorang dari mereka hanya akan pergi masam akhirnya. Jadi ini adalah satu masalah yang benar-benar buruk. Betul? Jadi apa yang telah berlaku? Jadi asasnya, ini adalah jenis daripada contoh yang tidak masuk akal. Tetapi di bawah hood, apa yang kita telah mempunyai berlaku di sini adalah kedua-dua anda diperiksa keadaan beberapa keping memori, peti sejuk. Kedua-dua anda diperiksa negeri beberapa pembolehubah. Anda kedua-dua menarik kesimpulan yang kemudian bertindak pada. Tetapi malangnya, manakala rakan sebilik anda adalah di kedai, keadaan yang pembolehubah berubah, dia datang kembali dan kini mahu mengubah keadaan, tetapi ia pun berubah kepadanya atau dia. Dan sudah tentu, dia tidak akan mempunyai pergi ke kedai jika mereka tahu bahawa anda sudah dalam perjalanan. Jadi dalam dunia sebenar, bagaimana boleh anda mengelakkan masalah ini, dengan mengandaikan anda mempunyai peti sejuk, anda mempunyai rakan sebilik yang, dan anda sebenarnya suka susu? PENONTON: Berkomunikasi. DAVID MALAN: Berkomunikasi. OK. Tetapi bagaimana anda boleh berkomunikasi? PENONTON: Tinggalkan nota. DAVID MALAN: Tinggalkan nota, betul? Sentiasa tinggalkan nota, untuk peminat persembahan. Baiklah, jadi sentiasa meninggalkan nota, atau meletakkan benar-benar seperti mangga atau sesuatu di peti sejuk yang menyimpan anda rakan sebilik dari memeriksa keadaan berubah-ubah itu. Sekarang, mengapa ini berlaku yg ke masalah ditetapkan tujuh, atau ATM. Nah, membayangkan sebuah dunia di mana ATM anda mungkin dapat naik ke ATM mesin di sini, dan ATM lain di sini. Dan ini berlaku agak kerap. Dan andaikan anda mempunyai dua kad ATM, yang adalah mungkin untuk mendapatkan. Dan anda log masuk ke kedua-dua mesin berkesan pada masa yang sama, mudah-mudahan manakala tiada seorang pun sedang mencari. Dan kemudian anda taip di dalam PIN anda secara kasar pada masa yang sama. Dan kemudian anda melakukan pertanyaan baki untuk melihat berapa banyak wang tunai yang anda ada. Dan katakan anda mendapat $ 100 tinggal dalam akaun anda. Jadi pada dasarnya pada masa yang sama, anda mengatakan satu, sifar, sifar, masukkan. Dan anda diharapkan kembali wang. Tetapi berapa banyak wang yang mungkin anda kembali? Sekarang komputer pada akhir hari, terutamanya jika mereka bercakap dengan pelayan, tidak semestinya melakukan perkara-perkara dalam perintah itu yang yang dijangkakan. Jadi rasa apa yang berlaku, kerana apa sahaja rangkaian isu-isu kelajuan terdapat adalah, atau isu-isu CPU ada, atau apa-apa seperti itu, menganggap bahawa ATM pertama memeriksa kira-kira dan melihat, oh, orang ini mempunyai $ 100. Tetapi kemudian mendapat terganggu kerana mungkin sandaran yang berlaku dan supaya ia perlahan. Atau mungkin semasa menyemak, rangkaian sambungan mendapat sedikit perlahan kerana ini hanya berlaku. Mereka peranti fizikal. Jadi sementara itu, ATM yang kedua ialah bertanyakan soalan yang sama. Berapakah wang David ada? $ 100 adalah jawapannya. Tetapi kerana ATM yang pertama belum lagi menghantar mesej tolak $ 100, kedua-dua ATM telah diperiksa bilik kebal bank, melihat ada $ 100 di sana, dan kini kedua-dua mesin berpotensi adalah akan meludah keluar jawapan. Sekarang, ini adalah hebat untuk anda dalam erti kata lain jika apa yang bank tidak akhirnya adalah menukar jumlah yang tolak 100 dengan menetapkan sama berubah untuk anda akaun bank sama dengan 0, bertentangan untuk melakukan tolak 100. Dalam keadaan yang paling teruk bagi bank - atau yang terbaik untuk bank, sementara itu, mereka memberi anda $ 200, dan akaun bank anda sekarang menunjukkan negatif $ 100, yang benar-benar tidak memberi manfaat kepada anda semua. Tetapi persoalannya adalah bahawa bangsa ini syarat untuk dua sebilik mendapat susu, atau untuk dua ATM cuba untuk mendapatkan wang tunai dan mengubah keadaan peti besi pada masa yang sama wujud apa-apa kali anda mempunyai pangkalan data yang. Sekarang dalam masalah ditetapkan tujuh, isu ini timbul dalam erti kata bahawa jika anda membeli saham saham Facebook, dan kemudian untuk contoh anda membeli saham kedua Saham Facebook, anda perlu membuat keputusan sebagai pengaturcara. Untuk memutuskan bagaimana untuk mengemas kini pangkalan data, kemungkinan yang anda akan mempunyai satu baris untuk saham itu, dan ini adalah satu cara untuk melaksanakannya. Dan anda akan mempunyai satu saham FB, yang merupakan simbol penanda saham mereka untuk nama pengguna ini, atau pengguna ini ID, pengecam unik. Tetapi cerita yang sama boleh berlaku di sini. Jika anda buat INSERT SQL, kerana anda akan melihat dalam masalah set tujuh apabila anda melihat, oh, David mempunyai satu saham stok Facebook. Izinkan saya menukar ini menjadi dua saham, kerana dia mahu membeli bahagian kedua. Tetapi andaikan Daud sebenarnya mempunyai dua tetingkap pelayar terbuka, atau menganggap bahawa ia adalah satu akaun bersama dengan dua pasangan, dan kedua-dua mereka cuba untuk melaksanakan operasi yang sama, di sana, juga, berpotensi wujud untuk keputusan untuk menjadi dibuat berdasarkan sebelumnya keadaan dunia - akaun mempunyai satu saham - dan kedua-dua orang, atau kedua-duanya pelayan, kini cuba untuk mengatakan kenaikan kepada dua saham. Tetapi dalam kes ini, anda mungkin telah dikenakan saya wang untuk kedua-dua saham, tetapi incremented waktu itu satu. Jadi ringkasnya, masalah asas di sini, kerana dengan jenaka kira-kira meninggalkan ambil perhatian, atau meletakkan mangga di atasnya, adalah jika dua orang, atau dua benang - berfikir kembali ke awal - boleh memeriksa keadaan beberapa pembolehubah dan kemudian cuba untuk mengubah pembolehubah yang, tetapi kedua-dua perkara yang tidak berlaku pada masa yang sama tetapi boleh diganggu oleh perkara-perkara lain yang berlaku, data boleh masuk ke dalam keadaan yang sangat pelik. Dan anda boleh mendapat manfaat atau anda boleh mengalami dalam erti kata contoh wang. Jadi dalam masalah ditetapkan tujuh, kami memberi anda baris ini salah satu kod, yang panjang cerpen, menyelesaikan ini masalah dalam MySQL. Ini arahan yang panjang yang tidak walaupun dimuatkan ke satu baris di skrin di sini memastikan bahawa operasi anda adalah apa yang dipanggil atom. Semuanya berlaku pada satu masa, atau ia tidak berlaku sama sekali. Ini frasa yang lama tidak boleh diganggu sebahagiannya. Dan apa yang ia adalah betul-betul apa yang dikatakannya. Masukkan ke dalam jadual yang berikut beberapa tiga bidang nilai-nilai tertentu, tetapi pada kunci pendua, tidak melakukan bersisipan. Adakah kemas kini. Jadi ini adalah seperti melakukan INSERT dan INSERT jadi untuk bercakap pada masa yang sama. Dan apa yang utama yang mungkin yang disebutkan di sini? Ternyata, dan anda akan melihat ini dalam masalah set spec tujuh ini, kerana kami telah diisytiharkan di sana untuk menjadi kunci yang unik di atas meja ini tertentu seperti yang anda tidak boleh mempunyai pelbagai baris untuk pengguna yang sama dengan sen sama simbol saham - dalam contoh ini di sini, DVN.V adalah saham sen bodoh yang kita rujuk dalam spec. Kerana kita telah mengisytiharkan ia menjadi unik, apa ini bermakna bahawa jika anda cuba untuk memasukkan sebaris dua salinan, anda sebaliknya akan mengemaskinikannya tanpa sesiapa sahaja yang mempunyai peluang untuk menukar keadaan dunia sama ada. Jadi ringkasnya, ini memastikan perkara-perkara yang atom. Lebih umum walaupun, pangkalan data seperti MySQL - dan anda tidak memerlukan ciri ini untuk p yang ditetapkan tujuh, tetapi menyimpannya dalam fikiran untuk masa depan - menyokong apa yang dipanggil transaksi, di mana anda boleh mengatakan MULA TRANSAKSI harfiah. Anda kemudiannya boleh melaksanakan dua kenyataan SQL. Dan suatu pernyataan SQL, kerana anda akan melihat dalam p yang ditetapkan tujuh, kelihatan sedikit sesuatu seperti ini. Kemaskini yang dipanggil akaun meja. Tetapkan Lajur imbangan yang bersamaan dengan apa sahaja Lajur imbangan yang sedang tolak 1,000 di mana nombor, nombor akaun, seperti ID pengguna, bersamaan 2, dan kemudian mengemas akaun dot dot dot. Jadi dari segi orang biasa itu, apa yang kedua-dua pertanyaan seolah-olah melakukan di rasa dunia sebenar perbankan? PENONTON: Memindahkan untuk simpanan. DAVID MALAN: Tepat sekali. Memindahkan dana dari satu akaun kepada yang lain. Dan ini adalah satu lagi contoh di mana anda benar-benar mahu kedua-dua perkara yang berlaku atau tidak berlaku. Anda tidak mahu sesuatu untuk mendapatkan dalam tengah-tengah mereka dan berpotensi merosakkan matematik, atau merosakkan berapa banyak wang yang anda ada, atau berapa banyak wang bank itu mempunyai. Jadi apa yang benar-benar baik mengenai urus niaga dalam MySQL adalah itu, dan pangkalan data secara umum, adalah bahawa mereka dan orang-orang yang bijak yang telah dilaksanakan ciri-ciri ini memikirkan bagaimana untuk membuat memastikan bahawa kedua-dua mereka perkara yang berlaku atau tidak sama sekali. Dan jika anda benar-benar bercita-cita untuk membuat sebuah laman web yang digunakan oleh orang-orang di kampus, orang dalam dunia sebenar, melakukan sesuatu dalam erti permulaan, ini adalah jenis keputusan reka bentuk yang menjadi semakin penting. Jika tidak, anda mula kehilangan data, kehilangan pengguna, atau dalam hal yang paling teruk sebagai yang kita lihat di sini, yang berpotensi kehilangan wang. Jadi sekali lagi, lebih kepada yang dalam masalah set tujuh, dan juga mungkin untuk beberapa anda dalam projek-projek akhir. Jadi mari kita menukar bahawa gambar kami detik yang lalu hanya dalam satu lagi cara. Jadi biarlah saya benar-benar melihat jika saya boleh - nope, itu hilang. Terdapat ia. Jadi ini adalah di mana kita meninggalkan masa lalu. Dan ternyata kita akan melambungkan satu lagi perkara ke dalam campuran di sini - bahasa yang dipanggil JavaScript. Jadi JavaScript sebenarnya sesuai ke dalam sekeping ini - dan saya tidak cukup meninggalkan ruang yang cukup, jadi ini bukan sekarang untuk skala. OK, ini adalah benar-benar menyedihkan. OK, jadi itu JavaScript. Baiklah. Saya benar-benar melakukannya merugikan. Baiklah. Jadi JavaScript pengaturcaraan lain bahasa, dan terakhir kami, Jika yang membantu memberi jaminan bahawa tidak ada yang lebih lagi daripada hydrants api di sini. Jadi JavaScript juga merupakan ditafsirkan bahasa, yang bermakna anda tidak menyusun ke sifar dan satu. Anda hanya menjalankannya. Tetapi apa yang asasnya berbeza dengan JavaScript biasanya adalah bahawa anda tidak berjalan pada pelayan web anda. Ia tidak dilanggar di perkakas per se. Sebaliknya, ia mendapat turun oleh pengguna melalui HTTP ke dalam pelayar mereka - Chrome, Safari, Internet Explorer, Firefox, apa sahaja - dan ia pelayar yang melaksanakan ini bahasa pengaturcaraan. Jadi untuk mengetahui dengan jelas PHP setakat ini telah dilaksanakan sama ada pada baris arahan dalam tetingkap hitam dan putih kita, pada pelayan seperti perkakas, komputer suka perkakas, atau ia telah dilaksanakan oleh pelayan web berjalan pada komputer. Tetapi tema di sini adalah bahawa PHP setakat ini telah dilaksanakan pelayan, jadi pengguna dan pelayar pengguna tidak pernah melihat baris kod PHP. Malah, jika anda pernah membuka penyemak imbas untuk laman web atau lain anda dan anda sebenarnya melihat kod PHP dalam tingkap anda, seseorang telah kacau sehingga. Kerana ia tidak bertujuan untuk menjadi dihantar ke pelayar langsung. Ia sepatutnya dilaksanakan dan bertukar ke dalam sesuatu seperti HTML. Tetapi JavaScript asasnya sebaliknya. Ia bertujuan untuk dijalankan biasanya di dalam tetingkap pelayar pengguna. Dan apa jenis laman web menggunakan JavaScript maka pada hari ini? Seperti harfiah setiap laman web yang popular. Setiap laman web yang anda semua mungkin gunakan setiap hari menggunakan JavaScript untuk yang paling mudah dan juga ciri paling seksi. Jadi sesuatu seperti Facebook Chat jika anda menggunakan itu. Bagaimana keadaan itu benar-benar bekerja? Well setakat ini, semua barangan yang kita telah dilakukan dengan HTML dan PHP menganggap bahawa anda tarik ke atas URL, dan anda tekan Enter, dan anda melihat beberapa kandungan HTML. Dan anda klik link tersebut, yang mengubah URL, perubahan halaman, dan tambah nilai beberapa kandungan baru. Klik URL lain atau menyerahkan borang, anda mendapatkan dilibas ke laman lain dan anda melihat beberapa kandungan baru. Tetapi menggunakan sesuatu seperti Facebook Chat, atau GChat, atau Peta Google, jarang adakah keseluruhan halaman menyegarkan seperti yang anda melihat skrin putih seketika dan maka kandungan baru. Sebaliknya, laman web hari ini adalah dinamik mendapat dikemaskini lagi dan lagi dan lagi semua jenis di belakang tabir. Dan ternyata bahawa apabila anda pergi ke sesuatu seperti Facebook, atau GChat, atau Gmail, dan kemas kini halaman secara automatik tanpa tambah nilai yang seluruh skrin, apa yang berlaku adalah bahawa pelayar anda telah membuat semacam rahsia tambahan HTTP permintaan - bukan untuk laman web keseluruhan, tetapi hanya untuk ketulan kecil data, seperti mesej segera yang rakan anda hanya menghantar, atau update status yang seseorang hanya menghantar kepada anda, atau tweet seseorang yang hanya menghantar. Ia hanya membuat permintaan kecil untuk data, dan kemudian menggunakan JavaScript, ini bahasa pengaturcaraan, untuk mengubah apa laman web yang kelihatan seperti tanpa server membantu, tanpa pelayan menjana bahawa HTML. Jadi dalam jangka pendek, JavaScript boleh digunakan kemudian bukan sahaja untuk mengambil data baru daripada server tanpa tambah nilai keseluruhan halaman atau mengemukakan borang. Ia juga boleh digunakan untuk menukar yang dipanggil DOM - dokumen model objek - yang hanya dengan cara yang mewah untuk berkata pokok HTML yang kita lihat masa lalu. Jadi untuk meyakinkan, JavaScript adalah sintaksis begitu serupa dengan C juga. Tiada fungsi utama. Anda hanya mula menulis kod dan ia akan dilaksanakan, atau ditafsirkan lebih betul. Syarat ini akan kelihatan seperti ini. Tidak berbeza daripada C atau PHP untuk perkara itu. Ungkapan Boolean atau bersama-ed akan kelihatan seperti ini. ANDkan bersama-sama kelihatan seperti ini. Suis akan kelihatan seperti ini. Untuk gelung akan kelihatan seperti ini. Walaupun gelung akan kelihatan seperti ini. Adakah manakala gelung akan kelihatan seperti ini. Ini adalah baru. Jadi JavaScript tidak mempunyai foreach a membina per se, tetapi ini membina untuk i berubah-ubah dalam pelbagai, dan saya dalam kes menjadi nilai indeks. Jadi ia sedikit berbeza daripada foreach, walaupun versi baru JavaScript yang keluar sepanjang masa, jadi walaupun bahasa ini mempunyai akan berkembang. Dan sebagai diketepikan, JavaScript hari ini juga boleh digunakan pada pelayan seperti PHP menggunakan rangka kerja yang dipanggil Node.js. Salah satu TFS CS50 ini, Kevin, telah mengetuai Seminar Node.js itu boleh didapati di cs50.net/seminars. Jadi, jika anda ingin tahu, tahu bahawa anda boleh menggunakan ini di sebelah pelayan sebagai baik, tetapi itu adalah satu trend yang agak baru-baru ini, tetapi satu yang kuat pada itu. Ini adalah sedikit berbeza. Ini adalah pelbagai dalam JavaScript. Dan apa yang menyerang anda sebagai berbeza berbanding C atau PHP? Terdapat beberapa cerita yang cepat kita boleh memberitahu di sini. Apa yang hilang berbanding PHP? PENONTON: [didengar]. DAVID MALAN: Ya? Maaf, katakan lagi? PENONTON: Tidak mengisytiharkan jenis berubah-ubah. DAVID MALAN: Kami tidak mengisytiharkan jenis berubah-ubah. Jadi sebenarnya agak seperti PHP, kita tidak menyatakan jenis pembolehubah ini. Sebaliknya, kita lebih umum berkata var untuk berubah-ubah. Kami tidak mempunyai gangguan PHP ke atas tanda dolar, manakala yang membosankan untuk jenis, tidak membuat lebih jelas bahawa sesuatu adalah pembolehubah. Manakala di sini, kami jenis kembali ke Pendekatan C dengan hanya memanggil berubah-ubah dengan nama yang kita mahu untuk memberikan, seperti nombor. Dan juga seperti PHP, kita mempunyai kurungan untuk nilai dalam pelbagai itu. Jadi pembolehubah dalam JavaScript juga mungkin kelihatan seperti ini. Perhatikan di sini ini adalah rentetan yang dipanggil s, tetapi juga kita telah tidak dinyatakan bahawa ia adalah rentetan. Di sini walaupun adalah satu ciri yang tidak wujud dalam cara yang sama dalam PHP, tetapi agak sama. Ini adalah objek dalam JavaScript. Dan objek adalah jenis Tentera Swiss Pisau struktur data dalam bahawa anda boleh menggunakan mereka untuk apa-apa bilangan perkara. Di sini, sebagai contoh, kita mengisytiharkan berubah-ubah dipanggil quote. Jenis-jenis pembolehubah yang adalah objek. Anda boleh berfikir ini sebagai struct C yang mempunyai kunci dan nilai-nilai. Simbol adalah kunci. FB adalah nilai, nampaknya simbol saham. Koma. Harga adalah kunci yang lain, dan nilainya nampaknya titik terapung, atau bilangan lebih amnya JavaScript, daripada $ 49,26. Jadi PHP tidak mempunyai - kami tidak dilihat dalam objek PHP agak seperti ini, tetapi kita tidak melihat analog, iaitu apa? PENONTON: [didengar]. DAVID MALAN: dengan array bersekutu. Jadi sedangkan PHP mempunyai array bersekutu sintaks yang sentiasa sedikit supaya berbeza - kita melihat kurungan persegi. Kami melihat anak panah pelik simbol. JavaScript mempunyai objek, tetapi ini adalah kebanyakannya perbezaan semantik dan sinonim yang berbeza untuk sekarang. Walau bagaimanapun, sebagai diketepikan, PHP juga mempunyai objek dengan cara yang Jawa dan lain-lain bahasa mempunyai objek dalam pengaturcaraan berorientasi objek. Tetapi kita akan menggunakan ini hanya untuk jenis data untuk sekarang. Objek dan array bersekutu. Yang ini mungkin membuat ia sedikit lebih jelas. Berikut adalah mengapa objek berguna. Apabila anda mahu untuk mengisytiharkan pelajar, seperti Zamyla, kita boleh sebenarnya merangkumi jadi untuk bercakap dalam yang objek menggunakan kurungan kerinting seperti sebelum sejumlah kunci dan nilai-nilai di sini. Kami mempunyai ID, rumah, dan nama untuk Zamyla, diikuti oleh koma bertitik sebagai biasa pada akhir. Down di sini juga, ini adalah sedikit yang berbeza, tetapi juga sangat kuat hari ini. Berikut adalah pelbagai, dan saya tahu bahawa kerana ada kurungan sehingga persegi atas dan kurungan persegi di bahagian bawah. Dan ini adalah pelbagai apa data menaip nampaknya dalam JavaScript? Ini adalah pelbagai ia kelihatan seperti tiga objek. Dan saya tahu ia adalah satu objek sahaja kerana pendakap kerinting. Dan notis ada pendakap kerinting terbuka, beberapa barangan, menyokong kerinting rapat, koma, kemudian beberapa lanjut, koma, dan kemudian beberapa. Jadi, itu tiga hujah-hujah dipisahkan oleh dua koma. Jadi ini adalah pelbagai tiga objek. Dan setiap satu daripadanya kelihatan anggota pelajar atau kakitangan beberapa jenis, masing-masing dengan satu ID, rumah, dan nama. Tetapi saya telah dipanggil ini sesuatu dipanggil JSON - JavaScript Objek notation. Dan ini adalah satu format data yang benar-benar begitu sangat popular dan tren hari ini bahawa jika anda menulis permohonan yang menggunakan Facebook API, API Twitter, benar-benar hampir apa-apa API luar sana hari ini, termasuk beberapa CS50 itu sendiri, data anda kembali tidak dalam sekolah format CSV lama. Kerana ingat bahawa CSV adalah super mudah. Ia hanya tiang dipisahkan dengan tanda koma. JSON data memberikan anda lebih metadata. Ia mengaitkan utama dengan setiap nilai yang begitu mereka tidak perlu hanya menganggap bahawa ruangan sifar adalah satu nilai, kolum satu adalah satu lagi, kolum dua adalah satu lagi. Segala-galanya dalam objek JSON sini adalah jenis diri-menerangkan, kerana setiap salah satu nama-nama dalam fail ini mempunyai beribu- menamakan di hadapannya sebagai tali dipetik. Jadi mari kita lihat pada beberapa contoh di sini. Biar saya pergi ke dalam perkakas. Dan biarlah saya pergi ke vhost kami direktori ke awam. Dan biarlah saya pergi ke dalam JavaScript direktori. Dan mari kita pergi ke hadapan dan membuka dom-0.html, di mana DOM hanya bermakna dokumen model objek. Ia barangan pokok itu untuk yang Saya disebut lebih awal. Dan biarlah saya mencadangkan yang berikut. Berikut adalah laman web yang badan adalah agak mudah. Jadi turun di sini di bahagian bawah, sedar saya mempunyai bentuk yang. Kami telah melihat orang-orang sebelum ini. Ia mempunyai dua input, satu daripadanya mempunyai ID nama, satu daripadanya mempunyai sejenis mengemukakan, dan yang pertama Jenis seseorang adalah teks. Jadi ini sebenarnya bunyi agak mudah. Mari kita pergi di sini. Mari kita kembali ke halaman ini di sini. Mari kita pergi ke dalam localhost, dan pergi ke dalam direktori JavaScript kita, dan pergi ke dom-0, dan di sini kita mempunyai bentuk ini. Jadi, itu nampaknya semua halaman ini tidak. Ia mempunyai medan nama dengan butang Submit. Tetapi saya tidak akan menggunakan PHP di sini. Saya akan lakukan sebelah pelanggan semua jadi untuk bercakap dalam JavaScript seperti berikut. Perhatikan bahawa saya memang diberi nama bidang input ini yang unik pengecam, yang akan benar-benar menyelamatkan saya sedikit masa dalam seketika. Dan notis saya diperkenalkan tag lagi dalam kepala halaman web saya,  tag. Jadi ia dalam pengertian ini bahawa JavaScript adalah bahasa pengaturcaraan pelanggan-sampingan. Dalam kes ini, seperti CSS, saya telah ia lurus dalam HTML saya. Tetapi notis saya mengisytiharkan fungsi yang kelihatan sedikit seperti PHP sintaksis, tetapi ini sebenarnya JavaScript, kerana sekali lagi, ia pelanggan-sampingan dalam pelayar. Dan mengambil meneka apa ini akan lakukan, walaupun beberapa sintaks di sini adalah baru. PENONTON: Bertanya khabar kepada sesiapa. DAVID MALAN: Ia akan bertanya khabar kepada sesiapa yang melawat laman ini. Jadi bagaimana? Jadi notis, ternyata dalam JavaScript ada amaran fungsi (). Ini adalah fungsi yang sangat jenis menyedihkan benar-benar hanya cenderung untuk menyakitkan hati pengguna. Ia bukan salah anda benar-benar perlu menggunakan biasanya, tetapi ia cepat dan kotor cara semacam mencetak sesuatu kepada pengguna grafik muka, seperti pelayar. Perhatikan di sini bahawa saya telah mendapat rentetan dalam petikan tunggal. Ia ternyata bahawa tidak seperti C, JavaScript sebenarnya boleh mempunyai anda menggunakan tunggal memetik, dan terus terang ia hanya jenis konvensyen gaya di kalangan JavaScript pengaturcara untuk menggunakan tanda petikan tunggal. PHP, mereka sebenarnya mempunyai sedikit makna yang berbeza. Tetapi untuk sekarang, hanya tahu bahawa itulah satu-satunya sebab. Konvensyen dalam JavaScript sering untuk menggunakan tanda petikan tunggal, tetapi kita boleh menggunakan petikan berganda di kedua-dua tempat juga. Jadi ini adalah menarik. Ingat masa lepas bahawa kami bahawa gambar pada skrin yang menarik pokok di mana anda mempunyai nod HTML, dan mengetuai nod, dan nod badan, dan kemudian beberapa teks. Tetapi ada satu nod khas di bahagian paling atas yang saya dipanggil dokumen itu. Nah, ternyata di dalam JavaScript, mana-mana kali anda menulis program dalam JavaScript dalam pelayar, anda mempunyai akses kepada pembolehubah global khas. Sama dalam semangat untuk superglobals PHP ini, satu ini dipanggil dalam semua dokumen kecil. Ia seperti struct, tetapi struct ini juga mempunyai fungsi di dalamnya. Jadi struct C hanya mempunyai data biasanya. Tetapi objek JavaScript kerana ini secara teknikal juga mempunyai fungsi, atau dikenali sebagai kaedah, di dalamnya. Dan anda boleh memanggil fungsi dalam objek ini agak literal melakukan yang nama, dot, dan kemudian nama majlis itu, atau lagi kaedah. Ia hanya sinonim, benar-benar. Dan apakah fungsi ini lakukan? Anda boleh jenis meneka dari namanya. Dapatkan unsur oleh ID. Jadi ini akan mencari laman web, mencari pokok itu, mencari apa sahaja nod, elemen AKA, mempunyai ID unik quote unquote nama. Dan kemudian apa yang saya akan lakukan? Saya akan mendapatkan nilai dalam nod dalam pokok itu, dan saya akan entah bagaimana bertanya khabar kepada nama itu. Jadi mengambil tekaan, walaupun kita tidak telah melihat ini lagi, apa yang ditambah dengan simbol bermakna di sini dan di sini mungkin? PENONTON: Concatenate. DAVID MALAN: Concatenate. Betul, dan ini adalah hanya jenis bentuk keputusan orang dibuat tahun lalu. Dalam PHP, anda concatenate perkara dengan titik. Dalam C, anda melompat melalui beberapa gegelang dan fungsi seperti strcopy () atau hubungi strcat () atau apa-apa fungsi lain. Tetapi dalam JavaScript, anda menggunakan plus. Jadi ini hanya concatenating tiga tali - hello, nama, dan kemudian tanda seru. Oleh itu, apabila dan mengapa fungsi ini dipanggil walaupun? Nah, mengambil tekaan daripada HTML di bahagian bawah. Mengapa menyambut () dipanggil, atau bila? Rupa-rupanya, sebagai terbaik yang saya boleh beritahu, pada mengemukakan, apabila borang ini dihantar, Saya akan melakukan apa yang di dalam petikan ini. Dan secara khusus, saya akan memanggil menyambut () dan kemudian kembali palsu. Nah, mari kita lihat apa bersih kesan di sini ialah pertama. Jadi biarlah saya teruskan dan menaip , katakanlah, Loren, Hantar. Hello Loren. Mari kita lihat jika mungkin ini hanya pelaksanaan bertuah. Nope. Jadi ia menaip apa sahaja menamakan saya sebenarnya diletakkan di sana. Tetapi notis apa yang tidak berubah-ubah. URL ini masih dom-0.html. Tiada register.php. Tidak ada fail kedua. Tidak ada sifat tindakan. Jadi apa yang salah nyata ini mungkin lakukan? Mengapa saya memanggil menyambut () dan kemudian kembali palsu mungkin? Apa yang biasanya berlaku apabila anda klik Hantar pada bentuk yang walaupun kita mempunyai dilihat pada minggu lepas? PENONTON: [didengar]. DAVID MALAN: Ia pergi di suatu tempat, bukan? Ia pergi kepada beberapa URL destinasi. Tetapi saya tidak mahu itu berlaku di sini. Saya mahu laman web saya untuk berterus- dinamik seperti Gmail, di mana sekali anda di sana, anda tinggal di sana. URL tidak berubah dengan cara yang menunjukkan keseluruhan laman web tersebut memuatkan semula. Sebaliknya, saya hanya mahu menukar sesuatu seperti mencetak sesuatu di sini pada skrin. Nah biar saya membersihkan ini sehingga sedikit. Izinkan saya membuka tidak dom-0, tetapi biarlah saya membuka dom-2. Hanya supaya anda telah melihat beberapa sintaks sini. Ia ternyata bahawa apa yang kita hanya tidak menggunakan JavaScript mentah. Jadi ini adalah benar-benar bahasa JavaScript. Sebahagian daripada anda mungkin tahu perpustakaan yang dipanggil jQuery. Jadi jQuery tidak sama perkara seperti JavaScript. Ia hanya sebuah perpustakaan yang benar-benar pintar lelaki menulis dan dipopularkan seperti bahawa hampir semua orang di dunia sekarang menggunakan jQuery apabila menggunakan JavaScript. Dan pada pandangan pertama, jujur, ia kelihatan sedikit lebih samar. Tetapi anda akan mencari, terutamanya jika anda pergi ada untuk projek akhir anda dengan web pembangunan, anda akan mendapati bahawa ini membersihkan benda-benda dan menjimatkan cukup beberapa baris kod. Jadi mari kita hanya pandang pada bagaimana borang ini bekerja. Perhatikan apa yang saya mengeluarkan nampaknya dari HTML saya? Tidak ada pada pengendali mengemukakan jadi untuk bercakap. Tidak ada sifat. Oleh kerana anda tahu, apa Saya tidak suka? Saya berasa seperti kita telah jatuh ke tabiat lama di sana. Sama seperti ia telah mula merasai ceroboh untuk bergaul dengan kedua-dua CSS HTML, kerana anda jenis membuang bahasa yang berbeza di seluruh tempat, juga tidak ini mula berasa seperti jalan raya yang tidak baik turun ke bawah di mana Saya meletakkan kod JavaScript dalam saya HTML dan bukan pemfaktoran keluar. Jadi, itu pelajaran di sini. Dalam dom-2.html, saya pemfaktoran keluar. Dan saya melakukan perkara-perkara sedikit berbeza. Buat masa ini, saya akan melambai tangan saya apa ini benar-benar tidak di bawah hood. Tetapi hanya untuk sekarang menganggap bahawa yang pertama baris kod di perpustakaan ini dipanggil jQuery hanya bermakna apabila dokumen siap, lakukan yang berikut. Kerana laman web boleh mengambil masa untuk beban. Anda mungkin di internet yang perlahan sambungan, dan ia mungkin berputar dan berputar, dan akhirnya ia dimuatkan. Yang baris kod hanya mengatakan tunggu sehingga keseluruhan halaman bersedia, dokumen itu siap, sebelum melaksanakan kod ini. Dan kini notis, ini mungkin yang paling berguna pertama mengambil dari jQuery. Keturunan ini di sini adalah hampir sama dalam semangat ke garisan lebih lama di sini. Manakala dalam kod JavaScript mentah, terdapat Wujud objek global dokumen yang mempunyai fungsi yang dipanggil getElementById (), orang-orang yang menulis jQuery dipermudahkan bahawa untuk hanya mengatakan tanda dolar, dan kemudian di dalam kurungan meletakkan dua petikan, dan kemudian meletakkan simbol hash diikuti oleh ID unik anda mahu merebut. Jadi ini adalah bersamaan dengan document.getElementById. Sementara itu,. Mengemukakan hanya bermakna pada penyerahan apa jua bentuk anda merujuk kepada di sebelah kiri, pergi ke hadapan dan melaksanakan ini. Tetapi ini kini rasa ingin tahu juga. Apa yang pelik mengenai apa Saya menekankan di sini? Bukan sahaja ia jenis sintaksis baru, juga ada sesuatu yang hilang. PENONTON: Ia hanya dipanggil fungsi? Ia tidak dipanggil amaran? DAVID MALAN: Yeah. Nah, jadi berjaga-jaga () turun di sini, untuk berlaku adil. Tetapi tidak ada menyebut daripada nama, seperti yang anda tahu, atau foo sesuatu di sini. Dan sesungguhnya, ini adalah salah satu ciri-ciri JavaScript yang agak berkuasa, tetapi juga agak baru. Dan PHP sebenarnya mempunyai ini juga. Biar saya pergi ke hadapan dan melakukan sesuatu yang cepat sebenar. Biar saya pergi ke hadapan dan meletakkan ini di sini. Biar saya melakukan ini. Fungsi. Mari kita panggil pengendali ini (). Fungsi pengendali jadi untuk bercakap. Sesuatu yang mengendalikan beberapa operasi. Biar saya membersihkan lekukan saya. Dan meletakkan ini di sini. Dan meletakkan bahawa di sini. Yep. OK. Jadi sekarang saya mempunyai fungsi yang dipanggil Pengendali () bahawa saya tidak benar-benar tahu apa yang dilakukan yet. Ia hanya masih mempunyai barangan itu. Whoops. Mengambil masa terlalu banyak. Mari kita melakukan ini. Baiklah. Maaf. Baiklah. Biar saya melakukan ini. OK. Yang kelihatan baik dan lurus kemukakan sekarang. Biar saya melakukan ini. Melakukan ini. Dan OK. Jadi sekarang, mari kita meletakkan ini di sini. Pengaturcaraan tidak lebih cepat. OK. Jadi sekarang, mari kita kembali ke di mana cerita itu bermula. Sebelum ini, saya berkata bahawa garis ini di sini bermakna apabila dokumen itu siap, pergi ke hadapan dan melakukan ini. Apa yang saya mahu lakukan? Nah khusus, saya mahu pergi ke hadapan dan melakukan yang berikut. Melaksanakan baris ini kod, dan kemudian apa yang saya mahu anda lakukan adalah panggilan ini berfungsi apabila bentuk itu dikemukakan. Sekarang ini adalah apa yang menarik. Ini bukan sendiri fungsi. Notis saya tidak meletakkan kurungan di sini dengan cara yang biasa. Saya betul-betul lulus fungsi yang dipanggil Pengendali () ke fungsi lain dipanggil mengemukakan () sebagai hujah sebagai walaupun ia seperti pemboleh ubah. Dan ini adalah salah satu ciri-ciri JavaScript, adalah fungsi diri benar-benar hanya objek. Malah, mereka benar-benar hanya pembolehubah sejenis. Dan jika nama fungsi tersebut Pengendali (), tidak ada sebab saya tidak boleh lulus dalam sebagai hujah di sini. Dan ini bermakna apabila bentuk dengan ID demo adalah dikemukakan, memanggil fungsi ini. Tetapi sekarang jika saya membuat asal semua ini, mengapakah saya mungkin melakukan seketika ini dahulu? Nah, ini adalah fungsi tanpa nama. Kerana terus-terang, saya sedar mengapa saya mengganggu membuang masa mengisytiharkan fungsi dipanggil pengendali () hanya untuk memanggil dalam satu dan hanya satu tempat? Jika saya tidak perlu nama, dan saya tidak perlu memanggil lebih daripada satu tempat, mari kita hanya melaksanakan fungsi betul di mana saya memerlukannya. Dan sebagainya JavaScript dan PHP menyokong apa yang dipanggil fungsi tanpa nama yang membenarkan saya untuk melakukannya dengan tepat bahawa di sini. Tetapi kita hanya menggaru permukaan. Mari kita mengusik dengan hanya beberapa contoh terakhir di sini. Jika saya pergi ke quote.php. Perhatikan bahawa ini adalah sebenarnya satu PHP fungsi, program PHP, yang saya tulis yang menjangka parameter HTTP dipanggil simbol, dan saya boleh lulus dalam nilai seperti FB. Dan jika kita benar-benar melihat sumber kod, ini pertanyaan laman web percuma dipanggil Yahoo Kewangan, seperti p-set tujuh, dan ia kembali kepada saya sesuatu dalam nampaknya format dikenali adalah JSON - JavaScript Objek notation. Ia hanya objek. Notis pendakap kerinting, sebut harga, kolon, dan koma. Sekarang Sementara itu, ini adalah agak sejuk. Kerana saya mungkin boleh menggunakan pengaturcaraan bahasa untuk menjana URL yang kelihatan seperti ini dinamik, betul? Saya boleh menukar ini kepada Google dan kembali Google harga saham sebanyak $ 1,017.55. Jadi mari kita lihat jika kita tidak boleh menggunakan ini sekarang. Biar saya pergi ke ajax-0 di sini, yang kelihatan seperti berikut. Ia hanya sebuah laman web yang mempunyai borang dengan butang. Biar saya di sini teruskan dan taip YHOO untuk simbol saham Yahoo, klik Dapatkan Quote, dan kini sedar saya telah mendapat amaran dengan 32,86. Biar saya sebenarnya pergi kepada versi yang pelamun halaman ini, versi dua, dan taip katakan Microsoft, MSFT. Dapatkan Quote. Dan kini, dan tanpa amaran. Perhatikan di mana ia berkata Harga yang akan ditentukan? Terdapat adalah yang paling mudah contoh-contoh yang mengisyaratkan apa GChat, dan Facebook Sembang, berbual dan Gmail, dan apa-apa lain laman web yang melakukan dengan sebenarnya perubahan laman web. Notis ini. Biar saya memuat semula halaman. Izinkan saya membuka Inspektor Chrome. Biar saya pergi kepada unsur-unsur tekan di sini. Sekarang notis jika saya mengezum turun di sini dan membuka sehingga ini, notis bahawa ini adalah saya HTML DOM - model objek dokumen saya. Ini adalah HTML saya. Tetapi sekarang notis, walaupun ia akan untuk menjadi sedikit sukar untuk melihat ia dalam kedua-dua tempat sekaligus, saya menaip di FB di sini, menonton bahagian bawah skrin sahaja. Ia sebenarnya mengubah HTML saya dengan cepat. Dan ia melakukan ini cukup sekadar dengan melakukan sesuatu seperti ini. Jika saya membuka ajax-2, notis melaksanakan sesuatu yang seksi sebagai itu, walaupun ia agak hodoh, tetapi sebagai canggih seperti yang fungsi, ia mempunyai beberapa HTML di bahagian bawah. Tetapi notis saya digunakan untuk tag. Kami telah tidak digunakan sebelum ini, tetapi ini adalah seperti, tetapi ia tidak memaksa segala-galanya ke barisan baru. Ia hanya menjadikan rantau segi empat tepat pada baris yang sama pada asasnya. Perhatikan bahawa saya memberikannya ID harga. Dan ternyata dengan menggunakan yang sama JavaScript perpustakaan, saya mempunyai fungsi yang dipanggil quote () yang dipanggil bila-bila masa borang yang dikemukakan. Dan apa yang saya lakukan adalah ini. Saya mengisytiharkan pembolehubah dalam JavaScript dipanggil url, menyimpan nilai quote.php? simbol =. Dalam erti kata lain, saya sendiri bermula untuk menyediakan permintaan HTTP, dan kemudian Saya concatenating sebiji dengan ditambah dengan apa sahaja elemen dengan ID yang simbol adalah, notis adalah bahawa medan teks sampai di sini. Jadi hanya suka kami mempunyai bentuk pada masa lalu. Dan kemudian ia ternyata dalam jQuery, jika anda panggilan. Val (), yang menyeru dari Val a fungsi, fungsi nilai, yang mendapat apa sahaja yang pengguna telah ditaip masuk Dan kemudian semua trafik rangkaian yang berlaku adalah ini. $. GetJSON. Dan sebagai diketepikan, tanda dolar adalah hanya catatan trengkas. Ia benar-benar jQuery.getJSON. Dapatkan saya JSON dari URL ini, dan apabila permintaan itu datang kembali, panggilan ini fungsi dan lulus sebagai hujah apa sahaja pulang dari pelayan. Jadi, dalam erti kata lain, jika saya kembali ke penyemak imbas, dan saya kembali ke quote.php, pelayar apa saya lakukan adalah mendapatkan Sebahagian ini data. Dan apabila saya pergi ke laman web ini di sini, notis jika kita bukannya pergi ke rangkaian Jenis tab dan jelas, dan kemudian di sesuatu seperti GOOG untuk Google dan Dapatkan Quote, notis halaman tidak berubah. Tetapi permintaan HTTP itu dibuat, dan apa datang kembali di sini jika kita melihat tindak balas adalah sejumlah besar JSON kita diakses akhirnya dengan baris ini mudah di sini. Data adalah apa yang telah mendapat dari pelayan. Harga adalah nama utama saya mengambil berat tentang. Jadi data.price memberikan saya itu. Sekarang pula, dan ini adalah contoh yang lalu. Anda boleh melakukannya lagi lebih dengan halaman. Satu benar-benar, baik dua. Kita boleh membawa balik tag, jika anda ingat ini. Itulah JavaScript. Kita boleh berbuat demikian. Sangat menarik. Kami akan meninggalkan bahawa cliffhanger a. Tetapi yang lebih excitingly, anda boleh melakukan perkara-perkara seperti ini. Jika saya pergi ke lokasi geo-1, ternyata Chrome yang tahu bahawa kita berada di latitud longitud 42,37. -71,10. Jadi ada lebih ada di pelupusan anda. Tetapi lebih kepada yang minggu depan. Jumpa anda hari ini.