[Bermain muzik] DAVID MALAN: Ini adalah CS50, dan ini adalah permulaan minggu lapan. Dan kami begitu teruja untuk mengalu-alukan kembali, kejutan besar, Ramon CS50 sendiri Galvan, kanan semakin meningkat yang telah menghabiskan beberapa bulan yang lalu sejak Julai di LA, di Hollywood, benar-benar bekerja pada TV jenama baru Persembahan dipanggil Colony, pencipta yang sebenarnya adalah alum Harvard sendiri. Dan supaya kami sangat teruja untuk melihat ini debut di rangkaian Amerika Syarikat Januari ini. Jadi harap sabar menunggu untuk itu, dan untuk lebih Ramon untuk minggu-minggu akan datang. Tahu sekarang bahawa akhir sudah dekat. Dan apa ini bermakna bahawa tidak ada semua yang banyak meninggalkan CS50, sedih untuk mengatakan. Kami mempunyai hanya tiga masalah set left-- ada masalah set six-- yang di tangan anda sekarang atau akan menjadi, dijadualkan lewat ini week-- bertujuan untuk merapatkan dunia kami baris arahan, di mana kami telah menghabiskan sebahagian besar masa kita menggunakan C, dan dunia pengaturcaraan web. Well, anda akan melihat banyak idea-idea dipinjam dari kerja baris arahan, tetapi juga banyak baru dan idea yang menarik yang juga akan menjadi germane untuk aplikasi mudah alih dan teknologi, lebih umum, yang anda lelaki yang biasa pada masa kini semua pada komputer riba dan telefon dan sebagainya. Jadi, anda tidak akan melaksanakan laman web, atau laman web yang per se, tetapi pelayan web sebenar. Anda akan menulis seluruh pelayan web ditulis dalam C, yang tujuan dalam hidup adalah untuk menerima permintaan HTTP, orang-orang sampul surat maya kita terus bercakap kira-kira, dan benar-benar bertindak balas sama ada dengan beberapa content-- statik seperti dot HTML fail, atau titik JPEG atau mana-mana nombor lain fail, atau fail PHP mana web anda pelayan akan mentafsir bahawa PHP kod dan meludah keluar keputusan. Sekarang, kita telah menyediakan anda dengan agak sedikit rangka kerja untuk kitab itu memang kod pengedaran bagi masalah menetapkan enam adalah lebih 1,000 garisan panjang, banyak yang komen, menjadi fair-- tetapi ini benar-benar bermakna menjadi peluang untuk mendapatkan tangan anda kotor menyelam ke dalam projek yang agak besar yang kami telah secara khusus mengukir keping untuk anda, supaya benar-benar apabila anda keluar CS50 dan memasuki dunia sebenar pengaturcaraan dan mahu melibatkan diri dalam apa-apa bilangan projek, anda akan mempunyai lebih besar keselesaan memuat turun beberapa sumber kod, beberapa sumber terbuka projek di web, dan menyelam dalam dan membuat perubahan yang anda lihat patut. Masalah menetapkan tujuh akan menjadi kira-kira membuat aplikasi berasaskan web anda sendiri yang mengambil input dinamik dan menghasilkan output dinamik dalam bentuk sebuah laman web etrade.com seperti. Dan masalah menetapkan lapan akan memberi tumpuan kepada penilaian bahasa lain yang dikenali sebagai JavaScript. Sementara itu, akhir projek adalah di kaki langit. Apa yang dipanggil pra-cadangan adalah kerana seminggu dari hari ini. Pra-proposal-- setiap spesifikasi, yang pada website-- CS50 adalah satu peluang yang cukup santai untuk anda menghantar e-mel yang cukup ringkas kepada rakan-rakan pengajaran anda hanya untuk memaklumkan dia atau beliau apa yang anda fikirkan, untuk menggunakan dia atau dia sebagai lembaga yang berbunyi. Dan mempunyai kewarasan yang check-- sama ada yang anda fikirkan tentang menggigit luar terlalu banyak atau mungkin terlalu sedikit, atau mungkin anda tidak tahu apa dan ingin melibatkan diri dalam perbualan. Selepas itu adalah satu cadangan yang dan laporan status, hackathon CS50 yang dipanggil di sini di Cambridge untuk Harvard dan Yale pelajar sama-sama. Projek akhir ini pelaksanaan adalah kena dibayar. Dan kemudian yang adil CS50 sini, di Cambridge, dan juga satu lagi di New Haven. Jadi cadangan itu, kita lihat pada laman web untuk butir-butir itu. Tetapi yang lebih excitingly, juga, adalah peluang untuk mendapatkan tangan anda kotor, dan minda anda terbuka untuk keseluruhan sekumpulan topik dan alat dan teknik yang sampingan sukatan pelajaran teras kursus ini, tetapi masih berkaitan. Dan juga batu loncatan yang baik untuk melakukan projek akhir benar-benar sejuk yang pergi baik di luar bahan yang kami telah dilindungi secara rasmi dalam masalah menetapkan atau dalam kuliah. Oleh itu, pergilah ke laman web CS50 untuk seluruh jadual seminar. Jika anda tidak mendaftar lagi, itulah denda. Teruskan dan mendaftar diri dan kita akan susulan dengan link live streaming, hari dan masa adalah di laman web. Dan semua akan direkodkan dan meletakkan talian jika anda tidak boleh membuat hari dan masa tertentu. Apa yang akan berlaku thereafter-- baik, sudah tentu, ada hackathon CS50. Gambar ini, ingat, dari minggu sifar diambil sekitar 04:00 suatu petang dalam tahun-tahun yang lalu. Pameran CS50, yang sekali lagi akan berlangsung di kedua-dua bandar. Dan kemudian, hanya untuk menanam benih, walaupun kita masih mempunyai satu bulan plus kiri semester, jika anda ingin untuk menyertai ajaran CS50 sendiri kakitangan, dan anda ingin memulakan berfikir tentang menjadi CA, atau rakan-rakan pengajaran, tahu bahawa kami akan mula bercakap lebih lanjut mengenai itu kemudian semester ini. Tetapi digambarkan di sini adalah sebahagian besar daripada pasukan tahun ini. Dan sebagainya, PHP-- dan saya begitu sedih minggu lepas bahawa [? Allyse?] Sila pergi kepada usaha untuk mendapatkan kita ini prop yang indah bahawa saya tidak akhirnya menggunakan, jadi ia benar-benar hanya melihat jenis bodoh bahawa kita mempunyai spade duduk di sini semua hari rabu lepas, dan sudu kecil. Tetapi ini adalah metafora saya cara cuba untuk cat gambar sebabnya kita beralih dari C ke bahasa seperti PHP. Dan yang sama boleh dikatakan apa-apa beberapa languages-- Java, Python, Ruby atau tandan others-- tetapi sedangkan di C, misalnya, menulis program dalam C mungkin biasanya menjadi seperti mengambil sudu seperti ini dan menggali lubang di tanah, di pasir atau kotoran. PHP membolehkan anda mengambil banyak gigitan lebih besar daripada masalah ini, menulis kod yang jauh lebih rendah menggunakan alat yang jauh lebih kecil, kerana ada banyak lagi fungsi menyambung masuk. Sekarang, jika kita benar-benar dramatik, kita akan mempunyai sesuatu untuk spade di sini, tetapi jadi ia. Sementara itu, yang lain metafora kami menetapkan adalah, sudah tentu, anda boleh menggunakan sesuatu seperti sepana tukul dalam sesuatu seperti paku. Tetapi sudah tentu, hak alat untuk penggunaan akan menjadi tidak begitu banyak bahasa dipanggil C-- dan sekarang saya hanya marah [? Sanders,?] Mungkin, kami akan menetapkan bahawa later-- supaya alat hak untuk menggunakan kerap tidak akan menjadi ini alat tahap paling rendah. Dan sesungguhnya, C bukan bahasa yang sebahagian besar daripada anda pernah akan digunakan, atau semestinya harus menggunakan lagi. Dan sebenarnya, sedikit secret-- masa sahaja Saya menggunakan C diri saya adalah cukup banyak antara September dan Disember setiap jatuh semester. Dan itu kerana kita menggunakannya sebagai satu peluang untuk mengajar asas-asas pengaturcaraan, dan dengan itu komputer asas-asas sains, data struktur, algoritma dan like-- tetapi dengan cepat akan anda lihat sekarang bahawa sintaks dan idea-idea yang mendasari C begitu hebat dipindah milik kepada yang lebih moden bahasa tahap yang lebih tinggi, seperti PHP dan Python dan Perl dan Jawa dan Objektif-C-- sebenarnya, tidak begitu banyak Objektif-C-- tetapi Swift, ini yang lebih baru bahasa yang ramai di antara anda akan kemudian cuba-cuba dengan anda projek akhir. Jadi tanpa berlengah-lengah lagi, mari kita sebenarnya menggunakan PHP untuk menyelesaikan beberapa masalah. Ingat bahawa sejak awal lagi, lepas CS50 IDE minggu, kami hanya digunakan, kita menulis program kecil imut yang hanya berkata, "Hello dunia." Dan kemudian saya disimpan dalam fail yang dipanggil hello.php. Dan kemudian saya berlari arahan ini. Dan mengapa? Dalam bahasa Inggeris, apa yang berlaku di sini? Apa yang saya lakukan apabila Saya berlari arahan ini? Ya? PENONTON: Ada beberapa fungsi PHP yang berbunyi apa yang dalam- memahami bahawa. DAVID MALAN: Baik, ada beberapa fungsi PHP-- dan biarlah saya menjadi lebih khusus, ada program yang dikenali sebagai PHP, a.k.a. Jurubahasa, yang memahami kandungan hello.php, dan mentakwilkannya atas ke bawah, kiri ke kanan, dan melakukan apa yang mereka perintah katakan. Perintah dalam hello.php, sudah tentu, hanya sumber code-- fungsi dan pembolehubah dan gelung dan sebagainya, yang kita sendiri telah mula menulis dalam PHP. Tetapi tidak seperti C, yang bahasa yang disusun, PHP anda hanya menulisnya, dan menjalankannya. Anda melangkau langkah orang tengah daripada ditukarkan kepada sifar dan satu, dan kemudian menguruskannya. Dan supaya apa yang terbalik ini? Mengapa kita ponteng langkah? Mengapa bahasa yang lebih moden cenderung untuk melangkau langkah ini? Apakah faedah? Atau hanya intuitif? Walaupun kita tidak ada bertulis banyak PHP sebelum ini, apa yang bermanfaat tentang tidak menyusun kod anda yang anda fikir? Tidak? Tidak melakukan? Menggaru kepala anda? Yeah. PENONTON: Lebih dinamik. DAVID MALAN: Lebih dinamik? Apa yang awak maksudkan? PENONTON: [didengar] DAVID MALAN: OK, baik, sehingga bergantung kepada input, anda tidak perlu untuk menyusun setiap kali. Dan ia benar-benar adalah semudah bahawa- apa gunanya meneruskan untuk menyusun kod anda? Ini adalah hanya satu langkah itu making-- ini memerlukan, sejak beberapa lalu minggu, dua kali ganda lebih banyak langkah-langkah sebagai hanya menjalankan program anda. Ia adalah berguna dalam melihat bahawa anda melihat beberapa mesej ralat dan sebagainya, tetapi ia masih hanya satu langkah yang menjengkelkan. Dan sebagainya pengaturcara sedar dari masa ke masa, mengapa tidak kita mula menulis bahasa yang tidak memerlukan langkah agak mekanikal, supaya hanya boleh menulis kod anda dan menjalankannya. Tetapi apa yang harga yang kita lihat kita dibayar minggu lepas, dengan satu contoh tertentu? Ya? Kelajuan. Jadi [? apa yang?] jurubahasa sedikit perlahan, kerana sifar dan satu adalah bagus dan pantas untuk komputer untuk memahami, kerana Intel CPU, atau apa sahaja, hanya memahami apa yang berlaku pada dengan orang-orang corak bit. Manakala seorang jurubahasa merupakan program yang benar-benar mempunyai untuk membaca sumber Ascii yang kod yang anda telah menulis, dan menukarkannya, jadi untuk bercakap, atau memikirkan bagaimana ia bertukar akhirnya kepada sifar dan satu. Oleh itu, ia hanya mengambil masa sedikit sedikit hit prestasi. Jadi ia sedikit keseimbangan. Sekarang jika kita melakukan ini di sini, biarlah saya teruskan niat contoh seperti berikut. Jika saya pergi di sini, fail baru, saya akan untuk menyelamatkan hal ini lagi hello.php. Dan sekarang saya akan pergi ke hadapan dan berkata, "print hello dunia" - dan ingat bahawa saya boleh menggunakan cetak, saya tidak perlu menggunakan cetak-F. Dan kini turun di sini, jika saya lakukan PHP daripada hello.php, saya huh-- seolah-olah tidak telah mentafsirkan ia. Apa yang saya buat salah? PENONTON: Gelang bersudut. DAVID MALAN: Ya, anda perlu bahawa atas kurung sudut atas. Jadi ia adalah jenis menjengkelkan, tetapi anda mendapat digunakan untuk dengan cepat. Jika saya perlu menulis kod PHP, saya umumnya perlu memberitahu program ini, atau memberitahu jurubahasa, hey PHP, di sini datang beberapa kod PHP. Dan kemudian untuk menjadikannya lebih menarik, saya akan ini tidak menutup dengan ini, tetapi dengan tanda sudut hanya soalan kurungan, supaya sekarang turun di sini, sekiranya saya ini lagi, sekarang Saya mendapat hasil yang dikehendaki. Sekarang mari kita melakukan pengoptimuman sedikit, hanya supaya anda lihat sebelum ini. Ini adalah jenis menjengkelkan bahawa saya perlu menjalankan PHP ruang hello.php, kerana pada saya lalu hanya boleh menulis slash dot nama program, yang merupakan jenis yang bagus. Ia adalah jenis pengalaman pengguna yang lebih baik. Jadi, ternyata anda boleh melakukan ini dalam PHP dengan i following-- boleh menggunakan ini agak samar mantera di atas di sini, yang biasanya dipanggil shebang yang, di mana ini adalah simbol tajam, boleh dikatakan, ini adalah bang a atau tanda seru. Dan ini sekarang adalah jalan untuk program pada sistem Linux biasa yang dipanggil alam sekitar, atau plates. Dan ini garis ini-- cerita panjang garis short-- satu hanya berkata, hey komputer, mencari PHP jurubahasa bagi saya dalam alam sekitar, merasa dalam memori anda, jadi untuk bercakap. Dan apa yang baik sekarang, bahawa jika saya pergi ke sini, Yang boleh saya lakukan dot slash hello dot php, or-- hmm. Tiada kebenaran. Well, anda akan melihat lebih banyak daripada ini dengan masalah menetapkan tujuh, jika anda belum, dengan kebenaran. Ia ternyata bahawa saya perlu untuk melaksanakan arahan ini dipanggil [? chamod?] untuk perubahan mode-- tambah x hello.php. Saya perlu [didengar] ini satu tambahan langkah yang memberitahu komputer saya, membuat laku hello.php. Dan sekarang menonton apa happens-- dot mengurangkan hello.php, ia hanya berjalan. Saya tidak perlu untuk menentukan jurubahasa lagi. Dan saya boleh membuat ia lebih cantik, lagi, jika saya menamakan semula perkara ini. Jika saya bergerak hello.php hanya Hello-- supaya notis di atas sebelah kiri, nama program ini adalah sesungguhnya kini hanya Hello. Sekarang saya boleh membuat ia kelihatan seperti program C, walaupun ia ditulis dalam PHP-- atau terus-terang apa-apa bilangan bahasa lain. Jadi peningkatan marginal, ada perbezaan fungsi. Tetapi ia hanya rasa ingin tahu sedikit sekarang, supaya anda boleh menulis program dalam mana-mana bahasa, dan pengguna tidak perlu tahu atau peduli apa yang mereka berada. Nah, mari kita lihat yang lebih contoh menarik sekarang bahawa saya melecut terlebih dahulu. Dan ini dipanggil quote.php. Dan ia boleh didapati dalam talian. Dan melihat bahawa ia cukup short-- tetapi ia adalah satu program baris arahan itu akan melihat kenaikan harga saham bagi saya, yang benar-benar akan menjadi germane untuk masalah menetapkan tujuh. Jadi mari kita lihat apa yang saya lakukan. Di bahagian paling atas saya telah mendapat kurungan terbuka tanda tanya PHP. Kemudian saya telah mendapat baris ini, di mana saya yang memerlukan fail yang dipanggil functions.php-- kita akan melihat lanjut mengenai ini dalam sedikit, tetapi ini seolah C versi tajam termasuk, di mana anda mahu pergi termasuk fail lain. PHP panggilan itu memerlukan, walaupun ia juga mempunyai termasuk fungsi. Dan ternyata bahawa function.php adalah hanya sesuatu yang saya tulis sebelum kelas. Saya memasukkannya ke dalam direktori yang sama, kerana Saya mahu mengambil kira beberapa kod yang kita mungkin mahu menggunakan di tempat lain. Sementara itu, anda boleh mungkin membuat kesimpulan apa yang berlaku di sini. Ini adalah sedikit berbeza dari C-- tetapi apa yang saya maksudkan dengan memastikan penggunaan yang betul? Terjemahan ini lebih dari segi teknikal. Apakah keadaan aku berhenti program ini, atau keluar? Ya? PENONTON: Apabila anda tidak mempunyai dua hujah baris arahan. DAVID MALAN: Apabila saya tidak mempunyai menguasai hujah baris. Dan ingat bahawa salah seorang daripada mereka hujah-hujah adalah nama program itu sendiri. Dan yang kedua akan menjadi perkataan lain saya menaip selepas prom. Jadi hanya seperti C, ini adalah cara saya memeriksa, adakah pengguna bekerjasama dan menjalankan program ini seperti yang saya dimaksudkan? Sekarang, ada sesuatu sedikit berbeza dengan C-- pertama sekali kita mempunyai tanda dolar ini, dan apa yang dolar log menandakan dalam PHP? Hanya berubah-ubah. Itulah all-- hanya pembolehubah diikuti oleh apa sahaja yang anda mahu sebenarnya memanggilnya. Perhatikan ada sesuatu hilang dari program PHP saya, sama seperti ia telah hilang lepas minggu, berbanding C, yang adalah apa? Satu jenis, tetapi juga sesuatu yang lain. Tidak ada sesuatu yang function-- fungsi utama. Tidak ada fungsi utama. Anda hanya mula menulis kod anda tanpa bimbang tentang yang agak sewenang-wenangnya konvensyen menamakan beberapa lalai fungsi utama. Jadi arg C adalah hanya benar-benar pembolehubah global yang jurubahasa menyediakan kepada saya. Sekarang, ini adalah menarik. Oleh itu, mencari sehingga barangan. Saham tanda dolar adalah di meninggalkan, itu berubah-ubah saya. Di sebelah kanan, ada nampaknya fungsi dalam PHP dipanggil pencarian yang Saya lulus baris arahan terakhir saya hujah supaya- apa sahaja perkataan itu. Dan kita akan melihat bagaimana ini berfungsi dalam seketika. Dan kemudian akhir sekali saya melaporkan harga. Saya mencetak satu bahagian ini dan itu. Dan ingat, ini adalah cara di PHP-- cara di PHP-- di mana anda tidak perlu lakukan tanda dolar S lagi. Anda hanya boleh menggunakan pendakap kerinting dan pasangkan beberapa pembolehubah. Anda tidak perlu bimbang tentang menggunakan printf dengan cara yang sama. Dan sebagai diketepikan, apabila anda meletakkan pembolehubah di dalam tanda petik seperti ini, anda menggunakan teknik mewah dipanggil interpolasi berubah-ubah. Ia hanya bermakna plug pembolehubah di sini. Dan sebagai diketepikan, sebahagian dari kamu yang datang dari latar belakang pengaturcaraan yang lain, anda tidak boleh menggunakan tanda petikan tunggal sekitar tali untuk melakukan ini. Anda mesti menggunakan tanda petik untuk interpolasi berubah untuk bekerja. Jika tidak anda akan benar-benar melihat orang-orang pendakap kerinting. Jadi akhir sekali, mari kita pergi ke hadapan dan menjalankan ini. Izinkan saya membuat terminal saya sedikit lebih besar. Biar saya pergi ke hadapan dan menjalankan di dalam direktori quote saya. [? CDsource?] [? AM?] [? quote?] PHP quote dot PHP, dan saya akan mencari sesuatu seperti GOOG, yang merupakan simbol ticker, yang dan satu bahagian nama barunya, Alphabet Inc, kos $ 717, pada hari ini. Baiklah, jika kita mahu menjalankan ini lagi, sesiapa sahaja mempunyai satu lagi ticker saham mereka mahu melihat ke atas? Microsoft saya fikir adalah satu ini, MSFT-- $ 53. Saya rasa Yahoo adalah mungkin itu. Dan Facebook adalah bahawa. Jadi apa yang program ini buat? Sihir seolah-olah terbenam dalam fungsi carian. Jadi mari kita lihat yang cepat. Ternyata tidak datang dengan PHP, ia dalam functions.php. Dan kita tidak akan melalui ini dengan terperinci, tetapi notis perkataan pembedahan sini yang pada baris enam daripada functions.php-- Saya benar-benar mengatakan fungsi. Saya nyatakan nama fungsi saya. Saya kemudian menyatakan apa-apa hujah, atau parameter, Saya hendak fungsi yang ke take-- ada jenis. Dan kemudian saya melaksanakannya. Dan saya akan melambai tangan saya pada pelaksanaan, sejak ia betul agak maju sekarang, tetapi kami akan melihatnya lagi sebenarnya dalam seminggu dalam masalah menetapkan tujuh. Tetapi saya boleh membersihkan sehingga ini juga. Saya juga termasuk dalam Kod hari ini versi yang petikan, yang tidak mempunyai fail dot PHP. Kerana apa yang mungkin di atas program yang dipanggil hanya memetik? Bahawa apa yang dipanggil shebang-- yang mantera agak samar yang mengatakan mencari PHP dan kemudian berjalan pada kod saya di sini. Baiklah, jadi yang membawa kita di mana kita berhenti time-- lepas walaupun dengan beberapa contoh yang lebih maju. Sebarang pertanyaan setakat ini kira-kira PHP atau apa yang kita lakukan? No-- hak semua. Ya? PENONTON: Di dalam Fail HTML, melakukan atasmu, [? Adakah awak ?] [? hanya memanggilnya?] a [didengar] PHP fail? DAVID MALAN: Soalan yang baik. Dalam konteks web, yang kami benar-benar akan beralih kepada, anda tidak menggunakan apa yang dikenali sebagai shebang di bahagian atas, kerana server-- web sering program dipanggil Apache atau Microsoft IIS, Maklumat Internet Server, atau apa-apa bilangan lain-lain perisian pelayan web, tahu bahawa apabila ia melihat fail dot PHP, bahawa ia perlu dijalankan jurubahasa di atasnya. Ia tidak melihat bahawa baris pertama. Jadi ini helah baris pertama hanya apabila anda berada menulis baris arahan programs-- yang kami tidak akan melakukan super kerap, tetapi ia adalah cara kita untuk merapatkan contoh C kami kini PHP kami. Jadi mari kita memang merapatkan dunia ini dari dunia baris arahan ke web dengan melakukan yang berikut. Biar saya pergi ke hadapan dan menarik di sini hanya untuk seketika. Jadi, jika kita mempunyai pelayan web, atau sebaliknya jika kita mempunyai komputer riba saya di sini, yang saya akan menarik seperti ini. Dan di sini kita mempunyai internet dalam bentuk tertentu. Dan kemudian di sini, kami mempunyai pelayan di building-- yang ini adalah bagaimana internet works-- dan di sini adalah pelayan dengan beberapa lampu mungkin. Apa yang sebenarnya berlaku antara kedua-dua sambungan? Jadi, dalam bangunan ini adalah pelayan web. Itu hanya komputer yang sedang berjalan beberapa operasi system-- mungkin perisian percuma yang dipanggil Apache, yang CS50 IDE sedang berjalan. Jadi, anda boleh sebenarnya berfikir bangunan ini sebagai bangunan di yang CSt0 IDE disimpan. Itulah di mana anda semua mempunyai akaun, di mana kamu semua mempunyai pelayan web anda sendiri berjalan, kamu semua mempunyai URL anda sendiri yang unik, seperti yang kita mula berbincang, dan anda akan melihat lebih dalam P. menetapkan enam. Berikut adalah komputer riba saya di suatu tempat lagi di internet. Dan apabila saya melawat URL yang tergolong kepada saya, bahawa trafik internet akan kepada pelayan, pelayan ini menerima HTTP request-- seperti mendapatkan index.html dan ia menjawab bahawa laman web. Jadi itulah paradigma umum. Sedangkan segala-galanya sehingga kini hari ini, segala-galanya yang berlaku hanya dalam batasan bangunan ini. Saya menggunakan komputer riba saya, tetapi Saya telah disambungkan ke CS50 IDE, jadi semua program-program saya berlari berada di dalam pelayan itu, sendiri. Tetapi sekarang, mari kita mulakan menggunakan semula PHP untuk menulis beberapa program sebenar yang dihidangkan oleh pelayan web. Dan untuk melakukan ini, saya akan pergi ke ke dalam sejumlah besar contoh yang memperkenalkan idea ini di sini. Jadi ini adalah jenis cara yang mewah menerangkan paradigma pengaturcaraan. Dan sebenarnya, kerana anda keluar CS50 atau bekerja dalam projek akhir, atau mengambil beberapa mengikuti di kelas, anda akan mula untuk melihat bahawa world-- yang terutama setelah membesar dengan bahasa seperti C yang level-- rendah sedar bahawa ada yang lebih baik cara penulisan perisian. Terdapat tertentu corak anda boleh mengikuti, cara-cara tertentu untuk mengatur fail anda dan cara-cara untuk menamakan fungsi anda, jadi cerita yang panjang pendek, dunia telah datang dengan sejumlah besar akronim dan nama-nama jalan pengaturcaraan. Ini hanya teknik yang anda mungkin menggunakan. Dan salah seorang daripada mereka yang dikenali sebagai MVC, untuk Model View Controller. Dan ini adalah hanya untuk sekarang, yang terlalu rumit cara untuk mengatakan bagaimana anda perlu meletakkan sebuah laman web berasaskan PHP-, dalam kes kami. Bagaimana anda mengatur fail anda, bagaimana anda menyusun logik anda, dengan cara yang menjadikannya lebih mudah untuk menulis laman web yang lebih rumit? Dan sesungguhnya kami akan cepat sampai ke sana dengan p-set tujuh. Jadi dalam dunia MVC, anda akan untuk melihat bahawa kod kami boleh umumnya disifatkan sebagai sama ada kod model, atau kod pengawal, atau kod pandangan. Dan saya akan menggampangkan sebagai follows-- pengawal adalah otak program anda, ia adalah di mana semua logik yang menarik berlaku. Jadi segala yang kita telah menulis setakat ini di dalam kelas, jenis seperti pengawal code-- ia mengawal program anda, gelung anda, anda syarat, fungsi anda dan pembolehubah dan semua itu. Views, sekarang, akan menjadi sedikit lebih jelas dalam dunia web. Pandangan adalah estetika laman web anda. Ia adalah apa yang pengguna sees-- imej, jadual HTML, tag HTML, dan semua Selain itu, semua estetik gebu barangan yang tidak begitu sukar untuk menulis, tetapi hanya apa yang anda menjana, adalah pandangan yang dipanggil, estetika. Dan model, akhirnya, akan menjadi pangkalan data stuff-- yang kami akan mula menyelam ke dalam semua lebih Rabu ini. Jadi pengawal logik, pandangan adalah barangan estetik, dan model akan berada di tempat kami menyimpan data sebenar kami. Jadi mari kita lihat ini lebih kukuh dengan contoh berikut. Saya akan pergi ke dalam direktori saya di sini sumber hari ini code-- semua yang boleh didapati dalam talian. Dan saya akan pergi ke dalam versi sifar. Dan di sini is-- mari kita memanggilnya versi sifar laman web CS50. Tidak banyak di sini sama sekali. Ia adalah satu laman web yang sangat mudah yang yang mungkin menggunakan apa HTML tags-- hanya meneka dari contoh yang lalu? Apa itu? H1-- mungkin untuk berani besar tajuk, bahawa logo sehingga atas, CS50. Dan apa lagi yang bermain-main? Ya? PENONTON: Senarai Tertib. DAVID MALAN: list-- Tertib jadi Tag UL dan mungkin beberapa tag LI. Dan jika anda tidak ingat ini, dengan jujur ​​tidak mengapa. Ini adalah jenis berbulu butiran pelaksanaan HTML bahawa anda boleh dengan cepat melihat ke atas dan anda kembali dalam perjalanan anda. Kami akan memberi tumpuan lebih kepada pengaturcaraan idea-idea yang adalah kepingan Semakin banyak jus. Jadi mari kita hanya mengambil yang cepat melihat HTML-- dan sesungguhnya jika saya membuka sumber pandangan di sini, yup, yang yang betul-betul apa yang berlaku di sini. Ada satu tag UL. Bersarang di dalam itu adalah untuk tag LI. Dan kemudian saya meminjam URL yang sukatan pelajaran sebenar di sini. Dan kemudian di lectures.php nampaknya laman lain yang dihasilkan secara dinamik yang akan mempunyai, mari kita see-- ah, dua minggu pertama kuliah. Jadi minggu sifar dan satu minggu, mari kita melihat this-- jika saya melihat sumber halaman, juga sangat mudah. Ini membawa kepada dua muka surat dipanggil week0.php dan week1.php. Oleh itu fikirkanlah sekarang apa yang berlaku. Apabila saya klik pada week0.php, komputer riba saya membuat permintaan untuk week0.php. Pelayan web, a.k.a., CS50 IDE, menerima bahawa sampul surat maya. Ia melihat mesej seperti, dapatkan week0.php. Ia kemudian mentafsirkan fail, bahagian ke bawah, kiri ke right-- fail dipanggil week0.php-- dan meludah keluar keputusan. Jadi di dalam fail ini, week0.php, mesti logik pengawal yang menjana HTML ini, dan kita tidak lama lagi akan melihat bahawa. Tetapi buat masa ini, biarlah saya klik pada minggu sifar, dan sekarang kami mempunyai Rabu dan Jumaat, dan sekarang kami mempunyai slaid perlahan-lahan dari minggu sifar. Dan anda mungkin ingat ini dari perjalanan pulang apabila. Jadi itu sahaja laman web ini lakukan. Jadi mari kita memikirkan bagaimana ia melakukan ini. Saya akan kembali ke dalam kod sumber di sini, di CS50 IDE, dan saya akan membuka index.php. Di bahagian atas fail ini adalah sekumpulan komen. Dan kemudian di pertengahan fail ini, ia Rupa-rupanya, ada kod PHP sekalipun. Kerana jika anda tidak mempunyai mana-mana daripada kurungan terbuka tag tanda tanya PHP, anda bebas untuk hanya meletakkan HTML. Kerana apa PHP jurubahasa sepatutnya lakukan, adalah apabila ia membaca file-- ini atas ke bawah, kiri ke right-- ia hanya menafsirkan kod ia melihat di antara mereka kurung sudut tanda soal. Dan apa-apa yang ia tidak mengiktiraf sebagai PHP, ia hanya memuntahkannya keluar. Dan HTML Adakah antara barang-barang ia hanya akan meludah keluar. Jadi fail ini boleh mempunyai telah dipanggil index.html, tetapi saya menamakan segala-galanya dot PHP sebagai batu loncatan. Lectures.php-- sama underwhelming, ia hanya beberapa HTML. Week0.php, begitu juga hanya sebahagian HTML. Tetapi sekarang mari kita meletakkan di topi kejuruteraan pepatah, dan mempertimbangkan bagaimana kita boleh meningkatkan ini. Ia tidak sukar untuk melakukan ini, tetapi saya jenis daripada diturunkan ke dalam salinan dan tampal. Dan sebenarnya, jika saya membuat dua minggu, anda tahu apa yang saya mungkin saya akan lakukan? Saya akan pergi ke week1.php, Saya akan menyerlahkan segala-galanya. Saya akan menyalin, tampalkannya ke dalam fail baru yang dikenali sebagai week2.php, tweak beberapa URL, dan dalam perjalanan saya. Jadi berdasarkan apa yang kita ada lihat dalam C sudah, ini tidak merasa seperti, mudah-mudahan. Copy, paste jarang penyelesaian yang betul. Jadi apa yang kita boleh mula yang perlu dilakukan untuk memperbaiki ini? Di manakah peluang untuk reka bentuk yang lebih baik? Apabila saya dapat minggu lapan, ia akan menjadi benar-benar menjengkelkan jika saya ingin menukar fon setiap satu daripada halaman saya, atau jika saya mahu untuk mengubah struktur susun atur. Jadi di mana peluang untuk reka bentuk yang lebih baik? Nah, mari kita mempertimbangkan apa yang dikongsi di semua fail-fail ini. Berikut adalah satu minggu, di sini minggu sifar, di sini adalah lectures.php, inilah index.php-- apa yang yang sama dan apa yang berbeza, kira-kira bercakap, Setiap fail ini? Ya? PENONTON: [didengar] DAVID MALAN: OK, baik. Jadi ada corak, pasti, di mana setiap kali saya memilih kuliah I, Saya perlu menjana halaman yang kelihatan hampir sama. Dan jadi mungkin saya boleh memanfaatkan fakta yang benar-benar, kita sengaja berangka diindeks lectures-- kami jika saya boleh meletakkan lebih perkataan dalam jawapan anda. Dan apakah perkara sahaja, benar-benar, yang mengubah antara minggu one-- dan biarlah saya tatal ke bawah supaya ia kira-kira dalam place-- yang sama jadi di sini adalah minggu kosong, secara kasar di bahagian atas. Berikut adalah satu minggu, minggu sifar, satu minggu, minggu sifar. OK, secara literal jika anda tahu tiada program sekalipun, ini kini hanya seperti corak permainan yang hampir sama. Jadi apa yang berbeza? Ya? PENONTON: [didengar] DAVID MALAN: Baik, jadi tajuk berubah, pernah jadi sedikit. Zero akan, sudah tentu, kepada satu. Perkara yang sama berlaku dalam tag H1. Dan kami tidak nampak ia sebagai mudah, kerana URL yang sedikit panjang. Dan orang-orang URL berubah sedikit. Tetapi apa yang tidak berubah iaitu, berani saya berkata, sebahagian besar daripada kandungan page-- yang tag HTML adalah sama, kepala adalah sama, tajuk yang hampir sama, tubuh adalah sama, dan hampir segala-galanya adalah sama kecuali mereka tweak sedikit. Jadi bagaimana kita boleh pergi tentang berdasarkan beberapa ini keluar? Nah biar saya mencadangkan tepat bahawa dalam versi akan datang. Jadi di sini dalam versi satu, saya mempunyai yang tepat fail yang sama, ditambah dengan beberapa orang lain. Berikut adalah index.php-- dan walaupun anda tidak pernah dilihat PHP sebelum ini, apa yang saya mungkin melakukan untuk menyelesaikan masalah ini problem-- berdasarkan apa yang anda lihat di sini? Yeah, adalah bahawa komitmen sedikit? Tidak? Ya, teruskan. PENONTON: [didengar] DAVID MALAN: Ya. PENONTON: [didengar] DAVID MALAN: Saya memerlukan anda untuk bercakap hanya kuat sedikit. PENONTON: [didengar] DAVID MALAN: OK, baik. Dan saya think-- ia sukar untuk mendengar atasmu, tetapi saya berfikir apa yang anda mendapat di ialah tag yang adalah biasa sehingga atas, dan tag yang adalah biasa pada bawah, kini telah diambil kira, atau diturunkan kepada apa fail? Header.php dan footer.php-- dan kita akan untuk membuat beberapa tweak untuk menangani kebimbangan yang anda hanya dibangkitkan mengenai perubahan nombor, untuk Contohnya, jika saya mendengar anda dengan betul. Tetapi itu seolah-olah menjadi intipati daripadanya. Jika terdapat jumlah yang besar lebihan di bahagian atas halaman, dan sejumlah besar lebihan di bahagian bawah, mari kita benar-benar hanya menyerlahkan dan memotong kandungan yang keluar, memasukkannya ke dalam file-- yang berasingan seperti idea CSS, di mana kita kira daripada estetika hampir sama, meletakkan dalam fail berasingan titik PHP, menggunakan memerlukan mechanism-- yang adalah seperti C termasuk- tajam yang pada dasarnya seperti mengatakan pergi merebut kandungan header.php, dan copy dan paste di sini. Tetapi apa yang ini bermakna adalah bahawa sekarang di index.php, saya mempunyai kedua-dua baris. Dalam lectures.php, saya juga mempunyai kedua-dua baris. Dalam week0.php, saya juga mempunyai kedua-dua baris. Jadi sekarang, jika saya ingin menukar tajuk semua halaman saya, atau saya hendak menukar struktur asas, Saya boleh menukar ia kini hanya dalam satu tempat, atau dua tandukan places-- dan kaki, masing-masing. Sekarang kod mula kelihatan sedikit lebih samar, bukan? Tetapi jika anda berfikir tentang apa halaman adalah doing-- jika saya meminta week0.php, sama seperti di atas lukisan sini-- apabila week0.php diminta, apa maksudnya? Secara harfiah, fail ini diminta oleh penyemak imbas. A.k.a. web server-- CS50 ID-- menangkap ini fail, week0.php, dan membaca ia atas ke bawah, kiri ke kanan. Free satu, ia segera menemui kurungan terbuka tanda tanya PHP, memerlukan header dot PHP, dan sebagainya apa jurubahasa PHP does-- yang dibina ke dalam web pelayan, kerana kita dipratatarajahkan selama atasmu, ia secara automatik pergi ke dalam header.php, salinan kandungan, menampal di sini. Tetapi pertemuan jurubahasa tanda soal kurungan rapat, supaya itu semua dilakukan berfikir. Kini ia hanya membuta tuli memuntahkannya garis-garis dua melalui tujuh, kerana ia hanya HTML mentah. Dapat beratur lapan, dan adakah itu sihir sama again-- membuka fail, merebut kandungan, dan memerlukan mereka atau menampalkannya Nah atau di sana. Tetapi saya hanya dirujuk kepada pepijat. Ini adalah satu langkah separa ke belakang, kerana jika kita melihat di header.php, Saya telah jenis memotong sudut. Apakah ciri-ciri yang saya berputus asa dalam usaha untuk mendapatkan reka bentuk diperdebatkan ini lebih baik? Ya? PENONTON: [didengar] DAVID MALAN: Ya, saya jenis daripada memotong sudut nontrivial. Anda menunjukkan bahawa apa yang telah merubah adalah tajuk, bilangan dalam tajuk, dan bilangan dalam H1. Jadi penyelesaian saya, OK, mari kita hanya menamakan semula halaman, dan tidak berurusan dengan yang masalah sekalipun. Jadi itulah separa melangkah ke belakang untuk memastikan. Tetapi apa yang perlu diberi perhatian di sini adalah bahawa apa yang saya lakukan sebaliknya kira semua barangan biasa. Dan dalam footer.php, notis saya kira daripada semua itu, walaupun lebih kecil, barangan yang sama. Jadi saya perlu entah bagaimana sekarang dapat mengambil satu lagi langkah ke hadapan, dan menetapkan bahawa isu-isu tajuk. Jadi mari kita buat itu. Biar saya pergi ke dalam versi kedua saya di sini, yang, sekali lagi, mempunyai fail yang sama kecuali satu tambahan baru. Dan ia lebih sedikit banyak cakap, tetapi mari kita lihat jika kita boleh mengusik selain apa yang sedang berlaku di sini. Jadi, daripada yang memerlukan header.php dan footer.php, Saya seolah-olah hanya memerlukan satu file-- dipanggil, sudah tentu, helpers.php. Dan biarlah saya menetapkan sekarang, apa yang di dalam helpers.php hanya sekumpulan fungsi yang saya tulis, sama seperti sebelum ini. Tetapi saya memanggilnya helpers.php. Sekarang nampaknya, dalam garis tiga dan 10, Saya memanggil dua functions-- menyebabkan kepala, menyebabkan footer. Mereka tidak datang dengan PHP, saya menulis mereka sendiri. Dan saya memasukkannya ke dalam helpers.php. Sekarang, kami telah hanya dilihat sintaks ini sekali, dan ia adalah super ringkas. Tetapi ini nampaknya hujah untuk memberi header, majlis itu. Mengapa saya tahu bahawa? Nah di sini adalah satu paren rapat, di sini adalah satu paren terbuka. Dan sudah tentu, seperti dalam C, apa-apa yang di antara orang-orang kurungan adalah input-- atau hujah untuk majlis itu. Apakah jenis data bagi hujah ini, berdasarkan apa yang saya telah diketengahkan? Apa yang mereka tanda kurung siku menunjukkan, berdasarkan minggu lepas? Ya, ia array-- yang khusus pelbagai bersekutu. Dan sintaks ini diakui adalah funky sedikit, tetapi ini hanya lulus dalam satu pasangan nilai utama. Yang penting adalah, quote unquote tajuk, dan nilai adalah CS50. Jika kita telah melakukan ini dalam C, ia mungkin sebaliknya kelihatan lebih seperti ini, hanya quote unquote CS50-- atau sebenarnya ia akan menjadi kerinting pendakap, atau sesuatu seperti itu dalam C, di mana yang penting adalah sifar, dan nilai adalah CS50. Tetapi sekali lagi, dalam PHP, walaupun sintaks, sekali lagi, sedikit pelik, ia membolehkan anda untuk lulus dalam kata-kata bukan nombor untuk mengaitkan kunci dengan nilai-nilai. Jadi apakah ini semua bermakna? Jika saya pergi ke helpers.php, mari kita lihat fungsi ini. renderHeader.php, dan bukan renderHeader adalah fungsi saya, dan saya tahu bahawa kerana saya melihat kata kunci majlis itu di sini. Ini baru dari C-- ia nampaknya mengambil hujah dipanggil data-- tetapi saya boleh dipanggil ini apa-apa, tetapi saya memanggilnya data, hanya untuk menjadi clean-- sedikit dan hanya mengambil tekaan, terutamanya jika anda telah diprogramkan dalam beberapa lain bahasa peringkat tinggi sebelum, sesuatu atas C dari segi konsep. Apakah kurungan terbuka sama Tanda kurung siku mungkin bermakna? Atau ia mungkin bermakna? Kami tidak melihat ini dalam C. Ya? Pelbagai kosong. Secara khusus, ini bermakna bahawa jika pengguna tidak memanggil renderHeader dengan hujah, saya masih akan untuk mempunyai hujah dipanggil data, tetapi nilai lalai adalah akan menjadi pelbagai kosong. Jadi ia hanya satu kemudahan yang bagus. Saya tidak perlu menjerit pada pengguna, atau mengatakan anda menggunakan fungsi saya salah. Saya hanya boleh memberi pengguna lalai nilai, jika saya tidak terutamanya mengambil berat. Sekarang fungsi ini, saya akan melambai tangan saya. Tetapi fungsi ekstrak ini membolehkan kami berjalan pembolehubah dalam data ke dalam header.php dengan cara yang berikut. Dan ini adalah bahagian yang lepas, Saya fikir, sintaksis funky. Berikut adalah versi baru saya daripada header.php-- ia pernah berkata, secara literal, terbuka kurungan tajuk CS50, dan bahawa adalah ia. Dan perkara yang sama untuk H1. Kini ia nampaknya kata sesuatu yang cukup funky. Dan biarlah saya memudahkan ini seketika seperti berikut. Ini adalah apa yang saya telah menukar jawatan saya untuk menjadi. Walau bagaimanapun, ia semakin sedikit hodoh untuk kurungan sentiasa terbuka dengan PHP, dan kemudian menggunakan fungsi cetak. Ia ternyata bahawa PHP mempunyai trengkas yang notasi untuk ini, yang hanya tanda sama, yang secara teknikal fungsi dipanggil echo dan bukan cetak, tetapi ia adalah perkara yang sama, dengan berkesan. Yang hanya kelihatan lebih baik. Ia hanya sintaksis gula, jika anda akan, yang membuat kod saya kelihatan sedikit lebih baik. Tetapi ternyata, dan kita akan melihat ini sekali lagi tidak lama, kita perlu memanggil ini annoyingly fungsi lama dipanggil HTML aksara khas PHP, kerana ia ternyata ada input tertentu bahawa pengguna mungkin memberikan kita, atau bahawa pengguna mungkin memberikan kita, yang akan memecahkan laman web kami. Tetapi kita akan melihat bahawa akan datang minggu dengan JavaScript. Tetapi buat masa ini, hanya tahu bahawa fail ini, headers.php, semata-mata mengambil tajuk yang Saya lulus dalam, ia membuat memastikan ia selamat untuk disuntik ke dalam web yang halaman, dan ia memuntahkannya keluar sebagai tajuk saya dan sebagai H1 saya. Jadi, jika saya pergi ke dalam versi ini sekarang, melihat bahawa kuliah mempunyai tajuk kembali, minggu sifar mempunyai tajuk kembali, dan sesungguhnya HTML saya menjana adalah sama dengan apa yang versi pertama saya was-- kecuali ruang kosong saya, kerana saya telah memulakan pemformatan kod saya sedikit berbeza. Tetapi saya telah dijana semua kod yang saya hargai. Jadi biarlah saya berhenti seketika untuk hanya seketika dan melihat jika ada sebarang pertanyaan atau kekeliruan yang saya buat. Baiklah, jadi mari kita twist agak sukar di sini untuk melihat sama ada terdapat satu peluang untuk penambahbaikan. Helpers.php juga mempunyai ini fungsi, yang dipanggil renderFooter. Dan apa yang perlu diberi perhatian mengenai renderHeader dan renderFooter? Dan sekali lagi, untuk tujuan hari ini, tahu bahawa fungsi ekstrak sahaja cara saya hujah-hujah yang berlalu ke dalam header.php dan footer.php. Maaf? PENONTON: [didengar] DAVID MALAN: Ya, saya hanya mengubah memerlukan garis. Jadi benar-benar, saya telah berbuat dosa menyalin dan menampal, sekali lagi. Ia bukan jumlah yang besar garis-garis, tetapi datang pada-- jika saya menyalin dan menampal segala-galanya hanya untuk menukar satu perkataan kecil, dan satu perkataan kecil yang menunjukkan Alan keluar adalah footer di sini, berbanding header di sini. Jika tidak, segala-galanya adalah sama, kecuali, sudah tentu, nama fungsi ini. Jadi apa yang kita boleh melakukan lebih baik? Nah biar saya membuka versi ini di sini, di mana pada helpers.php, mengapa tidak saya hanya mendapat sedikit lebih bijak tentang perkara ini? Tulis lebih rumit kod, tetapi memanggilnya menyebabkan? Jadi apa yang saya asasnya berubah? Ia mengambil hujah sekarang-- dua hujah, data masih. Dan kemudian apa yang pertama nama mungkin digunakan untuk, berdasarkan apa yang anda baca di sini? Walaupun sebahagian daripada sintaks yang masih baru. Apakah tanda template dolar? Maaf? PENONTON: Tandukan atau nota kaki. DAVID MALAN: Tandukan atau nota kaki. Jadi nampaknya, saya memutuskan bahawa jika satu-satunya perkara yang mengubah adalah apa template Saya hendak untuk print-- dan dengan template Yang saya maksudkan ini adalah pelan tindakan untuk kod yang saya mahu output, tetapi saya ingin pasangkan beberapa values-- jadi jika ia hanya header atau kaki, mengapa tidak saya parameterize itu dan memanggil tanda dolar hujah template? Dan kemudian sintaks funky ini membolehkan saya untuk membuat jalan yang dalam pembolehubah di sini. Jadi jalan tanda dolar adalah pembolehubah. Apakah sintaks ini lakukan, jika anda biasa? Ya? PENONTON: [didengar] DAVID MALAN: Tepat sekali. Jika template, quote unquote, header, atau jika template, quote unquote, kaki, garis yang terdapat bahawa saya telah menekankan, barisan lapan, adalah semata-mata mengambil nama itu, seperti header, dan concatenating dengan dot PHP. Oleh itu, kita tidak mempunyai operator ini dalam C. Ini pengendali dot satu perkara yang menakjubkan dalam PHP-- jika anda biasa dengan JavaScript atau Jawa, anda boleh menggunakan campur log lakukan dinamika. Dalam C, ia adalah sakit di neck-- yang dan saya minta maaf, dalam p-set enam, anda akan perlu lakukan this-- ia adalah sakit di leher untuk merangkaikan tali. Mengapa? Nah, kerana jika anda telah mendapat rentetan yang ini panjang, dan satu lagi rentetan yang ini panjang, anda tidak boleh hanya plug mereka bersama-sama. Apa yang anda dan bukannya perlu lakukan dalam C? Ya? PENONTON: [didengar] DAVID MALAN: Anda perlu malloc memori, atau menggunakan array pada timbunan. Dan anda sebenarnya perlu membuat pelbagai yang cukup besar untuk muat ini ditambah ini, tambah garis sendeng terbalik sifar. Kemudian menyatukan mereka bersama-sama menggunakan kacau kucing atau secara manual dengan untuk gelung, atau apa-apa bilangan teknik. Dan kita menunjukkan pasangan di dalam p-set enam. Ia adalah satu kesakitan di leher. Dan ini adalah benar-benar apa yang saya maksudkan tentang ini berbanding this-- seperti C berbanding PHP. Anda hanya mendapat lebih banyak lagi fungsi secara percuma, supaya anda boleh memberi tumpuan, ideal, pada keseronokan sebahagian daripada pengekodan, yang projek yang anda mahu untuk menyelesaikan, bukannya detel tahap yang rendah. Jadi ini hanya menjana header.php atau footer.php berdasarkan yang mana satu saya memanggil. Dan sesungguhnya jika saya pergi ke dalam index.php, notis semua itu changed-- Daripada memanggil menyebabkan header atau menjadikan kaki, Saya memanggil memberi, diikuti dengan menamakan template yang saya mahu lakukan. Dan anda akan melihat ini, juga, dalam masalah menetapkan tujuh, di mana kami membolehkan anda untuk menggunakan fungsi sama untuk membuat tandan dan tandan laman web yang berbeza. Jadi, daripada tinggal terlalu yang lebih kepada details-- yang anda akan melihat sekali lagi pada set masalah seven-- mari kita lihat di tempah awal penyelesaian kepada masalah yang lebih menarik. Setakat ini, tiada apa yang kita ada dilakukan mempunyai data disimpan. Malah, satu-satunya masa kita pernah disimpan sesuatu yang kita lakukan di dalam kelas ini adalah apabila kita mempunyai demo sangat mudah seketika kembali, di mana kita menggunakan fail IO dalam C, dan saya rasa saya tulis nama saya, dan Nama Hannah, dan nama Maria, atau mungkin nama Andy, dan maka kita menyelamatkan file-- CSV dipisahkan oleh koma fail nilai. Dan kami sentiasa fopen-- saya fikir kami menggunakan fprintf seperti yang saya ingat, dan Kami selamatkan fail. Sekarang, yang paling mudah yang bentuk pangkalan data. Jika anda ingin membuat laman web untuk Program Frosh IM, di mana mahasiswa boleh mendaftar untuk sukan, anda ideal mahu melakukan sesuatu dengan data tersebut. Minggu lepas, kami tidak apa-apa dengan data-- kita hanya berkata, anda berdaftar, tidak benar-benar. Atau mungkin saya melalui e-mel yang proctor, dan bahawa adalah ia. Tetapi ia akan lebih baik jika saya boleh memberi proctor bahawa fail CSV, seperti fail Excel. Atau lebih baik lagi, ia akan lebih baik jika saya boleh meletakkan nama orang-orang pengguna dan asrama nama-nama dan semua itu ke dalam pangkalan data yang hanya tinggal selama-lamanya, sehingga saya memilih untuk memadamkan data. Satu pangkalan data yang membolehkan saya membuat carian maklumat. Dan sesungguhnya, itulah yang pangkalan data adalah. Kami memperkenalkan hari ini, dan minggu depan, juga, teknologi dipanggil SQL-- yang Pertanyaan Berstruktur Bahasa, iaitu bahasa lain. Ia pada asasnya pengaturcaraan bahasa, tetapi untuk pangkalan data. Dan pangkalan data untuk sekarang, hanya fikirkan sebagai versi super mewah Microsoft Excel, atau Google Spreadsheet, atau Nombor Apple. Ia biasanya satu program yang membolehkan anda menyimpan sejumlah besar data dalam baris dan lajur, agak seperti anda mungkin dalam Excel. Tetapi apa yang baik, terutamanya jika kita tidak biasa dengan super Excel, apa SQL membolehkan anda lakukan adalah pertanyaan ini maklumat dengan menulis baris kod di mana anda boleh, walaupun anda pangkalan data mempunyai juta baris di dalamnya, anda boleh mencari sesuatu super cepat. Malah, Excel amat tidak baik pada set data yang besar. Dan sebenarnya, sehingga beberapa tahun yang lalu, ternyata Excel hanya membenarkan anda untuk menyimpan sehingga 65,535 baris yang data-- bunyi seperti banyak, tetapi pada kali saya adalah seorang pelajar grad, dan saya masih ingat tersandung ini kerana saya telah menjana Fail CSV untuk penyelidikan dan saya saya mahu menganalisis mereka dengan cepat dengan hanya membuka di Excel. Sudah tentu, komputer saya hanya terhempas, kerana saya mempunyai lebih 65,000 baris. Tetapi di mana yang dilakukan oleh 65.535 datang? Apa yang Microsoft lakukan, mungkin? Jika anda baik dengan kuasa anda dua? Ya, mereka telah menggunakan 16-bit Nilai untuk mewakili nombor baris. Dan dua hingga 16 adalah 65,536-- tolak satu, kerana jika anda indeks sifar bermakna itu adalah paling banyak baris saya boleh mempunyai. Dan ia adalah satu keputusan reka bentuk. Dengan menyimpan 16 bit, mereka terhad saya 16,000 baris, bukan 4 bilion, yang saya boleh mempunyai ideal. Tetapi untuk sekarang, kita akan memperkenalkan ini lebih dalam konteks web. Dan apa yang baik tentang SQL ialah walaupun walaupun ia cukup kuat dan cantik canggih, ia benar-benar bisul turun kepada empat operasi utama, empat fungsi utama, jika anda will-- memilih, untuk mendapatkan semula data, mencari untuk data; memadam atau memadam data; memasukkan untuk menambah baris untuk pangkalan data; dan dipertingkatkan. Jadi, jika anda pernah menggunakan Google Hamparan, Nombor Apple, Microsoft Excel, anda telah dilaksanakan, kemungkinan besar, semua operasi ini sebagai manusia oleh hanya menggunakan papan kekunci dan mouse-- anda memasukkan data, menggunakan mata anda untuk memilih atau mencari data, atau data yang kemas kini, atau memadam data. Jadi apa maknanya? Well, sebelum dipasang dalam CS50 IDE adalah program yang dikenali sebagai MySQL. Ia adalah satu, sumber terbuka bebas pangkalan data yang yang super hebat. Facebook, misalnya, menggunakan ia untuk ini hari, antara peralatan yang mereka gunakan. Dan banyak laman web yang sangat popular digunakan dalam sebahagian besar kerana ia cepat, dan kerana ia adalah percuma. Walaupun pasti alternatif yang wujud. Dan sebahagian daripada anda mungkin cuba-cuba dengan alternatif untuk projek akhir. Ini adalah tangkapan skrin, sementara itu, sudah alat berasaskan web yang dikenali sebagai phpMyAdmin. Ia adalah kebetulan bahawa alat berasaskan web ini juga ditulis dalam bahasa, PHP, tetapi apa yang ia bertujuan untuk melakukan yang memberikan kita berasaskan web antara muka kepada pangkalan data. Kerana MySQL biasanya adalah sesuatu, dari segi sejarah, anda akan berinteraksi dengan hanya dengan baris perintah. Dan ia akan menjadi super menjengkelkan dan sukar difahami untuk mempunyai menaip arahan teks untuk memilih data, memasukkan data, dan memadam data. Jadi beberapa orang di internet menulis sebuah program berasaskan web yang hanya membiarkan kita menguruskan data dalam pangkalan data kami. Ia seperti double klik pada Excel dan menjalankan versi berasaskan web itu. Dan apa yang anda akan menggunakan ini untuk akhirnya minggu depan, bukan dalam p-set enam, tetapi adalah untuk membina sesuatu dipanggil CS50 Kewangan, yang akan mempunyai pangkalan data pengguna, dengan nama pengguna dan kata laluan, jumlah dolar yang mereka ada dalam akaun bank mereka. Ia akan menjadi sesuatu yang anda gunakan untuk menyimpan simbol-simbol dan kuantiti saham yang pengguna telah membeli menggunakan maya dolar yang anda akan memberikan kepada mereka. Dan ia akan membolehkan pengguna mendaftar untuk laman web anda, supaya walaupun rakan-rakan anda boleh menala ke laman web anda dan benar-benar mendaftar, login, dan bermain-main dan cuba untuk mencari kesalahan dalam kod anda, dan cuba untuk mencari bug dalam laman web anda. Dan mereka hanya akan mendaftar dengan menambah diri mereka sendiri, berkesan, melalui kod anda menulis kepada pangkalan data anda. Sebagai contoh, ini adalah screenshot cepat apa pangkalan data yang mungkin kelihatan seperti. Ini adalah dari salah satu solutions-- tahun lepas ini adalah seperti mini Excel fail, disimpan dalam pangkalan data kami, disimpan di dalam perisian ini dipanggil MySQL. Di sebelah kiri, saya telah nampaknya diberikan setiap pengguna nombor yang unik. Dalam ruang kedua, saya telah diberi semua orang pengguna name-- saya sendiri di antara mereka. Dan di sebelah kanan, Saya telah memberikan mereka hash. Sekarang ini adalah benar-benar kata laluan, tetapi ia bukan satu kata laluan teks biasa. Ia adalah satu kata laluan disulitkan, jika anda akan, atau kata laluan hash. Yang kita akan kembali kepada tidak lama lagi. Tetapi jika anda pernah membaca artikel mengenai bagaimana kata laluan anda di beberapa bank atau beberapa laman web mungkin telah terjejas, ia secara amnya boleh bermaksud satu daripada dua perkara. Jadi ini adalah hanya petikan dari pengguna enam. Anda semua kini boleh memikirkan keluar melalui penggodaman atau keretakan apa kata laluan enam orang kita berada. Tetapi jika anda telah pernah mendapat amaran atau meminta maaf daripada sebuah syarikat atau laman web pepatah, maaf, penggodam memecah masuk ke pangkalan data kami, anda mungkin perlu menukar anda kata laluan, apa yang mungkin maksudnya? Well, satu, boleh bermakna syarikat telah lebih bodoh, dan telah menyimpan kata laluan anda dalam lajur seperti ini, tanpa enkrip. Yang bermaksud lawan, yang mencuri pangkalan data, benar-benar tahu anda nama pengguna dan kata laluan. Itulah senario yang paling buruk. Dan seperti yang anda akan lihat dalam p-set tujuh, begitu mudah untuk mengelakkan. Sama sekali tidak ada alasan untuk bentuk kebodohan di internet hari ini. Two-- dan kami akan mencari beberapa artikel untuk memberi keterangan fakta bahawa ini masih berlaku, nonetheless-- dua, mungkin musuh mencuri versi pangkalan data. Yang masih sejenis yang tidak baik, kerana sekarang mereka tahu bahawa saya mempunyai enam pelanggan, Saya tahu nama-nama pengguna dari orang-orang enam pelanggan, dan saya tahu yang disulitkan versi, atau versi dicincang, kata laluan mereka enam pelanggan. Dan sesiapa di antara kamu yang mungkin sudah siap [? Hacker 2?] di mana anda retak kata laluan, atau mengambil yang melihat bahawa versi masalah set, mengapa ia masih membimbangkan sedikit jika musuh mengetahui hash anda kata laluan? PENONTON: Kerana mereka boleh masukkan seluruh kamus ke dalam fungsi hash. Dan jika kata laluan anda adalah kamus yang perkataan, [? mereka hanya boleh match--?] DAVID MALAN: Tepat sekali, musuh hanya boleh menulis kod, seperti sebahagian dari kamu lakukan untuk [? Hacker?] 2, di mana anda melelar semua perkataan di dalam kamus, atau semua kemungkinan kombinasi A hingga Z dan satu melalui nine-- yang berbunyi seperti banyak, dan ia adalah. Tetapi bagi komputer, ia cukup darn cepat. Dan sebenarnya, yang merupakan titik [? Hacker 2,?] Adalah untuk mengambil barang-barang yang benar-benar kelihatan seperti ini, dan kejuruteraan balik apa yang ia sebenarnya adalah. Oleh itu, kita akan melihat bagaimana kita boleh menyimpan ini dengan lebih cekap. Rupa-rupanya, bersyukur dalam MySQL, ada akan menjadi jenis data. Dan salah satu daripada bahagian-bahagian yang menyeronokkan tentang rekabentuk pangkalan data, untuk bersikap jujur, sebenarnya membuat keputusan untuk diri sendiri bagaimana anda perlu mewakili data? Sekiranya anda mewakili nombor telefon sebagai int, seperti satu jumlah yang besar, atau yang lama? Atau adakah anda benar-benar melakukannya sebagai urutan aksara? Dan tidak boleh menjadi sangat kesan bukan remeh ini. Malah, salah satu daripada awal, cerita germane menyeronokkan adalah apabila Mark Zuckerberg membina Facebook, ia pada asalnya ditulis dalam, dan masih sebahagian besarnya ditulis dalam PHP. Dan salah satu cabaran terbesar mereka hadapi awal telah mendaki. Apabila mereka terus menambah sekolah selepas sekolah selepas sekolah, untuk pengetahuan saya, salah satu penyelesaian asal pada dasarnya untuk copy dan paste sebahagian daripada pangkalan data dan beberapa kod, supaya Harvard adalah berjalan pada pelayan sendiri, dan MIT telah berjalan pada pelayan sendiri. Dan ini adalah mengapa, bagi sesetengah anda yang mungkin masih ingat, anda tidak boleh mempunyai rakan-rakan dalam rangkaian lain. Anda mungkin tidak mempunyai rakan-rakan di MIT atau Harvard 10 atau lebih tahun yang lalu, tetapi anda tidak dapat meliputi rangkaian untuk sebahagiannya sebab itu. Dan salah satu cabaran terbesar bagi Mark dan untuk syarikat-syarikat seperti Facebook sebenarnya mengendalikan beratus-ratus dan beribu-ribu dan berjuta-juta permintaan sesaat. Jadi perkara yang kita akan mula bercakap kira-kira seminggu ini benar-benar akan menjadi germane untuk menulis perisian yang baik, dan popular Alat berjaya yang boleh mengendalikan ramai pengguna. Oleh itu, kita akan bercakap tentang perkara-perkara seperti pengindeksan dan mencari, tetapi itu adalah ia pada hari ini. Kami akan melihat anda lebih pada hari Rabu. [MUZIK - "Seinfeld" TEMA] DAVID MALAN: Anda boleh ke , dan menguranginya. Dan anda tidak perlu berpegang dengan beberapa jumlah yang telah ditetapkan memori. Nah, apa yang yang akan dipanggil? SPEAKER 1: Nah, apa yang berlaku? SPEAKER 2: Apa yang kamu maksudkan? Dia memberi syarahan. DAVID MALAN: Dan kita boleh menggunakan fungsi dipanggil malloc untuk memory-- SPEAKER 1: Mengapa tidak tangannya bergerak? SPEAKER 2: Sebenarnya that's-- anda tahu, itu normal. Ia sama seperti dia mempunyai hanya sosej besar yang tergantung di sana. SPEAKER 1: Itu normal? SPEAKER 2: Ya, saya rasa kita hanya menganggap dia sengaja digantikan deodoran dengan superglue.