>> [MUSIC PLAYING]
>> DAVID J. Malan: Baiklah.
Ini adalah CS50.
Ini adalah awal minggu delapan.
Dan Anda mungkin ingat bahwa kita tinggalkan terakhir kali melihat sebuah bahasa baru
sama sekali.
Bahkan, salah satu yang cukup ringan dan itu tidak bahkan
bahasa pemrograman.
Ini adalah bahasa markup yang memungkinkan kita sebenarnya struktur dan membuat halaman web.
Dan ketika Anda sesuatu yang lain dalam hubungannya dengan this--
atau Anda segera akan, jika Anda belum.
Kita akan menggunakan Cascading Style Sheets, atau CSS, yang
adalah jenis lain dari bahasa dengan sifat dan nilai-nilai
itu akan membiarkan kita melakukan hal-hal seperti mengubah warna
dan mengubah kedudukan dan jenis-tweak.
Tapi hari ini dan seterusnya, kami mulai fokus pada bahasa yang lebih kuat,
bahasa pemrograman yang sebenarnya seperti PHP.
>> Jadi PHP telah ada selama beberapa waktu.
Dan karena Anda akan lihat, dirancang terutama
awal untuk aktual digunakan dalam pengembangan web
dan benar-benar menghasilkan halaman web.
Jadi jenis apa fitur tidak bahasa
perlu untuk membuat web halaman dinamis dengan itu?
>> Dengan kata lain, jika Anda ingin menghasilkan konten dynamically-- seperti Facebook
Newsfeed, yang berubah secara konstan, atau pesan instan yang muncul dari waktu
untuk time-- seperti apa bagian kunci dari fungsi
Anda perlu dalam bahasa pemrograman yang akan membiarkan Anda dinamis
mencetak informasi baru ke layar?
>> SISWA: Kode.
DAVID J. Malan: Kode.
OK.
Kami akan mengambil itu.
Sedikit lebih tepat.
Maksudku, kita bisa melakukan ini dengan C, terus terang.
Ini akan menjadi sakit di leher.
Tapi-- adalah komitmen ini?
>> SISWA: Ya.
Variabel, mungkin?
DAVID J. Malan: Variabel.
OK, yakin.
Variabel pasti bisa membantu kami keluar.
Dan bahkan sesuatu yang sederhana.
Kami menggunakannya dalam pertama program hari pertama
ketika kita benar-benar mengatakan "hello world."
>> SISWA: Print.
>> DAVID J. Malan: Print, kan?
Print, atau printf di dunia C. Jadi selama ini,
kami sudah di kami pembuangan sebuah language-- C,
di particular-- dan bahkan Scratch dalam hal ini yang
dapat menghasilkan string teks.
>> Nah, jika HTML, seperti yang kita lihat minggu lalu, adalah hanya sejumlah besar string teks
meskipun dengan kurung terbuka dan tertutup kurung dan beberapa jenis sajak
dan alasan di balik itu, baik maka kita bisa benar-benar
mulai menghasilkan halaman web baik manual dengan mengetik mereka keluar di gedit
atau di Microsoft Word, untuk itu masalah-kita hanya perlu editor teks.
>> Atau kita bisa menulis kode, untuk saran Anda
sebelumnya, yang akan membiarkan kita dinamis menghasilkan HTML,
dan itulah yang akan kita untuk mulai melakukan dengan PHP
dan akhirnya bahkan dengan bahasa yang disebut JavaScript,
adalah menggunakan satu bahasa untuk menghasilkan lain.
Dan memang, ini adalah apa yang Facebook dan banyak, banyak situs lain
lakukan untuk benar-benar dinamis menampilkan informasi baru bagi Anda.
>> Jadi mari kita mulai dengan this-- samar mencari line, tapi satu
itu sebenarnya cukup kuat.
Sejauh ini, kami telah menggunakan C, yang merupakan bahasa yang dikompilasi.
Dan hanya recap-- cepat dikompilasi bahasa memiliki karakteristik apa?
Anda jelas perlu untuk mengkompilasi itu, tapi apa artinya?
Ya?
>> SISWA: Perlu dirakit menjadi kode mesin.
>> DAVID J. Malan: OK.
Perlu dirakit ke dalam kode mesin.
Jadi Anda mengambil kode sumber Anda, yang merupakan semacam bahasa Inggris-seperti.
Anda mengkonversi bahwa untuk sesuatu tingkat yang lebih rendah,
yang akhirnya disebut objek code-- 0 dan 1.
Dan itu mereka 0 dan 1 yang CPU, seperti yang dibuat oleh Intel,
benar-benar mengerti.
>> Sekarang, PHP dan Python dan Ruby dan JavaScript dan tandan lainnya
bahasa tidak dikompilasi bahasa tetapi bahasa ditafsirkan,
yang berarti Anda hanya mengetik mereka dan kemudian Anda tidak mengubahnya menjadi 0 dan 1.
Anda malah hanya menyediakan kemudian sebagai masukan program orang lain,
disebut seorang penerjemah.
Dan orang itu program telah dirancang
untuk memahami apa yang masing-masing dan setiap simbol dengan Python atau PHP
atau Ruby atau sejumlah bahasa lain berarti.
>> Dan sehingga semua kita butuhkan adalah sesuatu seperti ini.
Jadi sebenarnya, aku akan pergi ke alat
di sini, hanya ke setiap jendela tua, dan kami
akan pergi ke depan dan terbuka sebuah file yang bernama, mengatakan, halo.
Sekarang sebelumnya, saya mungkin telah disimpan ini bahkan dengan ekstensi file,
tapi aku akan melakukan sesuatu yang bahkan lebih sederhana di sini.
Aku akan pergi ke depan dan mulai file ini dengan sintaks samar ini.
Jadi "pengguna, bin, env, untuk lingkungan, php. "
>> Ini hanya satu baris kode yang akan memberitahu sistem operasi saya,
pergi mencari di daerah Anda lingkungan apa pun itu,
dimanapun PHP is-- interpreter-- yang dan pergi ke depan dan menggunakan penerjemah yang
untuk menafsirkan kode berikut.
Sekarang, ini adalah jenis fitur jelek PHP.
Tapi dalam bahasa ini, setiap kali Anda menulis kode PHP,
Anda harus memiliki salah satu dari ini jelek Tag PHP yang membatasi awal
Anda code-- <? php.
>> Tapi di bawah sini, sekarang saya bisa melakukan sesuatu cukup sederhana, seperti printf halo koma
dunia backslash n dekat kutipan, kurung tutup.
Dan kemudian hanya untuk kebaikan mengukur, aku akan
untuk pergi ke depan dan dekat tag php saya di sini
sehingga semuanya terlihat baik cukup dicetak.
>> Dan segera setelah saya klik Save, gedit cukup sebenarnya cerdas
untuk melihat bahwa garis pertama dan menyadari, oh, Anda sedang menulis kode PHP.
Mari saya sorot sintaks dengan warna
di sini sehingga berdiri keluar sedikit lebih.
Tapi sekarang aku akan pergi ke jendela terminal saya.
Aku akan memperbesar.
>> Program ini disebut "Halo," jadi saya akan melakukan dot slash halo,
tapi izin ditolak.
Dan bash.
Kami benar-benar mendengar tentang itu hal beberapa minggu yang lalu
dalam konteks SHELLSHOCK, salah satu bug.
>> Tapi izin membantah telah kita lihat sebelumnya, mungkin dalam konteks yang berbeda.
Apakah ada yang ingat bagaimana Anda mungkin memperbaiki sesuatu
di mana izin ditolak seperti ini?
Apa perintah, setidaknya?
>> SISWA: chmod.
DAVID J. Malan: Ya, chmod, untuk mengubah modus dari file.
Dan Anda akan mendapatkan semua lebih dulu ini minggu depan dengan masalah berikutnya
ditetapkan.
Tetapi untuk sekarang, aku akan berubah mode tidak dapat dibaca,
tetapi untuk memberikan semua orang executeability hak istimewa, kemampuan
untuk menjalankan file ini.
Dan aku akan menetapkan bahwa untuk file halo.
>> Jika saya lakukan sekarang dot slash halo masukkan, Anda lihat, pada kenyataannya, program saya, hello world.
Dan apa langkah apakah aku jelas melewatkan sama sekali?
Kompilasi.
Jadi aku hanya menjalankan program ini cukup sederhana.
>> Dan ternyata Anda dapat melakukan ini dengan banyak sintaks mengingatkan C.
Biarkan aku pergi ke kode hari ini, yang saya dimasukkan ke dalam direktori vhost saya
di sini, karena alasan nyata kami akan kembali ke.
Dan aku akan masuk ke dalam, katakanlah, kondisi 1.
>> Dan Anda akan melihat di sini, pertama dan terutama, sejumlah besar komentar.
Tapi ini benar-benar penciptaan kembali di PHP
sebuah program yang kita lakukan di minggu satu disebut kondisi 1.c
di mana tujuan dalam kehidupan program ini
tampaknya untuk meminta pengguna untuk integer
dan kemudian melakukan beberapa berbulu Analisis di atasnya dimana
Anda katakan jika itu positif atau negatif atau sama dengan nol.
Dan Aku membawa hal ini hanya karena, kecuali mungkin satu detail kecil,
itu dibedakan begitu jauh dari C.
>> Apa satu karakteristik di sini bahwa mungkin melompat keluar
Anda sebagai sedikit berbeda?
Mungkin dua hal.
Ya?
>> SISWA: Dolar tanda n?
>> DAVID J. Malan: Ya.
Jadi tanda dolar n hadir.
Dan tanda-tanda dolar, sebagai kita akan melihat, akan
menjadi fix untuk awal dari setiap variabel dalam PHP.
Itu baik good good dan bad-- di bahwa itu semacam jelas apa
variabel, buruk dalam bahwa itu Belum hal lain untuk mengetik.
Dan ada satu lagi hal yang kita miliki tidak cukup
terlihat, setidaknya dengan ejaan ini. ya?
>> SISWA: Readline.
>> DAVID J. Malan: Readline.
Readline kita tidak melihat, per se, di C, meskipun terdapat sesuatu
serupa, tapi kami telah menggunakan GetString, dan ini adalah mitranya.
Jadi jika saya pergi ke ini direktori, yang kebetulan,
seperti yang saya akan menjelaskan dalam sedikit di vhost saya direktori dan sumber saya direktori A,
dan aku pergi ke depan dan melakukan dot slash conditions-- whoops-- dot slash
kondisi 1, Anda akan melihat, sekali lagi, izin issue-- sama ditolak.
>> Jadi biarkan aku memperbesar dan melakukan chmod plus x pada kondisi, kondisi slash dot.
Saya ingin integer, silakan, 50.
Dan kita bisa bermain ini permainan sepanjang hari.
Itu akan berperilaku persis seperti yang terjadi pada minggu satu.
>> OK jadi tidak semua yang berbeda, kecuali tidak hanya itu sedikit sedikit sintaks,
tapi di atas, saya lagi memiliki baris ini yang
memungkinkan saya untuk menciptakan sesuatu yang tampak seperti sebuah program C yang disebut halo,
disebut kondisi 1.
Tapi itu bukan 0 dan yang Aku mengeksekusi langsung.
Ini bukan menjalankan ini interpreter yang namanya
kebetulan identik dengan bahasa.
Program ini disebut PHP, dan kode saya di bawah garis satu sedang berlalu ke dalamnya.
>> Kita bisa melakukan hal yang lain cukup sederhana Contoh mengingatkan sesuatu
kami lakukan minggu yang lalu.
Sekali lagi, ini adalah semacam potongan sewenang-wenang kode
yang tampaknya tidak apa ketika Anda menjalankannya?
Apa ini akan mencetak, mungkin?
>> Jadi pada awalnya on line 16, itu akan mengatakan x sekarang 2, mungkin.
% D adalah sama dengan $ i untuk printf.
Jadi itu cubing, dot, dot, dot, sejalan 17.
Dan kemudian baris 18 muncul untuk memanggil fungsi dadu.
Dan di mana dadu didefinisikan?
>> Yah, sepertinya sejalan 25, sehingga tidak semua yang berbeda.
Aku punya beberapa komentar di atas itu, tetapi untuk sebagian besar,
itu cukup mudah porting atau konversi
dari program C ke versi PHP.
Tapi sekarang ada beberapa perbedaan yang mungkin harus melompat keluar.
Apa lagi yang berbeda tentang bagaimana Anda mungkin menulis program yang sama ini di C?
>> SISWA: [tak terdengar].
>> DAVID J. Malan: Ada tidak ada prototipe di bagian atas.
Jadi PHP-- dan terus terang, banyak languages-- yang modern
adalah jauh lebih cerdas dan lebih bermanfaat dari C kompiler bahwa Anda
dapat menempatkan fungsi di sini, Anda dapat menempatkan fungsi di sini,
dan penafsir akan untuk melakukan Anda mendukung membaca
seluruh file sebelum memutuskan bahwa beberapa fungsi tersebut tidak ada.
Sehingga perbaikan yang bagus tahun kemudian.
Tapi ada juga sesuatu lain yang berbeda atau tidak ada di sini.
Ya?
>> SISWA: [tak terdengar].
DAVID J. Malan: Kami tidak perlu mendeklarasikan jenis variabel,
jadi kita akan melihat sebelum panjang yang ada berbagai jenis di PHP,
tetapi Anda tidak perlu menentukan mereka, yang juga adalah baik dan buruk.
Dan ada satu hal yang hilang lainnya.
>> SISWA: Tidak ada perpustakaan.
>> DAVID J. Malan: Tidak ada perpustakaan.
OK, jadi itu bagus.
Kami mendapatkan lebih banyak keluar dari kotak.
Jadi sebenarnya ada lebih banyak hal daripada yang saya pikir berbeda.
Bagaimana cara di belakang?
Apa itu?
Katakan sekali lagi?
>> SISWA: Pointer.
>> DAVID J. Malan: Tidak ada pointer.
OK, setidaknya dalam contoh ini, tidak ada.
Itu adil.
Jadi tidak ada pointer di PHP sebenarnya secara umum.
Ada sesuatu yang disebut referensi, tapi kita tidak akan menghabiskan terlalu banyak waktu di sana.
Dan apa lagi?
>> SISWA: Main.
DAVID J. Malan: Main.
Jadi ini adalah masalah besar yang Aku sedang berpikir tentang.
Perhatikan tidak ada pintu masuk utama.
Anda hanya mulai menulis kode Anda.
Dan ini sebenarnya akan menguntungkan
ketika kita transisi sebentar untuk benar-benar menggunakan
bahasa yang sama ini untuk web berbasis pemrograman, yang kami
tidak ingin hanya memiliki satu titik masuk.
Kita mungkin ingin memiliki banyak URL, sekelompok file yang berbeda
semua mengambil di input pengguna dan menghasilkan output.
>> Tapi di sini adalah sangat menyedihkan contoh yang saya berjanji terakhir kali,
yaitu dalam folder ini di sini, salah ejaan.
Jadi dalam file ejaan ini, yang kami tidak akan menghabiskan terlalu banyak waktu, ada
dasarnya porting-- P-O-R-T. Hanya saja kata yang diberikan ketika, katakanlah,
Anda mengkonversi dari satu bahasa yang lain secara manual biasanya.
>> Ini adalah port dari PC versi ejaan dari PSET 5.
Dan saya pada dasarnya mencoba untuk mengkonversi baris demi baris sedekat mungkin.
Jadi jika Anda suka hal semacam ini, itu benar-benar bernilai di beberapa titik
menarik mereka berdua side by sisi dan melihat apa yang sama
dan apa yang berbeda.
Tapi mereka pretty darn serupa.
Jika Anda ingat apa ejaan bahkan tampak seperti,
meskipun Anda tidak harus mengubah file ini,
itu sangat mirip struktural dengan hanya beberapa
perubahan di sana-sini.
>> Jadi ini hanya untuk mengatakan bahwa itu cukup mudah untuk mengkonversi ejaan
dari C ke PHP.
Tapi dalam kamus, ada sesuatu yang lebih menarik.
Biarkan aku pergi ke depan dan menciptakan File dictionary.php saya sendiri.
Jadi sedikit berbeda dalam bahwa kita akan menyebutnya php bukan c.
Karena ini adalah file PHP, saya do-- sedikit annoyingly-- memiliki
untuk memulai file dengan tag php seperti itu.
Dan aku akan pergi ke depan dan mendefinisikan beberapa fungsi.
Fungsi yang disebut cek, yaitu akan mengambil dalam kata seperti sebelumnya.
Tetapi argumen ini akan memiliki satu dolar
menandatangani karena kita, sekali lagi, menggunakan PHP.
Fungsi lain dari dictionary.c adalah beban
dan butuh atas nama kamus, jadi saya akan mendapatkan bahwa fungsi siap untuk pergi.
>> Satu lagi di dictionary.c adalah apa?
Ukuran adalah salah satu yang terbaik, di Setidaknya jika Anda terus beberapa variabel sekitar.
sehingga ukuran hanya harus mengembalikan variabel.
Dan kemudian ada membongkar.
>> Jadi ada empat ini fungsi dalam masalah set 5
yang Anda butuhkan untuk melaksanakan dengan beberapa struktur data atau struktur.
Jadi saya berjanji bahwa dalam PHP, kita dapat mendeklarasikan
tabel hash, misalnya, semua yang lebih mudah.
Bahkan, jika saya ingin tabel hash, Aku hanya akan pergi seperti itu
dan ada tabel hash saya.
Dan itulah catatan, menyedihkan, yang kami tinggalkan pada terakhir kali.
Dan kau tahu apa, jika saya ingin variabel untuk ukuran, baik,
yang satu ini tidak semua yang berbeda dari C,
tapi aku akan pergi ke depan dan melakukan itu.
Dan melihat ada jenis data.
Dan aku akan kembali nanti dan benar-benar menambahkan beberapa komentar di sini.
Tapi bagaimana dengan beban?
>> Jika tanda dolar kamus adalah nama file saya
dan aku benar-benar ingin memuat kata ke dalam tabel ini sekarang,
Aku benar-benar bisa melakukan sesuatu yang cukup sederhana.
Satu-- dan ini minorly annoying-- di PHP,
Anda harus menentukan dalam fungsi jika Anda
ingin mengakses beberapa dunia variabel yang didefinisikan di luar.
>> Tapi itu tidak terlalu menarik sekarang.
Apa yang lebih menarik adalah ini untuk masing-masing membangun yang saya sebutkan terakhir kali.
Dan ternyata PHP memiliki fungsi disebut berkas yang tujuannya dalam hidup
adalah untuk membuka file dan membaca di semua lini ke dalam sebuah array
dan tangan mereka kembali ke.
>> Yang mengatakan saya bisa melakukan kamus sehingga yang sekarang efektif ketika saya memanggil file,
ini akan tangan saya kembali array kata-kata dari file.
Ini tidak semua yang baik itu.
Ini masih akan menjadi garis kata-kata, sesuatu yang linear.
Tapi aku bisa pergi ke depan dan iterate lebih dari setiap kata-kata ini menggunakan
sintaks yang kita lihat sebentar terakhir kali.
Dan Anda akan melihat lebih di PSET mendatang.
>> Tapi sekarang aku punya loop iterasi lebih dari setiap kata dalam kamus.
Dan pada setiap iterasi, ingat aku memanggil kata saat ini "kata."
Dan semua itu akan dibawa ke menempatkan kata dalam kamus
akan menjadi kata menebak "benar."
Itulah fungsi insert saya.
Itulah fungsi beban saya untuk kamus saya.
Sekarang sedikit menipu karena, Anda tahu apa, sebenarnya ada
backslash n pada akhir dari kata-kata bahwa saya mungkin harus menyingkirkan,
tapi itu tidak masalah karena PHP memiliki fungsi yang disebut chop yang secara harfiah
daging dari salah satu karakter di akhir.
Jadi tidak ada masalah di sana.
Kami telah pergi ke depan dan benar-benar disingkat bahwa hanya ini.
Dan sekarang aku mungkin harus melacak ukuran, jadi mari kita setidaknya melakukan this--
Ukuran ++.
Aku bisa melakukannya seperti sebelumnya.
Dan maka ini mungkin akan bekerja dengan baik, sehingga kita kembali benar.
Selesai.
PSET 5.
>> [Tertawa]
>> DAVID J. Malan: OK.
Kita akan melakukannya lagi dengan PSET berikutnya, juga.
Jadi apa tentang ukuran?
Nah, yang satu ini mudah-mudahan adalah tentang seperti yang Anda harapkan terakhir kali,
meskipun saya harus melakukan Hal global yang bodoh ini.
Ini hanya sebuah artefak dari desain bahasa ini.
>> Tapi cek sedikit lebih menarik.
Jadi jika aku melewati dalam dolar tanda kata, saya pertama kali
ingin memiliki akses ke bahwa tabel variabel global.
Dan sekarang jika saya ingin memeriksa apakah kata ada,
Aku hanya bisa mengatakan jika memang benar bahwa berikut ini diatur dalam tabel,
kemudian pergi ke depan dan kembali benar; lain, kembali palsu.
Selesai.
Sisi lain dari PSET 5.
>> Baiklah, jadi sekali lagi, aku memotong beberapa sudut.
Dalam keadilan, saya mungkin harus menghabiskan beberapa detik lagi
pada implementasi ini.
Dan aku mungkin tidak harus mengejek semua jam Anda memakai PSET begitu banyak.
Jadi strtolower adalah fungsi.
Sesuatu eksistensialis serupa di C, setidaknya untuk karakter,
namun PHP punya versi string seluruh.
>> Itu akan memaksa segala sesuatu huruf kecil, yang sebagian dari Anda
mungkin telah dilakukan canonicalize apa Anda meletakkan dalam kamus Anda.
Dan sekarang Anda dapat melakukan ini di C juga.
Hal ini tidak ada hubungannya dengan PHP.
>> Tetapi setiap kali Anda memiliki kondisi Boolean,
seperti sesuatu on line 10 di sana, yang hanya
akan mengevaluasi dengan benar atau palsu, dan jika yang lain jelas
adalah kembali benar atau salah, aku bisa hanya benar-benar membuat seksi ini
dan hanya melakukan sesuatu seperti ini.
Sehingga ada fungsi saya cek.
Benar, jika Boolean yang mengembalikan benar atau salah,
mari kita kembalikan langsung.
>> Dan ada beberapa tweak lainnya Aku bisa membuat di sana-sini.
Membongkar Load--, by the way, itu selesai.
Tidak ada hubungannya di sana.
Karena semua memori di PHP dan banyak bahasa lainnya
sebenarnya dikelola untuk Anda.
Jadi sedangkan di C, seperti Anda telah belajar menyakitkan,
apa pun yang Anda malloc atau calloc atau realloc, Anda harus membebaskan diri.
Apa pun yang Anda fopen, Anda harus fclose, sehingga sumber daya yang pada akhirnya dibebaskan
dan alat-alat seperti Valgrind tidak melihat dan tidak mengeluh,
yang merupakan hal yang baik untuk berjalan pada mereka.
>> Tapi tentunya, harus ada ada beberapa menangkap, kan?
Jika tidak, kita seperti terbuang sejumlah besar minggu.
Jadi ada sejumlah alasan mengapa kita semacam mengambil lintasan ini,
tapi ada trade-off.
Benar, ini telah menjadi tematik.
>> Jadi apa yang mungkin trade-off di sini bergerak, dari C ke PHP?
Terasa seperti semua menang sejauh selain sedikit keburukan sini atau di sana.
Ya.
Apa itu?
>> SISWA: [tak terdengar] memori.
DAVID J. Malan: Kecepatan.
OK.
Nah, kecepatan saya cukup cepat.
Benar?
Tapi kecepatan eksekusi program?
OK, jadi itu adalah titik adil.
>> Jadi seperti itu akan terjadi, aku di muka cued up kedua solusi mencoba saya, satu
Aku punya di papan besar adalah solusi-coba berbasis,
dan saya memiliki dalam direktori ini di sini.
Jadi saya sebentar lagi, aku bisa pergi ke depan dan menjalankan ini pada Alkitab King James,
menekan Enter.
Dan ini mudah-mudahan benar implementasi pada akhirnya,
memberi saya waktu total 0,38 detik untuk itu
salah satu contoh agak sewenang-wenang.
>> Dan jika saya sekarang pergi ke ini jendela terminal kedua
di sini di mana saya pertama kali membuka gedit, biarkan aku pergi ke code-- hari ini yang, sekali lagi,
dalam direktori ini di sini-dan biarkan aku pergi ke depan dan menjalankan ejaan.
Jadi hanya harus jelas, ini adalah versi PHP.
Aku hanya menunjukkan bagian atas sini.
>> Jadi jika saya melakukan ejaan dari tilde CS50 PSET 5 teks, King James, masukkan.
Ini masih lebih cepat daripada menulis di C, tetapi total waktu
adalah, pemberitahuan, 0.93, sedangkan saya Implementasi berbasis C adalah 0.38.
Jadi itu adalah perbedaan yang tidak sepele.
>> Dan ini hanya pada satu file.
Jika Anda adalah untuk menjalankan dua program versus papan besar
dan memiliki sejumlah besar input diuji, ini pasti akan bertambah.
Dan jika kita memiliki set data yang lebih besar, ini juga akan menambahkan semua lebih.
Jadi ya, membayar harga tertentu kecepatan memang terjadi.
Apa lagi?
Ya?
>> STUDENT: Jumlah penggunaan RAM.
>> DAVID J. Malan: Jumlah penggunaan RAM.
Jadi saya tidak memberikan satu detik berpikir saat menulis PHP ini
Versi untuk berapa banyak memori saya gunakan.
Aku benar-benar menunda bahwa untuk PHP itu sendiri dan siapa pun yang menulis program tersebut.
Dan itu mungkin OK, tetapi jika aku benar-benar benar-benar
peduli meremas sebanyak kinerja dari program saya atau dari website saya
atau keluar dari alat apa pun Aku sedang membangun, mungkin
PHP, memang, bukan bahasa yang tepat.
>> Dan pada kenyataannya, itu sebabnya, untuk Misalnya, banyak web servers--
program aktual yang melayani sampai web content--
tidak ditulis dalam PHP atau Python atau Ruby.
Mereka ditulis, seperti Anda sekarang akan melakukan dengan PSEt 6,
di C sehingga Anda dapat menekan setiap sedikit kinerja dari itu
dan benar-benar berolahraga kontrol fine-grain atas apa
terjadi di bawah hood, bukan hanya mengambil
untuk diberikan beberapa tinggi struktur data tingkat.
>> Pertimbangkan, setelah semua, siapa pun di PHP diimplementasikan
bahwa gagasan hash table-- itu sebenarnya lebih
benar disebut array-- asosiatif apakah ia tahu apa jenis
input Anda akan menjadi menempatkan ke dalam struktur?
Jadi jelas tidak, kan?
Ini adalah alat generik dalam toolkit yang
diberikan kepada siapa saja yang ingin untuk menggunakannya, dan so pasti itu
tidak dapat dioptimalkan pada akhirnya untuk apa yang ingin Anda lakukan.
>> Jadi waktu pengembangan trade-offs-- mungkin berbeda, kinerja mungkin berbeda,
kompleksitas atau penggunaan memori mungkin berbeda.
Dan jadi apa yang Anda akan menemukan semakin adalah bahwa ada
akan berbeda alat untuk perdagangan.
Dan pada kenyataannya untuk sebagian super tugas akhir orang di kelas ini,
percaya atau tidak, C tidak akan menjadi bahasa yang tepat untuk digunakan.
>> Dan pada kenyataannya, salah satu takeaways akhirnya untuk setiap kelas seperti ini
adalah untuk membuat Anda berpikir tentang, baik, apa yang harus Anda melepas
rak bila Anda ingin untuk memecahkan beberapa masalah.
Dan memang, kita akan menyeberangi jembatan ini bahkan lebih seperti yang kita lihat lebih banyak bahasa
bahkan di luar hari ini.
>> Jadi mari kita transisi sekarang untuk mungkin konteks yang lebih familiar
untuk menggunakan bahasa seperti PHP.
Ini agak umum untuk menggunakan di baris perintah, menulis skrip
seperti yang kulakukan, tapi itu jauh, jauh lebih umum.
Dan itu dimaksudkan untuk digunakan dalam bentuk file yang biasanya berakhir
di .php-- tapi itu bukan prerequisite--
bahwa mereka menghasilkan konten web.
>> Jadi biarkan aku pergi ke depan dan membuka beberapa contoh saya dipersiapkan sebelumnya.
Dan ini sebenarnya semacam benar cerita dalam bahwa salah satu hal pertama
Yang pernah saya lakukan sendiri setelah menyelesaikan CS50 dan mungkin, saya pikir,
CS51 tahun lalu adalah saya teman sekamar dan saya membantu
untuk menjalankan intramural mahasiswa Program olahraga, yang, pada saat itu,
telah mahasiswa mendaftar untuk berbagai olahraga dengan mengisi secarik kertas,
seperti yang disebut, berjalan melintasi halaman ke Wigglesworth,
dan menjatuhkannya di beberapa proctor itu penurunan pintu.
Dan kemudian ia akan pergi melalui mereka dan kemudian benar-benar email kami secara manual
bahwa kami terdaftar untuk beberapa olahraga.
>> Jadi jelas, kesempatan untuk perbaikan.
Hari-hari ini, Anda dapat mematikan hanya Google Forms, tetapi kembali pada hari,
kita harus benar-benar mencapai for-- ini bahkan tidak selama itu ago-- mencapai
untuk pemrograman yang bahasa yang tidak PHP.
Pada saat itu, itu sesuatu yang disebut Perl,
yang telah keluar dari mode sejak.
Tetapi gagasan adalah sama.
>> Dan saya pada dasarnya duduk untuk mencoba ke port pergi versi Perl PHP,
tetapi dalam disclaimer penuh, tidak memberikan setiap berpikir untuk estetika dulu.
Jadi di sini adalah halaman web.
Ini adalah file.
Jika saya memperbesar, yang rupanya disebut froshim0.php
hanya karena pertama kami contoh dalam seri ini.
Dan melihat bahwa ia memiliki apa yang tampak menjadi bentuk HTML sangat jelek,
tapi bentuk menarik karena memungkinkan
saya untuk memberikan masukan pengguna ke browser.
>> Sekarang terakhir kali ketika kita memiliki bentuk, untuk siapakah kami sampaikan parameter query kita,
parameter antrian seperti yang disebut?
Jadi untuk Google, kan?
Kami benar-benar punted pada gagasan melakukan apapun dengan masukan itu.
>> Tapi hari ini, kita mulai memproduksi output.
Dan perilaku aku akan melihat di sini awalnya sangat sepele.
David, aku akan memeriksa off jender di sini, katakan Matthews sini.
Aku tidak akan menjadi kapten.
Aku akan klik Daftar.
Dan perhatikan bahwa URL memiliki berubah untuk mendaftar-0.php,
dan kemudian ada teks ini jelek di sini.
Aku tidak memikirkan format ini.
>> Tapi apa yang menarik adalah bahwa tiga Nilai-nilai itu tampaknya berlalu dalam.
Ini adalah semacam PHP dari setara dengan printf--
kita akan melihat apa itu benar-benar disebut dalam bit-- yang hanya mencetak
apa yang Anda berlalu ke dalamnya.
Jadi ini menunjukkan bahwa bentuk yang memiliki setidaknya tiga bidang itu,
dan Anda melihat saya mengetikkannya di.
Salah satunya adalah nama saya, salah satu adalah jender, salah satu adalah asrama.
Dan kapten bahkan tidak dikirim ke server karena saya tidak memeriksa itu.
>> Jadi ini adalah untuk mengatakan tampaknya, ketika Anda mengirimkan hal-hal di web,
tidak hanya melakukan URL kadang-kadang change-- kadang-kadang tidak.
Bahkan, nama file berubah, tapi apa yang absen dari URL
bahwa kita memang melihat terakhir kali dengan Google.
Ya?
>> SISWA: Tidak ada string kueri
>> DAVID J. Malan: Tidak ada string kueri.
Tidak ada tanda tanya sesuatu.
Tidak ada tanda tanya q sama kucing, seperti yang kita lakukan terakhir kali.
Dan pasti ada tidak ada Nama tanda tanya sama
David atau asrama sama Matthews, jadi di mana adalah bahwa semua akan?
>> Nah, biarkan aku kembali ke gedit sini dan membuka yang pertama dari file-file
di vhost saya, host lokal, masyarakat direktori di sini dan pergi ke froshim0.
Jadi ternyata bahwa hampir semua halaman ini hanya HTML.
Dan ini mungkin asing bagi Anda, tetapi segera akan lebih lagi dengan PSET 6
dan PSET 7 dan PSET 8.
Tapi ini hanya sebuah halaman HTML.
>> Dan hal-hal yang menarik tampaknya di sini.
Sebuah tag form yang atribut tindakan memiliki nilai register 0.
Itu sebabnya ketika saya serahkan ini, ia pergi ke file tersebut.
Namun metode adalah posting today-- berbeda.
Jadi ternyata ada yang setidaknya dua metode di web digunakan
untuk mengirim informasi dari browser ke server.
Dapatkan menempatkan dalam URL.
Posting menempatkan di tempat lain.
Dan kapan dan mengapa mungkin Anda benar-benar ingin website
menggunakan pos maka sebagai gantinya dari mendapatkan, hanya intuitif?
Setiap situs web.
Jenis data harus dilalui hanya dengan kesimpulan sekarang via pos sebagai lawan
untuk mendapatkan, jika kita telah melihat dua perbedaan?
SISWA: [tak terdengar] aman.
DAVID J. Malan: Jika Anda ingin sesuatu yang harus aman.
Jadi Anda mungkin mengetik password ke sebuah situs web, kartu kredit
ke sebuah situs web akan jenis ini suboptimal
jika browser menempatkan bahwa nilai dalam URL.
Mengapa?
Anda melihatnya, yang tidak tampaknya seperti masalah besar,
tapi kemungkinan besar Anda cukup sering berjalan jauh dari komputer komputer atau penggunaan Anda
laboratorium, dan sehingga seseorang lain atau bahkan teman sekamar
bisa dengan mudah berjalan dan melihat bahwa informasi pribadi.
Ketika Anda mengirim email melalui web, Anda mungkin
tidak ingin bahwa data akhir di URL juga.
Dan jadi ada sejumlah alasan mengapa kita mungkin ingin taruh di sini.
Bahkan dan kanan photos--, aku tidak bisa cukup bayangkan bagaimana Anda akan mengambil grafis,
seperti JPEG, dan memasukkannya ke dalam URL.
Anda bisa melakukannya.
Ada cara pengkodean itu, tapi itu tidak langsung seperti itu.
>> Jadi daftarlah 0 sebenarnya sangat underwhelming.
Semua itu mengatakan benar adalah ini.
Ia akan mencetak dalam beberapa HTML tag berikut.
Aku punya tag PHP di sini bersarang dalam pra tag.
"Pre" hanya berarti teks pra-diformat, mono-spasi, seperti mesin ketik.
>> Printr adalah cetak fungsi rekursif.
Dan kemudian ada ini Hal yang menarik di sini.
Dan kami akan kembali ke ini karena ada orang lain,
tetapi tanda dolar garis bawah posting tampaknya
variabel di PHP di mana apa pun Anda kirim dari browser ke server
akan disimpan untuk Anda.
Dan kita akan melihat bagaimana untuk mendapatkan informasi sebelum lama.
>> Tapi pertama-tama, mari kita kembali ke contoh yang sedikit berbeda.
Pergi ke register-- atau bukan, froshims1.php,
yang terlihat sedikit berbeda.
Aku mengambil sedikit lebih usaha dengan format,
meskipun itu masih sangat jelek.
Tapi aku akan pergi ke depan dan ketik "David" sekarang.
Male.
Kami akan memeriksa "Kapten" kali ini.
Kami akan melakukan Matthews.
Dan mendaftar.
>> Dan kali ini ia mengatakan, hm, tidak benar-benar.
Baiklah, jadi apa yang mendaftar 1?
Biarkan aku pergi ke terbuka daftar 1 hm dan-.
Baiklah, jadi ini adalah menarik, dan ini
adalah batu loncatan sekarang menuju program yang lebih menarik.
>> Perhatikan bagian atas dari file ini memiliki Tag PHP serta beberapa komentar.
Dan ini, untuk saat ini, pengalih perhatian jadi mari kita menyingkirkan mereka komentar
sama seperti mereka berada di C. Dan saya mengklaim dengan potongan kode ini dengan komentar
bahwa kode ini memvalidasi pengajuan.
>> Nah, ternyata bahwa variabel seperti tanda dolar
menggarisbawahi posting adalah disebut Super GLOBALS.
Mereka seperti ini variabel global khusus
yang hanya omni-saat tersedia dalam program Anda.
Dan Anda dapat menggunakan notasi braket persegi indeks ke mereka tidak menggunakan angka
seperti 0, 1, 2, 3, tetapi kata-kata yang sebenarnya.
>> Jadi Anda bisa memikirkan tanda dolar menggarisbawahi pos sebagai semacam tabel hash
bahwa Anda bisa melewati kunci ke dalam, lookup kata di antara tanda kurung siku,
dan itu akan memberikan Anda kembali nilai bahwa pengguna benar-benar tersedia.
PHP memiliki fungsi disebut kosong yang hanya
mengatakan ya atau tidak, ini variabel kosong atau tidak.
Kami memiliki ini ganda bar, yang hanya berarti atau, seperti di C.
>> Jadi pada dasarnya, baris ini 4 hanya mengatakan jika pengguna tidak memberikan nama
atau tidak memberikan jenis kelamin atau tidak memberikan asrama, pergi ke depan dan mengarahkan dia
atau dia melalui jalur ini di sini.
Jadi ini adalah sedikit samar, tapi ini hanya berarti harfiah
kembali ke lokasi ini, sehingga Punts pengguna
kembali ke mana pun ia berasal.
Tapi itu janggal sedikit dalam bahwa saya sulit kode itu.
>> Tapi bagaimana jika hal ini jika kondisi tidak mengevaluasi true?
Bagaimana jika pengguna memang memberi saya nya atau nama dan asrama dan jenis kelamin?
Itu jika kondisi tidak akan mengevaluasi dengan benar,
jadi saya tidak memukul keluar sejalan 7.
Jadi apa yang terjadi?
Dan ini adalah apa yang menarik tentang PHP.
>> Anda bisa drop ke dalam dan keluar mode PHP, sehingga untuk berbicara.
Jika Anda ingin beberapa kode untuk mengeksekusi, Anda dapat membuka dan menutup tag PHP
dan menempatkan kode di sana seperti yang telah saya lakukan di sini.
Segera setelah Anda menutup tag PHP, server
hanya akan meludahkan apa pun yang Anda diletakkan di sana.
Dan memang, ini adalah bagian dari desain asli dari PHP,
untuk lebih baik untuk buruk, apakah ini percampuran kode dan markup
bahasa.
Dan kita akan melihat bahwa ini sangat cepat devolves menjadi berantakan.
Dan jadi kita akan lebih baik dari ini akhirnya, tapi hanya
melihat kemudahan yang saya sebenarnya mampu menjalankan beberapa logika.
>> Tapi masih sedikit underwhelming.
Mari kita membuka versi dua Frosh IM, yang
rupanya tunduk kepada register2.php.
Jadi file ini yang sebenarnya terjadi untuk terlihat hampir sama.
Aku akan pergi ke Frosh IM 2.
Namun dalam Frosh IM 2, mari kita lihat apa yang terjadi.
>> David, klik tombol radio, seperti itu disebut; Matthews, tidak ada kapten.
Mendaftar.
Anda terdaftar.
Tidak benar-benar.
Oh, tunggu, kita hanya melakukan contoh itu, bukan?
Baiklah, stand by.
Kami akan melakukan tiga.
Jelas sesuatu tentang terjadi dengan Gmail.
Kita akan sampai di sana.
>> Jadi Frosh IM 3 terlihat seperti ini.
Tidak berbeda.
Tapi ketika saya lakukan David, pria, Matthews, dan mendaftar, versi ketiga dan terakhir ini
klaim, cukup sederhana, Anda terdaftar benar-benar.
Itu semacam immaterial.
Tapi aku mengklaim dengan ini Versi ketiga dan terakhir
Saya sekarang telah diciptakan persis apa saya teman sekamar dan aku dibangun untuk Frosh IM
Program tahun yang lalu.
Dan itu sederhana.
Tidak ada database, ada spreadsheet Excel.
Tapi yang lebih penting, tidak ada lagi kertas
karena apa yang kita lakukan dengan program ini adalah untuk benar-benar email pengawas tersebut, yang
adalah menerima sebelumnya hal-hal ini melalui bentuk.
>> Dan rupanya kita sudah diprogram ini sedemikian rupa sehingga ketika seseorang register,
Email akun John Harvard yang proctor-- atau dirinya sendiri dalam hal ini,
John Harvard-- dengan berikut text-- "Orang ini hanya terdaftar."
Nama adalah David, kapten kosong; jenis kelamin, laki-laki; dan asrama, Matthews.
>> Jadi apa yang terjadi di sana?
Nah, file yang dimaksud di sini tampaknya register3.php.
Dan jika saya membuka ini, Anda akan melihat kedua kekuatan kode seperti ini
dan juga, terus terang, rasa tidak aman dari sistem seperti email.
Saya baru saja efektif berpura-pura menjadi John Harvard dengan cara berikut.
>> Saya memiliki tag php terbuka di bagian atas, yang hanya mengatakan inilah beberapa kode PHP.
Di sini, ternyata ada perpustakaan di PHP.
Anda hanya tidak perlu termasuk file tajuk sebanyak.
Anda mendapatkan lebih banyak dengan kitchen sink, sehingga untuk berbicara.
>> Tapi kali ini sejalan 4, saya lakukan ingin perpustakaan khusus yang disebut
PHP mailer, yang merupakan sesuatu yang Anda dapat menginstal secara gratis di banyak sistem.
Di sini aku memvalidasi pengajuan hanya
dengan memeriksa apakah pengguna memberikan saya nama, jenis kelamin, dan asrama.
Dan jika demikian, maju dan instantiate mailer.
>> Anda dapat menganggap ini sebagai sebuah baris kode yang hanya mengalokasikan.
Ini seperti malloc, tapi itu seksi sedikit
dalam yang Anda sebutkan tidak hanya malloc dan beberapa nomor generik.
Anda mengatakan memberi saya salah satu dari ini, memberi saya yang baru ini.
>> Dan jika Anda telah diprogram dalam Java atau C ++ atau bahasa lainnya,
Anda mungkin telah melihat ini.
Tapi pendek itu, jika asing, baris ini
menempatkan ke tanda dolar surat struct khusus yang disebut
sebuah benda yang memiliki built-in fungsi email.
Dan pada kenyataannya, perhatikan dan sintaks mirip.
>> Ini bukan pointer, per se.
PHP hanya menggunakan sintaks yang sama.
Baris ini mengatakan penggunaan SMTP-- Simple Mail Transfer
Protokol, yang hanya protokol yang digunakan untuk mengirim email.
Ini adalah menentukan penggunaan SMTP server yang Harvard, yang
adalah suatu tempat di sini di kampus.
>> Ini mengatakan apa TCP nomor port untuk diajak bicara,
dan aku hanya tahu bahwa oleh googling atau dengan meminta help desk.
Dan kemudian karena Harvard menggunakan beberapa sistem keamanan pada server-- email
setidaknya untuk mengenkripsi lalu lintas antara Anda dan itu,
meskipun siapa pun dapat mengirim ke itu-- Aku akan menghidupkan protokol TLS
untuk menjaga ini aman.
>> Tapi ini adalah di mana hal-hal mendapatkan sedikit menakutkan.
Aku hanya bisa sewenang-wenang mengatakan bahwa saya jharvard,
dan aku hanya bisa sewenang-wenang email diriku di sini.
Dan kemudian saya bisa menentukan subjek dengan baris ini di sini.
>> Dan ini hanya terlihat jelek, tapi itu hanya sekelompok Rangkaian.
Ternyata PHP memiliki simbol yang super berguna, seperti beberapa bahasa, operator dot,
yang hanya benar-benar merangkai String setelah tali setelah tali,
dan Anda tidak perlu malloc atau tokoh out total panjang string.
Anda hanya melakukannya.
Dan memang, karena aku concatenating dalam semua hal ini dengan titik-titik tersebut,
itu sebabnya email saya mengirim tampak seperti yang terjadi.
>> Dan kemudian terakhir di sini, aku mengirim surat.
Jadi jika ini adalah palsu, Aku hanya akan mati,
yang merupakan fungsi yang hanya mencetak ke layar beberapa pesan kesalahan.
Tapi itu adalah, pada kenyataannya, memanggil fungsi kirim.
Jika tidak, jika semua ini gagal, itu pengalihan saya kembali ke sini.
>> Dan mengapa saya melihat bahwa Aku benar-benar terdaftar?
Nah, hal itu terjadi di sini.
Jadi saya membawa ini untuk beberapa alasan.
>> Satu, ini adalah persis bagaimana jika Anda membangun beberapa situs web untuk tugas akhir
atau untuk dunia nyata, ini adalah bagaimana Anda mengirim email pengingat
kepada pelanggan atau pelanggan Anda.
Ini adalah bagaimana Anda mengirim pengingat password.
Ini adalah bagaimana Anda mengirim pesan orang bahwa mereka memiliki Facebook baru
pesan tertunda atau sesuatu seperti itu.
>> Tapi juga berbicara kepada fakta bahwa ini bisa
telah sangat baik dari Davin atau orang lain.
Dan saya katakan seperti ini dengan senyum karena aku
yakin apa yang terjadi melalui beberapa pikiran Anda pada saat ini.
Tapi ini adalah salah satu melakukan seperti yang saya mengatakan, tidak seperti yang saya lakukan hal-hal semacam,
karena itu adalah sepele untuk menempa email seperti ini.
Tapi seperti yang Anda mungkin telah melihat atau membaca di Crimson,
akhir-akhir ini juga cukup sepele bagi orang-orang
untuk melacak mereka kembali ke beberapa asal.
Dan meminta saya beberapa waktu, mungkin di CS50 makan siang, bagaimana saya pertama kali
berkenalan sangat erat hampir ke papan ed bertahun-tahun
lalu ketika saya menemukan bagaimana internet bekerja.
Jadi dalam setiap case-- sedikit setelah papan ed lakukan.
>> Jadi dalam hal apapun, ada Seluruh sekelompok super globals,
karena mereka disebut di sini, salah satunya kami saw-- posting dolar tanda garis bawah.
Ada rekan yang disebut get, yang mana barang-barang dari URL
berakhir akan.
Dan ada sejumlah besar orang lain, sesi too-- dan server dan kue.
Kami akan kembali ke cookie beberapa waktu lain,
tapi sesi jenis dingin karena tepat sekarang-- sampai sekarang--
segala sesuatu yang kita lakukan dengan browser web adalah semacam stateless, sehingga untuk berbicara.
Saya dapat mengklik sekitar, akses file di server, sesuatu
terjadi pada layar, tetapi maka koneksi ditutup.
Internet Explorer atau Firefox icon berhenti berputar
dan Anda hanya melihat apa halaman web berisi.
>> Jadi HTTP adalah stateless dalam setelah itu membuat sambungan,
mendapatkan beberapa data, itu saja.
Tidak ada lagi sambungan, tidak seperti Skype, tidak seperti Facetime, GChat tidak seperti yang
mempertahankan konstan koneksi ke server.
Web secara fundamental terputus, meskipun kami akan
lihat sebelum lama bagaimana kita dapat mensimulasikan hal-hal
seperti Facebook chat dan GChat, yang menjaga illusion--
atau benar-benar melakukan mempertahankan hubungan konstan menggunakan
teknologi yang lebih modern.
>> Tetapi jika aku pergi ke, katakanlah, counter.php, ini adalah contoh sederhana yang lain,
seperti yang akan kita lihat, yang saat ini berpikir Saya mengunjungi situs nol waktu.
Tapi jika saya hanya kembali halaman tersebut, entah bagaimana tahu aku ada di sini sebelumnya.
Jika saya reload lagi, tahu aku ada di sini sebelumnya.
Dan lagi dan lagi dan lagi dan lagi.
>> Jadi ada beberapa plus-plussing terjadi, tapi pemberitahuan
hal kecil berputar pernah jadi sebentar di bagian atas dan kemudian terputus,
sehingga tidak seperti saya memiliki konstan koneksi ke alat saya.
Nah, jika saya pergi ke counter.php, melihat betapa sederhananya adalah.
Saya pertama kali menyebutnya khusus fungsi yang kita akan segera
mulai mengambil untuk diberikan disebut sesi awal.
Mulai sesi.
>> Dan sesi selanjutnya hanya akan menjadi ember, seperti belanja
cart di mana Anda dapat menempatkan nilai-nilai dan jenis percaya sebagai programmer
bahwa mereka akan berada di sini ketika pengguna yang datang back-- kedua
kemudian, satu jam kemudian, bahkan setahun kemudian, asalkan ia tidak jelas
cookie mereka, seperti yang kita akhirnya akan melihat.
Dan sekarang saya hanya memiliki sebuah jika kondisi di sini.
Jadi jika kunci berikut, disebut counter, diatur dalam
super ini global-- hash ini tabel, jika Anda will-- disebut sesi,
kemudian pergi ke depan dan ambil nilai dari berpikir session--
ini sebagai belanja cart-- dan menyimpannya
dalam variabel sementara yang disebut counter.
>> Jika tidak, jika nilai counter adalah tidak diatur dalam apa yang disebut keranjang belanja,
hanya menginisialisasi ke 0.
Terakhir, di sini, pergi dan dimasukkan kembali ke dalam keranjang belanja atau sesi
nilai counter +1.
Jadi ternyata bahwa ini sini-wadah khusus
yang, sekali lagi, adalah salah satunya terkait array, array yang Anda dapat mengindeks
dalam kata-kata bukan Numbers tetap ada bahkan setelah pengguna hilang.
Sekali lagi, saya akan kembali ke halaman saat ini.
Sudah satu menit atau lebih.
Tapi ingat bahwa aku sudah telah di sini 19 kali sebelumnya.
Ini adalah kunjungan ke-20 saya.
>> Dan jadi ini akan menjadi kunci untuk melaksanakan setiap situs web yang ingat
bahwa Anda login, Anda menempatkan sesuatu yang literal di keranjang belanja Anda
untuk membeli atau bahwa Anda memiliki beberapa jumlah pesan yang tertunda.
Kapan saja Anda ingin mengingat informasi,
kita akan melihat PHP itu, seperti beberapa bahasa lain,
memberikan kita ilusi ini negara meskipun, seperti yang Anda lihat di PSET 6,
karena Anda membuat permintaan HTTP dari client ke server, itu saja.
Setelah Anda mendapatkan kembali bahwa respon, tidak ada yang lebih
kembali dari server secara default.
Tapi kita akan melihat bagaimana untuk bekerja di sekitar itu.
>> Nah sekarang, mari kita coba untuk membersihkan ini sedikit.
Kami telah melihat beberapa contoh yang berbeda di sana.
Oh, dan sebagai samping, untuk mereka yang akrab atau asing,
alasan bahwa Frosh IM contoh pergi
dari tampak benar-benar jelek untuk slightly-- dengan baik,
masih ugly-- untuk sedikit kurang jelek meskipun masih jelek
karena jika kita melihat kode sumber di sini,
ternyata saya punya ini di bagian paling atas dari file.
>> Ternyata bahwa bootstrap adalah salah satu dari banyak perpustakaan tersedia secara bebas di luar sana
yang ada tidak untuk bahasa pemrograman selalu, tetapi untuk CSS atau JavaScript
atau HTML atau sejumlah bahasa.
>> Dan orang-orang ini di sini- awalnya keluar
dari Twitter-- hanya sejumlah besar gaya.
Ini file besar di sini bahwa seseorang menulis,
atau seseorang menulis, dari waktu ke waktu yang menentukan warna dan format
dan yang lainnya sehingga saya bisa jenis meminjam sintaks mereka
dan tidak harus mencari tahu bagaimana lay out formulir saya.
Hal ini juga minified sehingga komputer dapat
mengerti tapi tidak tentu manusia.
Jadi itu hanya mengapa stilisasi ada berubah.
>> Tapi mari sekarang kita lakukan lebih baik dalam hal desain,
karena jika kita tinggal di bawah jalan ini terlalu lama,
kode kita akan mendapatkan berantakan dan berantakan.
Jadi mari kita fokus pada beberapa contoh di sini.
Yang terakhir untuk hari ini.
>> Jadi di sini adalah super sederhana versi 1.0 dari situs CS50 ini.
Hanya memiliki link ke kuliah dan silabus,
dan ia menggunakan bahwa daftar unordered tag-- tag UL yang kita gunakan terakhir kali.
Dan jika pada kenyataannya, jika saya membuka View Page Source,
Anda akan melihat bahwa ini adalah benar-benar, benar-benar HTML sederhana.
Dan pada kenyataannya, meskipun ini adalah file PHP di bawah tenda,
itu masih hanya meludah out hanya HTML untuk saat ini.
>> Jadi jika saya klik pada Lectures, kita melihat hal ini terjadi.
Dan jika saya klik pada minggu nol, kita melihat hal ini.
Dan jika saya klik pada Rabu, kita melihat hal ini.
Dan ini tampaknya adalah PDF slide dari hari itu.
Semua yang telah saya lakukan Link dengan anchor tag ke URL ini di sini.
>> Jadi ini hanya untuk mengatakan ini adalah cukup Versi sederhana dari situs CS50 ini.
Mari kita lihat bagaimana hal itu diimplementasikan.
Jika saya pergi ke direktori mvc0, kita akan melihat beberapa file.
Salah satunya adalah README, jadi jika beberapa ini terlalu cepat,
Anda hanya dapat melihat-lihat lebih santai nanti.
Dan pemberitahuan di sini adalah file index.php.
Ternyata bahwa jika Anda sendiri, manusia,
tidak menentukan nama akhir dalam URL, server web biasanya
menyimpulkan beberapa nama standar untuk Anda.
Indeks dot sesuatu umumnya default.
>> Jadi itu sebabnya beberapa saat yang lalu ketika saya mengunjungi URL ini di sini,
tidak ada nama file, tidak ada file ekstensi, ada periode dalam URL.
Itu hanya tahu entah bagaimana ajaib untuk mencari index.php.
Ini hanya sebuah konvensi.
Bisa disebut apa-apa.
>> Jadi jika sekarang saya pergi ke index.php, Anda akan melihat
bahwa, indeed-- mari menyingkirkan komentar
di sini karena ada benar-benar ada yang menarik untuk itu--
ini hanya sulit kode HTML.
Jadi itu konsisten, meskipun, dengan klaim saya
bahwa Anda dapat bercampur HTML dan PHP.
Tidak ada sebenarnya pemrograman logika dalam sini.
>> Dan file lain cukup banyak hanya sebagai menarik.
Hanya saja keras-kode minggu satu di sini untuk satu minggu m dan minggu satu w,
untuk hari Senin dan Rabu.
Dan kemudian jika saya membuka minggu nol, melihat itu hampir identik.
>> Dan itu semacam takeaway kunci.
Perhatikan betapa berlebihan ini.
File-file ini hampir tidak berubah, namun saya menarik salah satu copy / pekerjaan pasta ini
di mana saya mengambil satu file-- mungkin dalam minggu zero-- disalin
ketika minggu satu datang, dan tweak beberapa nilai.
Kita mungkin harus dapat untuk berbuat lebih baik daripada ini.
>> Jadi mari kita kembali ke MVC dan masuk ke versi satu.
Dan melihat saya punya beberapa file, karena apa yang
adalah umum untuk semua file-file hanya saat ago-- jika aku kembali ke versi 0,
mari kita kembali ke indeks, dan hanya postulate--
setelah saya menyingkirkan comments-- yang apa bagian dari halaman ini
adalah mungkin dalam setiap salah satu dari file saya?
Sebut saja keluar.
Yang garis diduplikasi mungkin di semua halaman ini?
Ya?
>> SISWA: [tak terdengar].
>> DAVID J. Malan: 1 sampai 9.
Ya, benar-benar.
1 sampai 9, kecuali mungkin 8 perubahan sedikit karena CS50
menjadi kuliah atau Minggu nol atau sesuatu.
Tapi hampir identik.
Jadi semua hal ini hanya jenis disalin dan disisipkan.
Dan ada pasangan jalur lain yang dapat saya pikirkan
itu mungkin identik di semua file.
>> STUDENT: 12 dan 13.
DAVID J. Malan: Ya.
Tentu, 12, 13, dan 14 mungkin, hanya karena hal-hal yang menarik
yang terjadi pada baris 11 dan 10, sehingga akan tampak.
Jadi mari kita lihat versi 1, yang mencoba untuk memperbaiki ini.
Dalam versi 1 dari example-- MVC ini kita akan menjelaskan apa artinya MVC di moment-- sebuah
jika saya pergi ke indeks, itu jenis terlihat sedikit membingungkan sekarang.
Ini tidak sesederhana seperti sebelumnya.
>> Tapi begitu Anda mulai membacanya dengan cermat, itu
cukup sederhana apa yang dilakukannya.
Rupanya baris 1 dan baris 8 telah diganti
semua hal yang Anda hanya identified-- meskipun hanya untuk mengukur baik,
Aku meninggalkan ULS sana hanya dalam kasus beberapa hari tidak memiliki daftar hal-hal.
Dan begitu membutuhkan adalah jenis seperti pound termasuk di C. Ini salinan dan pasta
isi secara efektif di sini ke dalam file ini.
>> Jadi dalam header.php, karena Anda mungkin menyimpulkan dari namanya,
akan menjadi header halaman.
Ini semacam yatim di sini.
Hanya memiliki bagian atas untuk itu, tapi tidak ada lagi konten di bawah ini.
>> Dan jika saya melihat footer sementara itu, yang merupakan file lain mentioned--
yang satu ini bahkan kalah menarik, tapi sekali lagi, itu umum untuk semuanya.
Jadi ini adalah footer.
Ini adalah header.
Ini adalah file yang berubah, jadi mengapa tidak
mencoba untuk faktor luar kesamaan tersebut dengan dua baris di sini?
>> Tapi kita bisa membersihkan ini up sedikit lebih jauh.
Aku akan pergi ke depan dan membuka versi dua di mana
kita akan melihat bahwa ada file baru, helpers.php.
Kita akan melihat apa itu dalam sekejap.
Mari kita pergi ke indeks, sebagai entry point seperti sebelumnya.
>> Dan sekarang melihat saya membutuhkan helpers.php, tidak header atau footer.
Tapi pembantu adalah jenis seperti helpers.c dan helpers.h dari PSET 2
atau PSET 3 lama ketika Anda benar-benar melakukan pencarian dan menemukan untuk PSET itu,
dan Anda memiliki semua kode Anda untuk menyortir dan mencari dalam file terpisah.
Itulah yang terjadi di sini.
>> Dan sekarang baris 3 terlihat sedikit berbeda.
Dan itu hanya satu baris.
Untuk membuat ini bahkan lebih jelas, saya hanya bisa
jangan ini menjadi Gaya konsisten dengan segala sesuatu yang kita lakukan.
Tapi itu tidak benar-benar mengubah fungsi tersebut.
Ini hanya satu baris kode yang nyata.
>> Rupanya, ada fungsi di suatu tempat yang disebut membuat header,
dan ini adalah di mana hal-hal mendapatkan cukup kuat.
Perhatikan bahwa dalam kurung yang adalah apa bagian lain dari sintaks?
Ini mungkin agak sulit untuk mengatakan, tapi perhatikan there's-- Aku akan menaruh beberapa putih
ruang.
Ada tanda kurung siku.
>> Dan tanda kurung siku kita melihat sedikit lalu dalam konteks array asosiatif,
yang, sekali lagi, seperti tabel hash.
Dan jika Anda berpikir sekarang untuk C, urutan argumen ke fungsi
harus selalu sama.
Anda harus ingat apa yang memesan x is--, y, z atau z, y, x--
dan Anda harus selalu memberi mereka dalam urutan yang sama atau melihat mereka
jika Anda lupa.
>> Tapi ini tampaknya menjadi cara yang cerdas lewat sebuah nilai kunci sewenang-wenang
pasang dimana judul nama dari argumen dalam kasus ini
dan CS50 adalah nilainya.
Dan fakta bahwa saya memiliki ini tanda kurung siku
di sini berarti bahwa aku bisa juga lulus dalam sesuatu
seperti seminggu adalah 1 atau 0 atau 2 atau 3.
Jadi kita sudah parameter fungsi ini sedemikian rupa
bahwa diperlukan waktu beberapa masukan, tapi untuk saat itu hanya satu.
>> Jika saya sekarang pergi ke helpers.php, melihat apa yang dilakukannya.
Ini adalah sedikit fungsi baru,
tapi untuk saat ini hanya mengambil pada iman bahwa ini adalah
sintaks yang Anda mendefinisikan fungsi dalam PHP.
Anda benar-benar mengatakan fungsi.
Anda tidak menentukan return mengetik, dan itu konsisten
dengan detail variabel sebelumnya di mana Anda tidak benar-benar kuat mengetik.
>> Ini hanya menentukan itu, secara default, ini
mengambil asosiatif array sebagai argumen.
Dan kau tahu apa?
Jika pengguna tidak lulus satu in, asumsikan nilai default.
>> Ini adalah fitur yang C tidak memiliki bagi kami, yang bagus, karena sekarang
data, bahkan jika Anda tidak memberikan apa-apa,
akan menjadi Array tapi satu kosong.
Dan sebagai samping, ekstrak hanya melakukan sesuatu yang funky
di mana dibutuhkan semua kunci dari ini array asosiatif, semua hal-hal
Anda bisa dimasukkan ke dalam tanda kurung siku, dan menciptakan variabel dari mereka
sehingga kita akhirnya dapat memiliki akses kepada mereka dalam footet.php dan header.php.
Itu abstrak kecil, jadi biar menunjukkan ini.
>> Dalam index.php, perhatikan bahwa aku lewat di nilai pasangan kunci dari judul
dengan nilai CS50.
Jika saya sekarang melihat helpers.php, melihat RenderHeader yang
adalah penggalian data yang saya lewat in, dan kemudian membutuhkan header.php.
Apa yang saya lakukan adalah semacam orang miskin implementasi sekarang berikut.
>> Jika saya membuka header.php, pemberitahuan bahwa saya sudah tidak lagi keras
dikodekan CS50 kata dalam file header ini.
Aku sudah menempatkan ini diakui atrociously fungsi bernama, HTML karakter khusus,
di sana.
Tapi perhatikan apa yang telah kulakukan.
Aku punya terbuka HTML.
Saya kemudian memiliki kepala terbuka dan judul terbuka.
>> Dan kemudian dalam judul terbuka dan tag dekat, saya punya sedikit kode PHP.
Dan ini adalah bagus tapi sintaksis, yang hanya berarti echo keluar.
Secara harfiah berarti this-- gema following-- yang
tapi ini lebih seksi untuk menulis.
Echo keluar judul yang telah berlalu dalam.
>> Tapi apa yang Anda pikirkan HTML char khusus adalah semua tentang,
terutama jika Anda memiliki beberapa pengalaman sebelumnya HTML?
Karakter apa yang mungkin berbahaya untuk lulus ke halaman
di mana Anda menghasilkan dinamis halaman web dengan kode seperti ini?
Biarkan aku pergi ke file ini, versi dua, dan melihat apakah saya tidak dapat menginduksi ini.
>> Versi kedua adalah ini.
Dan memperhatikan segala sesuatu baik-baik saja, bekerja dengan baik.
Tapi bagaimana kalau aku pergi ke index.php dan Aku ditentukan bahwa judul halaman saya
tidak CS50.
Ini adalah braket terbuka peringatan skrip hello world, dekat kutip tunggal,
kurung tutup, titik koma, braket terbuka, skrip slash.
>> Script, seperti yang akan kita akhirnya melihat, adalah tag
yang dapat Anda gunakan untuk penggunaan lain bahasa pemrograman yang disebut
JavaScript dalam halaman web.
Dan sekarang melihat logika di sini.
Berikut ini adalah kunci yang disebut judul.
Berikut adalah itu nilai panjang gila sekarang.
>> Tetapi jika aku pergi ke pembantu page- atau lebih tepatnya, halaman header,
Aku memanggil fungsi ini pada gelar pertama.
Jadi jika sekarang saya kembali halaman ini, saya melihat ini, yang tampak konyol,
tapi aman.
Itu hanya tampak bodoh.
>> Tapi bagaimana kalau sebaliknya Aku lupa ini.
Dan menandai kata-kata saya, sejumlah nol Anda akan lupa untuk melakukan hal ini
dan Anda akan mendapatkan beberapa rajin siswa atau teman datang
Anda di pameran CS50 atau anonim pada malam hari mengaduk-aduk di website Anda
dan pada dasarnya menyuntikkan kode tanpa sepengetahuan Anda ke situs Anda
entah bagaimana.
>> Karena jika saya hanya meludah out judul di sini dan judul
besar-- baik, jika judul harfiah terlihat seperti ini dan PHP
sebagai bahasa yang bisa meludah out teks bahasa lain,
ini benar-benar terjadi untuk mengganti tag ini dengan,
Tentu saja, apa yang saya meletakkan di tempat lain.
>> Jadi jika sekarang saya pergi di sini dan kembali setelah mengurai mekanisme-mekanisme keamanan,
sekarang aku punya hello world sini.
Nah, itu tidak semua yang besar dari menangani, tetapi Anda bisa melakukan sesuatu
sedikit lebih berbahaya di sini, seperti ada
tags-- lainnya seperti yang akan kita lihat setelah kami menghabiskan lebih banyak waktu di JavaScript-- seperti lokasi
dot href mendapat, kutipan, tanda kutip, HTTP business.com, tapi kebalikan dari itu
dari hari lainnya.
Dan sekarang Anda dapat menginduksi web Laman benar-benar pergi segera
ke halaman web ini di sini.
>> Dan sebenarnya, aku tidak ingin bahkan pergi ke business.com
karena saya tidak ingin untuk mengetahui apa itu.
Tapi ini juga akan memicu kode untuk disuntikkan ke dalam halaman ini.
Jadi ini hanya untuk mengatakan bahwa meskipun kami memperkenalkan super awal pada beberapa
struktur ini lebih kompleks, itu semua menuju akhir memastikan
bahwa kode Anda tidak dieksploitasi.
>> Jadi sekarang versi ketiga di sini.
Sudah mulai pelamun kecil.
Aku tidak benar-benar like-- sisi anal saya
semakin sedikit terganggu oleh fakta bahwa saya telah fungsi yang disebut
RenderHeader dan RenderFooter yang hampir identik.
Jadi aku sadar, mengapa tidak dilakukan Saya parameterisasi fungsi-fungsi ini
menjadi hanya satu yang disebut render, memilikinya mengambil argumen kedua
seperti nama template, final untuk render-- baik header atau footer?
Dan kemudian opsional, jika saya ingin untuk lulus dalam beberapa pasangan nilai kunci
seperti yang saya lakukan untuk judul untuk sundulan tetapi tidak untuk footer,
Aku bisa melakukan itu.
>> Dan jika aku pergi ke helpers.php, itu sedikit lebih kompleks.
Dan aku akan melambaikan tangan saya di Rincian, tapi itu hanya satu fungsi.
Jadi itu langkah menuju desain yang lebih baik.
>> Kita dapat mengambil satu langkah lebih jauh.
Jika saya pergi ke keempat saya versi ini, perhatikan sekarang
bahwa saya melakukan sesuatu bahkan lebih jenis samar.
Dan aku tahu ini adalah banyak menyerap sekaligus,
tapi kami hanya jenis membersihkan segalanya.
Sekarang aku menempatkan pembantu saya file ke sebuah folder bernama
includes-- hanya sewenang-wenang nama di mana saya ingin menempatkan barang-barang
yang ingin saya include-- dan kemudian sisa ini adalah sama.
>> Tetapi jika saya melihat sekarang di gedit, pemberitahuan bahwa aku sudah menyingkirkan
dari semua file-file lain dan saya sudah memindahkan mereka, misalnya, menjadi di sini.
Dan kemudian di template, Aku punya ini di sini, juga.
Dan jadi ini semua sekarang menuju langkah menggunakan pola desain yang jauh lebih baik.
Dan kami sangat cepat akan pindah
dari fungsi default PHP, yang kita mulai di sini dengan,
di mana Anda hanya bercampur PHP, dan HTML, dan CSS Anda,
dan Anda hanya meludah keluar dan Anda pergi tentang cara Anda.
Ini tidak akan menjadi sangat dipertahankan.
Sama seperti di C, kami mulai menggunakan beberapa file dan beberapa fungsi
dan hal anjak piutang yang keluar.
Kami akan melakukan hal yang sama di sini.
Dan pada kenyataannya, di kelima dan terakhir versi di sini, saya melakukan satu hal lain.
Anda bahkan dapat menggunakan dot dot, yang, lagi, hanya direktori induk.
Agar sadar keamanan bahkan lebih, karena jika saya melihat mendengarkan yang
di sini untuk kelima dan versi final, pemberitahuan bahwa saya memiliki satu direktori di sini disebut
publik, dan kemudian pada tingkat yang sama, sehingga untuk berbicara,
Aku punya mencakup dan template dan kemudian file teks readme.
>> Dan alasan saya sudah terstruktur rasanya this-- dan begitu banyak web
host, terutama mereka $ 5 yang bulan atau yang $ 10 per bulan,
jika Anda pernah memiliki salah satu dari ini services-- apa yang begitu banyak dari mereka
adalah mereka hanya mengharapkan Anda untuk membuang semua file Anda ke dalam satu direktori,
seperti yang kita lakukan sudah dengan Contoh pertama ini.
>> Tapi begitu Anda mulai membangun lebih situs canggih yang hanya menyimpan
Data yang Anda sayangi dan file Anda peduli, benar-benar mengatur hal-hal
benar dan dengan keamanan yang lebih kesadaran dalam pikiran dapat
kita mulai untuk mempertahankan terhadap semua teman-teman
bahwa Anda memiliki baik dalam atau di luar kelas ini yang,
segera setelah Anda mulai membuat program sendiri di web,
akan mulai memilih pada Anda dan pada mereka.
>> Dan kita akan melihat akhirnya pada desain ini.
Ini hanya gambar yang menggambarkan sebagai berikut.
Kita akan menempatkan semua kami pemrograman logika dalam satu atau lebih file,
dan kita akan hanya mulai memanggil orang-orang pengendali.
Ini adalah di mana otak website kami sebenarnya.
Maka kita akan memiliki pandangan, dan pandangan
adalah sesederhana hanya terpisah files-- disebut template, sering.
Mereka hanya memiliki estetika halaman saya,
apa yang saya ingin halaman untuk melihat like-- warna dan tata letak
dan posisi semua variabel.
>> Dan kemudian lebih menarik bahwa pada akhirnya kita akan sampai ke
adalah model, yang akan menjadi hanya kata kita menampar pada teknologi lainnya
yang kita bawa ke dalam gambar, seperti database yang sebenarnya,
sehingga ketika Anda ingin untuk menyimpan informasi,
Anda tidak hanya mengirim email untuk pengawas atau untuk diri sendiri,
Anda benar-benar menyimpannya dalam database menggunakan bahasa lain yang dikenal sebagai SQL.
Dan jadi kita akan pergi dari sini hari ini dan mengambil dengan ini pada hari Rabu
dan memperkenalkan database kemudian.
>> [MUSIC PLAYING]