[MUSIC CHƠI] DAVID Malan: Đây là CS50, và đây là khởi đầu của tuần tám. Và chúng tôi rất vui mừng chào đón trở lại, bất ngờ lớn, Ramon riêng của CS50 Galvan, một cấp cao tăng người đã được chi tiêu trong nhiều tháng qua kể từ tháng Bảy ở LA, ở Hollywood, nghĩa là làm việc trên một TV thương hiệu mới chương trình gọi là Colony, người sáng tạo ra mà thực sự là một phèn Harvard mình. Và vì vậy chúng tôi rất vui mừng để xem này ra mắt trên mạng Mỹ vào tháng Một này. Vì vậy, chơ cho rằng, và cho Ramon hơn trong những tuần tới. Biết bây giờ mà cuối cùng là gần. Và điều này có nghĩa là có không tất cả những gì nhiều trái của CS50, buồn nói. Chúng tôi chỉ có ba vấn đề bộ left-- có Vấn đề đặt six-- mà là ở bàn tay của bạn ngay bây giờ hoặc sẽ sớm được, do sau này week-- là có nghĩa là để cầu thế giới của chúng ta về các dòng lệnh, trong đó chúng tôi đã dành hầu hết thời gian của chúng tôi sử dụng C, và thế giới của lập trình web. Vâng, bạn sẽ thấy rất nhiều ý tưởng mượn từ công việc dòng lệnh, nhưng cũng có rất nhiều mới và những ý tưởng thú vị đó cũng đang có được Gecman cho ứng dụng di động và công nghệ, nói chung, với đó bạn chàng trai đều quen thuộc ngày nay trên máy tính xách tay và điện thoại và muốn. Vì vậy, bạn sẽ thực hiện không một trang web, hoặc một trang web mỗi gia nhập, nhưng một máy chủ web thực sự. Bạn sẽ viết phần còn lại của một máy chủ web viết bằng C, mà mục đích trong cuộc sống là để nhận được các yêu cầu HTTP, những phong bì ảo, chúng tôi tiếp tục nói chuyện về, và thực sự đáp ứng hoặc với một số content-- tĩnh như một dấu chấm HTML tập tin, hoặc một dấu chấm hoặc JPEG bất kỳ số nào khác của các tập tin, hoặc thậm chí là một tập tin PHP theo đó web của bạn máy chủ sẽ giải thích rằng PHP mã và nhổ ra kết quả. Bây giờ, chúng tôi đã cung cấp cho bạn khá nhiều khung cho it-- thực sự Mã phân phối cho vấn đề thiết lập sáu là dài hơn 1.000 dòng, một rất nhiều trong số đó là cảm nhận, để được fair-- nhưng điều này thực sự có nghĩa là một cơ hội để có được bàn tay của bạn lặn bẩn vào một dự án khá lớn rằng chúng tôi đã rất cụ thể khắc ra mẩu cho bạn, để thực sự khi bạn thoát khỏi CS50 và nhập vào thế giới thực của lập trình và muốn đến lĩnh vực bất kỳ số lượng các dự án, bạn sẽ phải lớn hơn nhiều thoải mái tải một số nguồn mã, số mã nguồn mở dự án trên web, và lặn trong và làm thay đổi mà bạn thấy phù hợp. Vấn đề đặt bảy là có được về việc ứng dụng dựa trên web của riêng bạn mà có đầu vào và năng động sản lượng sản xuất động dưới dạng của một trang web etrade.com giống. Và vấn đề thiết lập tám sẽ tập trung vào chưa một ngôn ngữ được gọi là JavaScript. Trong khi đó, trận chung kết dự án là trên đường chân trời. Cái được gọi là tiền đề nghị là do một tuần kể từ hôm nay. Pre-proposal-- mỗi đặc điểm kỹ thuật, mà là trên website-- CS50 của là một cơ hội khá giản dị cho bạn gửi một email khá gọn gàng để giáo viên giảng dạy của bạn chỉ để thông báo cho nhóm anh mình về những gì bạn đang suy nghĩ, để sử dụng anh ta hoặc cô như một cái loa. Và có một sự tỉnh táo check-- cho dù bạn đang suy nghĩ về cắn off quá nhiều hoặc có thể quá ít, hoặc có thể bạn không có ý tưởng nào và muốn tham gia vào một cuộc trò chuyện. Sau đó là một đề nghị và báo cáo tình trạng, cái gọi là CS50 hackathon ở đây Cambridge cho Harvard và Yale sinh viên như nhau. Các dự án cuối cùng của thực hiện là sau đó do. Và sau đó một hội chợ CS50 ở đây, ở Cambridge, cũng như nhau ở New Haven. Vì vậy, đề xuất này, hãy xem các trang web cho những người cụ thể. Nhưng sôi nổi hơn, quá, là một cơ hội để có được bàn tay của bạn bẩn, và tâm trí của bạn mở một toàn bó của các chủ đề và các công cụ và kỹ thuật mà là phụ trợ để giáo trình cốt lõi của khóa học, nhưng dù sao cũng liên quan. Và cũng những nền tảng tuyệt vời để làm dự án cuối cùng thực sự mát mẻ mà vượt xa tài liệu chúng tôi đã được bảo hiểm chính thức trong vấn đề đặt ra hoặc trong bài giảng. Vì vậy, đi đến trang web của CS50 cho toàn bộ danh sách các hội thảo. Nếu bạn không đăng ký được nêu ra, đó là tốt. Đi trước và đăng ký vẫn còn và chúng tôi sẽ theo dõi với một liên kết trực tuyến trực tiếp, ngày và thời gian là trên các trang web. Và tất cả mọi thứ sẽ được ghi lại và đưa lên mạng nếu bạn không thể làm cho ngày cụ thể và thời gian. Như những gì nằm phía trước thereafter-- tốt, Tất nhiên, có những hackathon CS50. Bức ảnh này, thu hồi, từ tuần không lấy khoảng 4:00 một buổi tối trong những năm qua. Hội chợ CS50, mà một lần nữa sẽ diễn ra tại cả hai thành phố. Và sau đó, chỉ để trồng hạt giống, mặc dù chúng tôi vẫn có một tháng cộng lại của học kỳ, nếu bạn muốn tham gia giảng dạy riêng của CS50 nhân viên, và bạn muốn bắt đầu suy nghĩ về việc trở thành một CA, hoặc giảng dạy đồng, biết rằng chúng ta sẽ bắt đầu nói chuyện nhiều hơn về điều đó sau học kỳ này. Nhưng hình ở đây được hầu hết các đội bóng năm nay. Và như vậy, PHP-- và tôi đã rất buồn Tuần trước, [? Allyse?] Vui lòng đã đi vào nỗ lực của nhận chúng tôi những đạo cụ tuyệt vời mà tôi đã không kết thúc bằng cách sử dụng, vì vậy nó thực sự chỉ nhìn ngu ngốc rằng chúng tôi đã có một cái xẻng ngồi ở đây cả ngày thứ Tư tuần trước, và một ít thìa. Nhưng điều này là ẩn dụ của tôi cách cố gắng vẽ hình ảnh của chúng tôi lý do tại sao tôi đang chuyển từ C đến một ngôn ngữ như PHP. Và cũng có thể nói bất kỳ số languages-- Java, Python, Ruby hoặc chùm others-- nhưng trong khi ở C, ví dụ, viết một chương trình trong C thường có thể được như thế lấy một thìa như thế này và đào một lỗ trong mặt đất, trong cát hoặc bụi bẩn. PHP cho phép bạn mất nhiều cắn lớn ra khỏi vấn đề, viết ít mã bằng cách sử dụng một công cụ nhỏ hơn rất nhiều, vì có rất nhiều hơn nữa chức năng ghép trong. Bây giờ, nếu chúng ta thực sự ấn tượng, chúng tôi muốn có cái gì để xẻng ở đây, nhưng như vậy đi. Trong khi đó, người kia ẩn dụ, chúng tôi đã đưa ra là, tất nhiên, bạn có thể sử dụng giống như một cái cờ lê để búa trong một cái gì đó giống như móng tay. Nhưng tất nhiên, bên phải công cụ để sử dụng được đi là không quá nhiều ngôn ngữ được gọi C-- và bây giờ tôi chỉ bực mình [? Sanders,?] Có lẽ, chúng tôi sẽ khắc phục điều đó later-- vậy các công cụ thích hợp để sử dụng thường xuyên sẽ không được công cụ mức thấp nhất này. Và quả thực, C không phải là một ngôn ngữ nhất của bạn là bao giờ sẽ sử dụng, hay nhất thiết phải sử dụng một lần nữa. Và trên thực tế, một chút secret-- lần duy nhất Tôi sử dụng C bản thân mình là khá nhiều giữa Tháng Chín và tháng Mười Hai của mỗi mùa thu học kỳ. Và đó là bởi vì chúng tôi sử dụng nó như một cơ hội để dạy các nguyên tắc cơ bản lập trình, và cùng với nó máy tính nguyên tắc cơ bản về khoa học, dữ liệu cấu trúc, thuật toán và các like-- nhưng rất nhanh chóng sẽ bạn thấy bây giờ mà cú pháp và những ý tưởng cơ bản C rất tuyệt vời chuyển nhượng cho hiện đại hơn ngôn ngữ cấp cao hơn, như PHP và Python và Perl và Java và Objective-C-- thực sự, không quá nhiều Objective-C-- nhưng Swift, các phiên bản mới hơn ngôn ngữ mà nhiều bạn sẽ sau đó vọc với bạn dự án cuối cùng. Vì vậy, không có thêm ado, chúng ta hãy thực sự sử dụng PHP để giải quyết một số vấn đề. Nhớ lại rằng sớm, cuối cùng tuần, chúng tôi chỉ sử dụng CS50 IDE, chúng tôi đã viết một chương trình nhỏ dinky mà chỉ nói, "Xin chào thế giới." Và sau đó tôi đã lưu nó trong một tập tin gọi là hello.php. Và sau đó tôi chạy lệnh này. Và tại sao? Trong tiếng Anh, những gì đang xảy ra ở đây? Tôi đã làm gì khi Tôi chạy lệnh này? Yeah? Đung Có một số chức năng PHP mà đọc những gì in-- hiểu rằng. DAVID Malan: Tốt, có một số chức năng PHP-- và cho tôi được cụ thể hơn, có một chương trình gọi là PHP, a.k.a. Một thông dịch viên, mà hiểu các nội dung của hello.php, và diễn giải nó trên xuống phía dưới, từ trái sang phải, và làm những gì các lệnh nói. Các lệnh trong hello.php, tất nhiên, chỉ là nguồn code-- chức năng và các biến và các vòng lặp và như thế, mà chính chúng tôi đã bắt đầu viết trong PHP. Nhưng không giống như C, đó là một ngôn ngữ biên dịch, PHP bạn chỉ cần viết nó, và chạy nó. Bạn bỏ qua bước trung gian của chuyển đổi nó thành số không và những người thân, và sau đó chạy nó. Và do đó, một lộn ngược của việc này là gì? Tại sao chúng ta bỏ qua các bước? Tại sao ngôn ngữ hiện đại có xu hướng bỏ qua bước này? Lợi ích là gì? Hoặc chỉ cần trực giác? Ngay cả khi chúng tôi đã không viết nhiều PHP trước, những gì có lợi về không biên dịch mã của bạn để bạn nghĩ? Không có? Không phạm? Gãi đầu của bạn? Yeah. Đung More năng động. DAVID Malan: More năng động? Ý bạn là gì? Đung [Không nghe thấy] DAVID Malan: OK, tốt, vì vậy tùy thuộc vào đầu vào, bạn không cần phải biên dịch nó mỗi lần. Và nó thực sự là như đơn giản như những gì that-- là điểm của việc tiếp tục để biên dịch mã của bạn? Đây chỉ là một bước đó là making-- này được yêu cầu, cho một số quá khứ tuần, hai lần như nhiều bước như chỉ chạy chương trình của bạn. Nó rất hữu ích trong thấy rằng bạn xem các thông báo lỗi và vv, nhưng nó vẫn chỉ là một bước khó chịu. Và do đó, các lập trình viên nhận theo thời gian, tại sao chúng ta không bắt đầu viết các ngôn ngữ mà không làm cần có bước khá cơ khí, do đó chỉ có thể viết mã của bạn và chạy nó. Nhưng là những gì giá mà chúng ta đã thấy chúng tôi trả tiền cuối tuần, với một ví dụ cụ thể? Vâng? Speed. Vì thế [? ] phiên dịch? là những gì chậm hơn một chút, trong đó số không và những người đang có tốt đẹp và nhanh chóng cho một máy tính hiểu, bởi vì các Intel CPU, hoặc bất cứ điều gì nó là, chỉ hiểu những gì đang xảy ra trên với những người mẫu của các bit. Trong khi đó, một thông dịch viên là một chương trình thực sự có để đọc các nguồn Ascii mã mà bạn đã viết, và chuyển đổi nó, do đó, để nói chuyện, hoặc tìm hiểu làm thế nào nó chuyển đổi cuối cùng đến số không và những người thân. Vì vậy, nó chỉ mất một ít bit của một hiệu suất hit. Vì vậy, đó là một chút của một thương mại-off. Bây giờ nếu chúng ta làm điều này ở đây, cho tôi đi trước và làm một ví dụ như sau. Nếu tôi đi ở đây, tập tin mới, tôi sẽ để cứu này một lần nữa là hello.php. Và bây giờ tôi sẽ đi trước và nói, "in hello world" - và nhớ lại rằng tôi có thể sử dụng in, tôi không phải sử dụng in-F. Và bây giờ xuống đây, nếu tôi làm PHP của hello.php, huh-- tôi không có vẻ như đã giải thích nó. Tôi đã làm sai cái gì? Đung Các vòng đeo tay góc cạnh. DAVID Malan: Yeah, bạn cần mà góc khung lên hàng đầu. Vì vậy, nó là loại gây phiền nhiễu, nhưng bạn đã quen với nó một cách nhanh chóng. Nếu tôi phải viết mã PHP, tôi nói chung là cần phải cho các chương trình, hay nói với người phiên dịch, hey PHP, ở đây có một số mã PHP. Và sau đó cho các biện pháp tốt, tôi sẽ đóng cửa này không phải với điều này, nhưng thay với góc dấu chỉ câu hỏi khung, vì vậy mà bây giờ xuống đây, nếu tôi chạy này một lần nữa, bây giờ Tôi nhận được kết quả mong muốn. Bây giờ chúng ta hãy làm một tối ưu hóa nhẹ, chỉ như vậy mà bạn đã nhìn thấy nó trước. Đây là loại gây phiền nhiễu mà tôi phải chạy PHP gian hello.php, bởi vì trong quá khứ tôi chỉ có thể viết dot slash Tên chương trình, đó là loại tốt đẹp. Đó là loại một kinh nghiệm người dùng tốt hơn. Vì vậy, nó quay ra bạn có thể làm điều này trong PHP với tôi following-- có thể sử dụng điều này khá khó hiểu câu thần chú ở trên đây, mà thường được gọi là một công việc, theo đó đây là một biểu tượng sắc nét, có thể nói, đây là một tiếng nổ hoặc một dấu chấm than. Và điều này bây giờ là con đường dẫn tới một chương trình trên một hệ thống Linux điển hình được gọi là môi trường, hoặc env. Và điều này line-- câu chuyện dài dòng một short-- chỉ nói, hey máy tính, tìm PHP thông dịch viên cho tôi trong môi trường, tìm thấy nó trong bộ nhớ của bạn, do đó, để nói chuyện. Và những gì là tốt đẹp hiện nay, được rằng nếu tôi đi xuống đây, Tôi có thể làm chấm slash xin chào dot php, or-- hmm. Cho phép từ chối. Vâng, bạn sẽ thấy nhiều hơn về điều này với vấn đề thiết lập bảy, nếu bạn chưa có, với các điều khoản. Nó chỉ ra rằng tôi cần để thực hiện lệnh này gọi [? chamod?] cho sự thay đổi mode-- một cộng x hello.php. Tôi cần [không nghe được] này thêm bước mà là nói cho máy tính của tôi, làm hello.php thực thi. Và bây giờ xem những gì happens-- dot giảm hello.php, nó chỉ chạy. Tôi không cần phải xác định các thông dịch viên nữa. Và tôi có thể làm cho nó thậm chí còn đẹp hơn, vẫn còn, nếu tôi đổi tên điều này. Nếu tôi chuyển hello.php chỉ Hello-- để thông báo trong góc trên bên trái, Tên của chương trình là thực sự bây giờ chỉ cần Hello. Bây giờ tôi có thể làm cho nó trông giống như một chương trình C, mặc dù nó được viết bằng PHP-- hoặc thẳng thắn bất kỳ số các ngôn ngữ khác. Vì vậy, tăng cường biên, không có khác biệt chức năng. Nhưng nó chỉ là một chút tò mò bây giờ, do đó bạn có thể viết chương trình trong bất kỳ ngôn ngữ, và người dùng không phải biết hoặc quan tâm những gì người đang có. Vâng, chúng ta hãy nhìn vào một hơn ví dụ hấp dẫn doanh nghiệp mà tôi đánh lên trước. Và điều này được gọi là quote.php. Và nó có sẵn trực tuyến. Và nhận thấy rằng nó khá short-- nhưng đó là một chương trình dòng lệnh đó là sẽ xem xét giá cổ phiếu đối với tôi, đó là thực sự đi được Gecman cho vấn đề thiết lập bảy. Vì vậy, chúng ta hãy xem những gì tôi đang làm. Ở phía trên tôi đã có mở khung dấu hỏi PHP. Sau đó, tôi đã có dòng này, nhờ đó mà tôi đòi hỏi phải có một tập tin gọi là functions.php-- chúng ta sẽ thấy thêm về điều này trong một chút, nhưng điều này cũng giống như C của Phiên bản sắc bao gồm, bạn muốn đi đâu bao gồm các tập tin khác. PHP gọi nó đòi hỏi, mặc dù nó cũng có một bao gồm các chức năng. Và nó chỉ ra rằng function.php là chỉ một cái gì đó tôi đã viết trước khi đến lớp. Tôi đặt nó trong cùng một thư mục, bởi vì Tôi muốn yếu tố ra một số mã rằng chúng ta có thể muốn sử dụng ở những nơi khác. Trong khi đó, bạn có thể có lẽ suy ra điều gì đang xảy ra ở đây. Đây là một chút khác nhau từ C-- nhưng những gì tôi có nghĩa là đảm bảo sử dụng đúng đắn? Dịch này về mặt kỹ thuật. Trong hoàn cảnh nào tôi bỏ chương trình, hoặc xuất cảnh? Yeah? Đung Khi bạn không có hai đối số dòng lệnh. DAVID Malan: Khi tôi không có để chỉ huy đối số dòng. Và hãy nhớ rằng một trong những đối số là tên của chương trình chính nó. Và thứ hai là có được từ khác tôi gõ sau dấu nhắc. Vì vậy, giống như C, điều này là cách của tôi trong việc kiểm tra, đã hợp tác và người sử dụng chạy chương trình như tôi dự định? Bây giờ, có một cái gì đó một chút khác nhau với C-- đầu tiên của tất cả chúng ta có ký hiệu đô la này, và những gì một đồng đô la ký biểu thị trong PHP? Chỉ cần một biến. Đó là all-- chỉ là một biến tiếp theo bất cứ điều gì bạn muốn thực sự gọi nó. Chú có cái gì đó thiếu từ chương trình PHP của tôi, giống như nó đã mất tích cuối cùng tuần, so với C, đó là những gì? Một loại, nhưng cũng có cái gì khác. Không có một cái gì đó function-- chức năng chính. Không có chức năng chính. Bạn chỉ cần bắt đầu viết code của bạn mà không cần phải lo lắng về một cách khá tùy tiện ước đặt tên một số mặc định Chức năng chính. Vì vậy, arg C là chỉ thực sự một biến toàn cầu rằng các thông dịch viên làm cho có sẵn cho tôi. Bây giờ, đây là thú vị. Vì vậy, nhìn lên công cụ. Chứng khoán ký hiệu đô la là trên trái, đó là biến của tôi. Ở phía bên tay phải, có rõ ràng một hàm trong PHP gọi là tra cứu Tôi đang đi qua dòng lệnh cuối cùng của tôi lập luận đối với: bất cứ điều gì từ đó. Và chúng ta sẽ thấy cách này làm việc trong một thời điểm. Và rồi cuối cùng tôi báo cáo giá. Tôi in ra một phần như vậy và như vậy. Và hãy nhớ, đây là cách PHP-- một cách PHP-- nơi mà bạn không phải làm dấu $ S nữa. Bạn chỉ có thể sử dụng dấu ngoặc nhọn và cắm trong một số biến. Bạn không cần phải lo lắng về sử dụng printf trong cùng một cách. Và như một sang một bên, khi bạn đặt một biến bên trong dấu ngoặc kép như thế này, bạn đang sử dụng một kỹ thuật ưa thích gọi là suy biến. Nó chỉ có nghĩa là cắm biến ở đây. Và như một sang một bên, một số bạn của những người đi từ nền lập trình khác, bạn có thể không sử dụng dấu ngoặc đơn xung quanh dây để làm điều này. Bạn phải sử dụng dấu ngoặc kép cho suy biến để làm việc. Nếu không, bạn sẽ thấy nghĩa đen nhìn thấy những dấu ngoặc nhọn. Vì vậy, cuối cùng, chúng ta hãy đi trước và chạy này. Hãy để tôi làm cho thiết bị đầu cuối của tôi lớn hơn một chút. Hãy để tôi đi trước và chạy bên trong thư mục báo giá của tôi. [? CDsource?] [? AM?] [? quote?] PHP quote dot PHP, và tôi đang đi để tìm kiếm một cái gì đó như GOOG, mà là biểu tượng ticker của nó, và một phần của tên mới của nó, Alphabet Inc, giá $ 717, cho đến hôm nay. Được rồi, nếu chúng ta muốn chạy này một lần nữa, bất cứ ai có một ticker chứng khoán họ muốn tìm kiếm? Microsoft Tôi nghĩ là này, MSFT-- $ 53. Tôi nghĩ có lẽ đó là Yahoo. Và Facebook là. Vì vậy, chương trình này đang làm là gì? Sự kỳ diệu dường như được nhúng trong đó chức năng tra cứu. Vì vậy, chúng ta hãy có một cái nhìn nhanh chóng. Nó chỉ ra rằng không đến với PHP, đó là trong functions.php. Và chúng ta sẽ không đi qua này rất chi tiết, nhưng thông báo từ phẫu ở đây được mà trên dòng sáu của functions.php-- Tôi nghĩa rằng chức năng. Tôi chỉ định tên của chức năng của tôi. Sau đó tôi chỉ định bất kỳ đối số, hoặc các thông số, Tôi muốn chức năng đó để take-- không có các loại. Và sau đó tôi thực hiện nó. Và tôi sẽ vẫy tay vào thực hiện, vì nó khá cao ngay bây giờ, nhưng chúng ta sẽ nhìn thấy nó một lần nữa thực sự trong một tuần trong vấn đề thiết lập bảy. Nhưng tôi có thể làm sạch này lên, quá. Tôi cũng bao gồm trong hôm nay mã nguồn một phiên bản các trích dẫn, không có tập tin dot PHP. Bởi vì những gì là lẽ tại đầu của chương trình được gọi là chỉ trích? Rằng cái gọi là các shebang-- bùa khá khó hiểu mà nói tìm PHP và sau đó chạy nó trên mã của tôi ở đây. Tất cả các quyền, do đó sẽ đem lại chúng tôi đến nơi, chúng tôi rời đi time-- cuối cùng dù với một số ví dụ nâng cao hơn. Bất kỳ câu hỏi như vậy, cho đến nay về PHP hoặc những gì chúng tôi đang làm? No-- tất cả các quyền. Yeah? Đung Bên trong File HTML, làm you-- [? làm bạn?] [? chỉ cần gọi nó?] a [Không nghe thấy] PHP tập tin? DAVID Malan: Câu hỏi rất hay. Trong một bối cảnh web, trong đó chúng tôi nghĩa là sắp chuyển đến, bạn không sử dụng cái gọi là công việc ở phía trên, vì server-- web thường là một chương trình gọi là Apache hoặc Microsoft IIS, Internet Information Server, hoặc bất kỳ số lượng các phần mềm máy chủ web khác, biết rằng khi nó thấy một tập tin dot PHP, mà nó nên chạy các thông dịch viên trên đó. Nó không nhìn vào dòng đầu tiên. Vì vậy, dòng trick đầu tiên này chỉ là khi bạn đang viết dòng lệnh programs-- mà chúng tôi sẽ không làm điều siêu thường, nhưng nó là cách chúng tôi làm cầu nối C ví dụ của chúng tôi cho đến nay chúng tôi PHP. Vì vậy, hãy thực sự là cầu nối thế giới này từ dòng lệnh để thế giới web bằng cách làm như sau. Hãy để tôi đi trước và vẽ trên đây chỉ là một khoảnh khắc. Vì vậy, nếu chúng ta có một máy chủ web, hay đúng hơn nếu chúng ta có máy tính xách tay của tôi trên đây, mà tôi sẽ vẽ như thế này. Và ở đây chúng tôi có internet trong một số hình thức. Và sau đó ở đây, chúng tôi có một máy chủ trong một building-- đây là cách mà Internet works-- và ở đây là một máy chủ với một số đèn có thể. Thực sự là những gì xảy ra giữa hai kết nối này? Vì vậy, trong tòa nhà này là một máy chủ web. Đó chỉ là một máy tính đó là chạy một số hoạt động system-- có lẽ các phần mềm miễn phí được gọi là Apache, mà CS50 IDE đang chạy. Vì vậy, bạn có thể thực sự nghĩ của tòa nhà này như đang được xây dựng ở mà CSt0 IDE được lưu trữ. Đó là nơi mà tất cả các bạn có tài khoản, nơi mà tất cả các bạn có máy chủ web của riêng bạn chạy, tất cả các bạn có các URL độc đáo của riêng bạn, khi chúng tôi bắt đầu để thảo luận, và bạn sẽ thấy nhiều hơn ở P. đặt sáu. Đây là máy tính xách tay của tôi ở đâu đó khác trên internet. Và như vậy khi tôi truy cập một URL mà thuộc với tôi, rằng lưu lượng truy cập internet sẽ trên máy chủ, máy chủ của nhận được một HTTP request-- như một nhận index.html và nó trả lời rằng trang web. Vì vậy, đó là mô hình chung. Trong khi tất cả mọi thứ lên cho đến bây giờ ngày hôm nay, tất cả mọi thứ chỉ xảy ra trong hạn chế của tòa nhà này. Tôi đã sử dụng máy tính xách tay của tôi, nhưng Tôi đã được kết nối với CS50 IDE, vì vậy tất cả những chương trình tôi đã chạy đã được bên trong của máy chủ, chính nó. Nhưng bây giờ, chúng ta hãy bắt đầu việc tái sử dụng PHP để viết một số chương trình thực tế mà được phục vụ bởi một máy chủ web. Và để làm được điều này, tôi sẽ đi thành một bó toàn bộ các ví dụ mà giới thiệu ý tưởng này ở đây. Vì vậy, đây là loại một cách ưa thích của mô tả một mô hình lập trình. Và trên thực tế, khi bạn thoát khỏi CS50 hoặc làm việc trên các dự án cuối cùng, hoặc có một số theo trên lớp, bạn sẽ bắt đầu để thấy rằng world-- đặc biệt là đã trưởng thành với các ngôn ngữ như C đó là level-- siêu thấp nhận ra rằng có tốt hơn cách viết phần mềm. Có một số mẫu mà bạn có thể làm theo, những cách nhất định của tổ chức các file của bạn và cách đặt tên chức năng của bạn, vì vậy mà câu chuyện dài ngắn, thế giới đã đưa ra với một bó toàn bộ các từ viết tắt và tên cho cách lập trình. Đây chỉ là kỹ thuật mà bạn có thể sử dụng. Và một trong số họ được gọi là MVC, cho Model View Controller. Và đây chỉ là, đối với Hiện tại, một quá phức tạp cách nói như thế nào, bạn nên đặt ra một trang web dựa trên PHP, trong trường hợp của chúng tôi. Làm thế nào để bạn tổ chức các tập tin của bạn, làm thế nào để bạn tổ chức logic của bạn, trong một cách mà làm cho nó dễ dàng hơn để viết các trang web phức tạp hơn? Và quả thực, chúng tôi sẽ nhanh chóng nhận được ở đó với p-thiết lập bảy. Vì vậy, trong thế giới của MVC, bạn đang đi để thấy rằng mã của chúng tôi có thể nói chung được mô tả như là một trong hai mã mô hình, hoặc mã điều khiển, hoặc mã xem. Và tôi sẽ oversimplify nó như follows-- bộ điều khiển là não của chương trình của bạn, đó là nơi mà tất cả các Logic thú vị xảy ra. Vì vậy, tất cả mọi thứ chúng tôi đã viết vậy, đến nay trong lớp, là loại giống như bộ điều khiển code-- nó kiểm soát chương trình của bạn, vòng lặp của bạn, của bạn điều kiện, chức năng của bạn và các biến và tất cả điều đó. Views, bây giờ, đang có được một chút rõ ràng hơn trong thế giới của web. Một quan điểm là thẩm mỹ của trang web của bạn. Đó là những gì người dùng sees-- các hình ảnh, các bảng HTML, các thẻ HTML, và tất cả trong đó, tất cả các thẩm mỹ fluffy những thứ đó không phải là khó để viết, nhưng chỉ là những gì bạn đang tạo ra, là quan điểm được gọi là, tính thẩm mỹ. Và mô hình, cuối cùng, sẽ là cơ sở dữ liệu mà stuff-- chúng tôi sẽ bắt đầu lặn vào tất cả càng có nhiều thứ Tư này. Vì vậy, điều khiển là logic, view là những thứ thẩm mỹ, và mô hình sẽ là nơi chúng tôi lưu trữ dữ liệu thực tế của chúng tôi. Vì vậy, chúng ta hãy nhìn vào điều này cụ thể hơn với các ví dụ sau đây. Tôi sẽ đi vào thư mục của tôi ở đây các nguồn hiện nay code-- tất cả trong số đó là có sẵn trực tuyến. Và tôi sẽ đi vào phiên bản zero. Và đây is-- chúng ta hãy gọi nó là phiên bản không của website CS50 của. Không có nhiều ở đây cả. Đó là một trang web rất đơn giản đó là có thể sử dụng những gì HTML tags-- chỉ đoán từ các ví dụ trong quá khứ? Cái gì thế? H1-- lẽ cho rằng lớn, in đậm tiêu đề, biểu tượng đó lên hàng đầu, CS50. Và những gì khác là lúc chơi? Yeah? Đung danh sách không có thứ tự. DAVID Malan: list-- Unordered nên Tag UL và có thể một vài thẻ LI. Và nếu bạn không nhớ những, nó thật không quan trọng. Đây là những bông loại chi tiết thi hành HTML bạn nhanh chóng tìm kiếm và bạn đang trở lại trên con đường của bạn. Chúng tôi sẽ tập trung hơn vào các chương trình ý kiến ​​cho rằng các mảnh juicier. Vì vậy, chúng ta hãy chỉ mất một cách nhanh chóng nhìn vào HTML-- và thực sự nếu tôi mở ra xem mã nguồn ở đây, yup, đó là chính xác những gì đang xảy ra ở đây. Có một thẻ UL. Lồng vào bên trong của nó là tạo tags LI. Và sau đó tôi mượn URL của giáo trình thực tế ở đây. Và sau đó trong lectures.php là rõ ràng một trang khác tạo động đó là sẽ có, hãy see-- ah, Trong hai tuần đầu tiên của bài giảng. Vì vậy, tuần không và tuần thứ nhất, chúng ta hãy nhìn vào this-- nếu tôi xem mã nguồn trang web, cũng siêu đơn giản. Đây là những dẫn đến hai trang gọi week0.php, và week1.php. Vì vậy, xem xét bây giờ những gì đang xảy ra. Khi tôi bấm vào week0.php, máy tính xách tay của tôi được thực hiện một yêu cầu cho week0.php. Các máy chủ web, a.k.a., CS50 IDE, đang nhận rằng phong bì ảo. Nó nhìn thấy một tin nhắn như thế nào, có được week0.php. Sau đó nó được giải thích các tập tin, đầu xuống dưới, từ trái sang right-- file gọi week0.php-- và phun ra các kết quả. Vì vậy, bên trong của tập tin này, week0.php, phải logic điều khiển được tạo ra HTML này, và chúng tôi sẽ sớm thấy rằng. Nhưng bây giờ, hãy để tôi bấm vào tuần zero, và bây giờ chúng tôi có thứ Tư và thứ Sáu, và bây giờ chúng tôi có các slide dần dần từ tuần zero. Và bạn có thể gọi lại này từ cách trở lại khi nào. Vì vậy, đó là tất cả trang web này đang làm. Vì vậy, hãy xem xét làm thế nào nó làm điều này. Tôi sẽ quay trở lại vào mã nguồn ở đây, trong CS50 IDE, và tôi sẽ mở index.php. Ở phía trên cùng của tập tin này là một loạt các ý kiến. Và sau đó ở giữa của tập tin này, nó Hóa ra, không có mã PHP nào. Bởi vì nếu bạn không có bất kỳ mở khung tags dấu hỏi PHP, bạn đang tự do chỉ cần đặt HTML. Bởi vì những gì các PHP thông dịch viên là phải làm, là khi nó đọc file-- này trên xuống dưới, từ trái sang right-- nó chỉ diễn giải mã nó thấy giữa những dấu ngoặc góc đặt câu hỏi mark. Và bất cứ điều gì khác mà nó không nhận như PHP, nó chỉ phun ra. Và HTML là một trong những công cụ nó sẽ chỉ nhổ ra. Vì vậy, tập tin này có thể có được gọi là index.html, nhưng tôi đặt tên tất cả mọi thứ dot PHP như là một bước đệm. Lectures.php-- tương tự tượng, nó chỉ là một số HTML. Week0.php, tương tự như chỉ số HTML. Nhưng bây giờ chúng ta hãy đặt trên hat kỹ thuật phương ngôn, và xem xét làm thế nào chúng ta có thể cải thiện điều này. Nó không khó để làm điều này, nhưng tôi loại của thoái hóa thành sao chép và dán. Và trên thực tế, nếu tôi làm cho tuần thứ hai, bạn biết những gì tôi đang có lẽ sẽ làm gì? Tôi sẽ đi đến week1.php, tôi sẽ làm nổi bật tất cả mọi thứ. Tôi sẽ sao chép nó, dán nó vào một tập tin mới gọi week2.php, tinh chỉnh một số URL, và được trên con đường của tôi. Vì vậy, dựa vào những gì chúng tôi đã nhìn thấy trong C đã có, này không cảm thấy đúng, hy vọng. Sao chép, dán hiếm khi các giải pháp đúng. Vì vậy, những gì chúng ta có thể bắt đầu phải làm gì để cải thiện điều này? Đâu là những cơ hội cho thiết kế tốt hơn? Bởi thời gian tôi nhận được để tuần tám, nó sẽ để được thực sự gây phiền nhiễu nếu tôi muốn thay đổi font chữ của mỗi người trang của tôi, hoặc nếu tôi muốn thay đổi cấu trúc của bố trí. Vì vậy, nơi là cơ hội cho thiết kế tốt hơn? Vâng, chúng ta hãy xem xét những gì chia sẻ trên tất cả các file. Đây là tuần thứ nhất, đây là tuần bằng không, đây là lectures.php, đây là index.php-- gì là như nhau và những gì là khác nhau, khoảng nói, trong mỗi của các tập tin? Yeah? Đung [Không nghe thấy] DAVID Malan: OK, tốt. Vì vậy, có một mô hình, chắc chắn, nhờ đó mà mỗi khi tôi chọn bài giảng tôi, Tôi nên tạo ra một rất giống trang tìm kiếm. Và như vậy có lẽ tôi có thể tận dụng thực tế là thực sự, chúng tôi cố tình bằng số lập chỉ mục của chúng tôi lectures-- nếu tôi có thể đặt nhiều hơn từ trong câu trả lời của bạn. Và điều duy nhất là những gì, thực sự, đó đang thay đổi giữa tuần one-- và cho tôi di chuyển xuống để nó gần ở place-- cùng do đó, đây là tuần không, khoảng ở đầu trang. Dưới đây là một tuần, tuần bằng không, một tuần, tuần không. OK, nghĩa là nếu bạn biết không có chương trình nào, đây là bây giờ giống như một mô hình kết hợp trò chơi. Vì vậy, những gì khác nhau? Yeah? Đung [Không nghe thấy] DAVID Malan: Tốt, vì vậy tiêu đề đang thay đổi, bao giờ nên hơi. Zero là đi, tất nhiên, để một. Điều tương tự cũng đang xảy ra trong thẻ H1. Và chúng tôi hoàn toàn không nhìn thấy nó như là một cách dễ dàng, vì các URL là một ít lâu. Nhưng các URL đang thay đổi một chút. Nhưng những gì không thay đổi là, tôi dám nói, hầu hết các nội dung của page-- các tag HTML là cùng, người đứng đầu là cùng, tiêu đề là gần như giống nhau, cơ thể là như nhau, và hầu như tất cả mọi thứ khác là như nhau ngoại trừ những tinh chỉnh nhỏ. Vậy làm thế nào chúng ta có thể đi về bao thanh toán một số điều này ra? Vâng cho tôi đề xuất một cách chính xác mà trong các phiên bản tiếp theo. Vì vậy, ở đây trong phiên bản một, tôi có chính xác cùng một tập tin, cộng với một vài người khác. Dưới đây là index.php-- và thậm chí nếu bạn đã bao giờ nhìn thấy PHP trước, những gì tôi có thể làm gì để giải quyết điều này problem-- dựa trên những gì bạn thấy ở đây? Vâng, đó là một cam nhẹ? Không có? Có, đi vào. Đung [Không nghe thấy] DAVID Malan: Yep. Đung [Không nghe thấy] DAVID Malan: Tôi cần bạn nói chỉ to hơn một chút. Đung [Không nghe thấy] DAVID Malan: OK, tốt. Và tôi think-- nó là khó nghe you-- nhưng tôi nghĩ rằng những gì bạn đang nhận được lúc là các thẻ đó đã được phổ biến lên hàng đầu, và các thẻ đó đã được phổ biến trên phía dưới, hiện nay đã được yếu tố ra ngoài, hoặc xuống hạng với những tập tin? Header.php và footer.php-- và chúng ta sẽ thực hiện một số điều chỉnh cho giải quyết các mối quan tâm bạn chỉ nêu lên về số thay đổi, cho Ví dụ, nếu tôi nghe bạn một cách chính xác. Nhưng điều đó có vẻ là ý chính của nó. Nếu có một số tiền khổng lồ dư thừa ở đầu trang, và một số tiền rất lớn của dự phòng ở phía dưới, chúng ta hãy theo nghĩa đen chỉ nổi bật và cắt giảm nội dung mà ra, đặt nó trong một file-- riêng biệt giống như ý tưởng của CSS, mà chúng ta yếu tố ra thẩm mỹ rất giống nhau, đặt nó trong một tập tin PHP chấm riêng biệt, sử dụng các yêu cầu mà mechanism-- giống như C include-- sắc nét mà về cơ bản là giống như nói đi lấy nội dung của header.php, và sao chép và dán chúng ở đây. Nhưng điều này có nghĩa là bây giờ trong là index.php, tôi có hai dòng. Trong lectures.php, tôi cũng có hai dòng. Trong week0.php, tôi cũng có hai dòng. Vì vậy, bây giờ, nếu tôi muốn thay đổi tiêu đề của tất cả các trang của tôi, hoặc tôi muốn thay đổi cấu trúc cơ bản, Tôi có thể thay đổi nó bây giờ chỉ trong một nơi, hoặc hai places-- header và footer, tương ứng. Bây giờ bắt đầu của mã để tìm một chút bí ẩn hơn, phải không? Nhưng nếu bạn nghĩ về những gì trang được doing-- nếu tôi yêu cầu week0.php, giống như trên các bản vẽ trên here-- khi week0.php được yêu cầu, điều đó có nghĩa là gì? Theo nghĩa đen, tập tin này là trình duyệt yêu cầu. A.k.a. web server-- CS50 ID-- grabs này file, week0.php, và lần đọc nó trên xuống dưới, từ trái sang phải. Trên một dòng, nó ngay lập tức gặp mở khung dấu hỏi PHP, yêu cầu tiêu đề dot PHP, và như vậy những gì các thông dịch viên PHP does-- đó là xây dựng vào web máy chủ, bởi vì chúng tôi cấu hình sẵn nó cho you-- nó sẽ tự động chuyển vào header.php, bản sao nội dung, dán chúng ở đây. Nhưng sau đó các cuộc gặp gỡ thông dịch viên dấu hỏi dấu đóng ngoặc, do đó, nó làm tất cả suy nghĩ. Bây giờ nó chỉ mù quáng spits ra đường hai đến bảy, bởi vì nó chỉ là mã HTML. Được xếp hàng tám, và làm thế cùng kỳ diệu again-- mở tập tin, grabbing các nội dung, và yêu cầu họ hoặc dán chúng ngay sau đó hoặc có. Nhưng tôi chỉ ám chỉ một lỗi. Đây là một bước tiến từng phần lạc hậu, bởi vì nếu chúng ta nhìn vào header.php, Tôi đã loại cắt một góc. Tính năng đã làm những gì tôi bỏ để để đạt được thiết kế này tốt hơn đáng tranh cãi? Yeah? Đung [Không nghe thấy] DAVID Malan: Yeah, tôi loại của cắt một góc không tầm thường. Bạn đã chỉ ra rằng những gì đã được thay đổi là tiêu đề, số lượng trong tiêu đề, và số lượng trong H1. Vì vậy, giải pháp của tôi là, OK, chúng ta chỉ cần đổi tên trang, và không phải đối phó với điều đó vấn đề gì. Vì vậy, đó là một phần bước lùi cho chắc chắn. Nhưng điều đáng chú ý ở đây được rằng những gì tôi đã làm nếu không được yếu tố ra tất cả các công cụ phổ biến. Và trong footer.php, nhận thấy tôi yếu tố ra tất cả điều đó, mặc dù ít hơn, công cụ phổ biến. Vì vậy, tôi cần phải bằng cách nào đó bây giờ có thể mất một bước về phía trước, và sửa chữa mà vấn đề tiêu đề. Vì vậy, hãy làm điều đó. Hãy để tôi đi vào phiên bản thứ hai của tôi ở đây, trong đó, một lần nữa, có các tập tin cùng ngoại trừ một bổ sung mới. Và nó là nhiều hơn một chút dài dòng, nhưng chúng ta hãy xem chúng tôi có thể trêu chọc nhau những gì đang xảy ra ở đây. Vì vậy, thay vì yêu cầu header.php và footer.php, Tôi dường như chỉ cần một file-- gọi là, tất nhiên, helpers.php. Và hãy để tôi định bây giờ, những gì bên trong của helpers.php chỉ là một loạt các chức năng mà tôi đã viết, giống như trước đây. Nhưng tôi gọi nó là helpers.php. Bây giờ rõ ràng, trong dòng ba và 10, tôi gọi hai functions-- làm tiêu đề, làm cho chân. Những không đi kèm với PHP, tôi đã viết những bản thân mình. Và tôi đặt chúng trong helpers.php. Bây giờ, chúng tôi đã chỉ nhìn thấy cú pháp này một lần, và nó đã được siêu ngắn. Nhưng điều này dường như là một đối số để làm tiêu đề, các chức năng. Tại sao tôi biết được? Vâng đây là một dấu ngoặc đóng, đây là một dấu ngoặc mở. Và tất nhiên, cũng giống như trong C, bất cứ điều gì giữa những dấu ngoặc đơn là một input-- hoặc một đối số cho hàm. Kiểu dữ liệu của tham số này là gì, dựa trên những gì tôi đã nêu bật? Làm gì những dấu ngoặc vuông chỉ ra, dựa vào tuần trước? Vâng, đó là một array-- cụ thể là một mảng kết hợp. Và cú pháp này thừa nhận là một chút funky, nhưng điều này chỉ là đi qua trong một cặp giá trị quan trọng. Điều quan trọng là, báo unquote tiêu đề, và giá trị là CS50. Nếu chúng tôi đã làm điều này trong C, nó có thể thay trông như thế này, chỉ quote unquote CS50-- hoặc thực sự nó sẽ xoăn niềng răng, hoặc một cái gì đó như thế trong C, mà chính là số không, và giá trị là CS50. Nhưng một lần nữa, trong PHP, mặc dù Cú pháp là, một lần nữa, một chút lạ, nó cho phép bạn vượt qua trong từ thay vì số để kết hợp các phím với các giá trị. Vì vậy, điều này có nghĩa là tất cả? Nếu tôi đi vào helpers.php, chúng ta hãy xem xét chức năng này. renderHeader.php, thay renderHeader là chức năng của tôi, và tôi biết điều đó vì tôi thấy các chức năng từ khóa ở đây. Đây là mới từ C-- nó rõ ràng có một đối số gọi data-- nhưng tôi có thể gọi này bất cứ điều gì, nhưng tôi gọi nó là dữ liệu, chỉ có một chút clean-- và chỉ mất một đoán, đặc biệt nếu bạn đã lập trình một số khác ngôn ngữ cấp cao hơn trước, một cái gì đó trên C, khái niệm. Mở khung bằng gì khung vuông có nghĩa là gì? Hoặc những gì nó có thể có nghĩa là? Chúng tôi đã không nhìn thấy điều này trong C. Yeah? Một mảng trống rỗng. Cụ thể, điều này có nghĩa rằng nếu người sử dụng không gọi renderHeader với một đối số, tôi vẫn đi để có một đối số được gọi là dữ liệu, nhưng giá trị mặc định của nó là sẽ là một mảng trống rỗng. Vì vậy, nó chỉ là một tiện nghi tốt đẹp. Tôi không cần phải hét lên với người sử dụng, hay nói rằng bạn sử dụng chức năng của tôi sai. Tôi chỉ có thể cung cấp cho người dùng một sự mặc định giá trị, nếu tôi không đặc biệt quan tâm. Bây giờ chức năng này, tôi sẽ vẫy tay của tôi tại. Nhưng chức năng chiết xuất này cho phép chúng ta vượt qua những biến trong dữ liệu vào header.php trong các cách sau đây. Và đây là phần cuối cùng, Tôi nghĩ rằng, trong cú pháp funky. Dưới đây là phiên bản mới của tôi header.php-- của nó được sử dụng để nói, theo nghĩa đen, mở khung tiêu đề CS50, và đó là nó. Và điều tương tự cho các H1. Bây giờ nó dường như nói một cái gì đó khá sôi nổi. Và hãy để tôi đơn giản hóa này cho một thời điểm như sau. Đây là những gì tôi đã thay đổi tiêu đề của tôi được. Tuy nhiên, nó nhận được một chút xấu xí để liên tục mở ngoặc với PHP, và sau đó sử dụng các chức năng in. Nó chỉ ra rằng PHP có một cách viết tắt ký hiệu cho điều này, mà chỉ là một dấu bằng, mà là một kỹ thuật chức năng gọi là vang vọng thay vì in ấn, nhưng nó là điều tương tự, có hiệu quả. Điều đó chỉ có vẻ tốt hơn. Nó chỉ là một cú pháp đường, nếu bạn muốn, mà làm cho mã của tôi tốt hơn một chút. Nhưng hóa ra, và chúng ta sẽ thấy điều này một lần nữa Không lâu sau, chúng tôi phải gọi này annoyingly hàm dài gọi là HTML ký tự đặc biệt trong PHP, vì thực ra có đầu vào nhất định mà người sử dụng có thể cung cấp cho chúng tôi, hoặc người dùng có thể cung cấp cho chúng tôi, rằng sẽ phá vỡ trang web của chúng tôi. Nhưng chúng ta sẽ thấy rằng bên cạnh tuần với JavaScript. Nhưng bây giờ, chỉ biết rằng tập tin này, headers.php, đơn giản mất danh hiệu mà Tôi đã có, nó làm cho chắc chắn là an toàn khi được tiêm vào một web trang, và nó nhổ nó ra như là tiêu đề của tôi và như H1 của tôi. Vì vậy, nếu tôi đi vào phiên bản này ngay bây giờ, nhận thấy rằng các bài giảng có tiêu đề của nó trở lại, tuần không có tiêu đề của nó lại, và thực sự, HTML tôi là tạo giống hệt với những phiên bản đầu tiên của tôi was-- trừ khoảng trắng của tôi, bởi vì tôi đã bắt đầu định dạng mã của tôi hơi khác một chút. Nhưng tôi đã tạo ra tất cả mã tôi quan tâm. Vì vậy, hãy để tôi dừng lại chỉ một lúc và thấy nếu có bất kỳ câu hỏi hoặc nhầm lẫn tôi đã tạo ra. Được rồi, vậy chúng ta hãy xoay một chút khó khăn hơn ở đây để xem nếu có một cơ hội để cải thiện. Helpers.php cũng đã có điều này chức năng, được gọi là renderFooter. Và những gì đáng chú ý về renderHeader, và renderFooter? Và một lần nữa, vì mục đích của ngày hôm nay, biết rằng các chức năng giải nén chỉ là cách của tôi đối số qua vào header.php và footer.php. Lấy làm tiếc? Đung [Không nghe thấy] DAVID Malan: Yeah, tôi chỉ thay đổi các yêu cầu dòng. Vì vậy, theo nghĩa đen, tôi đã phạm phải lỗi sao chép và dán, nhưng một lần nữa. Nó không phải là một con số khổng lồ dòng, nhưng đến on-- nếu tôi là sao chép và dán tất cả mọi thứ chỉ thay đổi một số từ ít, và một từ nhỏ mà Alan chỉ ra là chân trang ở đây, so với tiêu đề ở đây. Nếu không, tất cả mọi thứ là giống hệt nhau, ngoại trừ, tất nhiên, tên của hàm. Vì vậy, những gì chúng ta có thể làm tốt hơn? Vâng cho tôi mở lên phiên bản này ở đây, theo đó trong helpers.php, tại sao tôi không chỉ có được một ít thông minh hơn về điều này? Viết hơi phức tạp hơn code, nhưng gọi nó render? Vì vậy, những gì tôi có thay đổi cơ bản? Nó có một đối now-- hai đối số, dữ liệu vẫn còn. Và sau đó những gì là đầu tiên Tên có thể được sử dụng cho, dựa trên những gì bạn đang đọc đây? Ngay cả khi một số cú pháp vẫn còn mới. Đồng đô la dấu hiệu mẫu là gì? Lấy làm tiếc? Đung Header hoặc Footer. DAVID Malan: Header hoặc Footer. Vì vậy, rõ ràng, tôi đã quyết định rằng nếu điều duy nhất đó đang thay đổi là những gì tôi muốn mẫu để print-- và mẫu Tôi có nghĩa là đây là kế hoạch chi tiết cho mã mà tôi muốn đến đầu ra, nhưng tôi muốn cắm trong một số values-- vì vậy nếu nó chỉ có tiêu đề hoặc footer, tại sao tôi không tham số đó và gọi các ký hiệu đô la đối số bản mẫu? Và sau đó sôi nổi cú pháp này cho phép tôi để tạo ra một đường dẫn trong biến ở đây. Vì vậy, con đường ký hiệu đô la là một biến. Những gì hiện cú pháp này làm, nếu bạn đã quen thuộc? Yeah? Đung [Không nghe thấy] DAVID Malan: Chính xác. Nếu mẫu là, quote unquote, tiêu đề, hoặc nếu mẫu là, quote unquote, footer, rằng dòng có mà tôi đã nêu bật, dòng tám, chỉ đơn giản là lấy tên đó, như tiêu đề, và cách nối nó với dấu chấm PHP. Vì vậy, chúng tôi không có nhà điều hành này trong C. dot điều hành này là một điều tuyệt vời trong PHP-- nếu bạn quen thuộc với JavaScript hoặc Java, bạn có thể sử dụng các cộng ký làm nối. Trong C, nó là một nỗi đau trong neck-- và tôi rất xin lỗi, trong p-thiết sáu, bạn sẽ phải làm this-- nó là một cơn đau ở cổ để nối dây. Tại sao? Vâng, bởi vì nếu bạn đã có một chuỗi đó là lâu nay, và một chuỗi đó là lâu nay, bạn không thể chỉ cần cắm chúng với nhau. Điều gì làm bạn thay vì phải làm trong C? Yeah? Đung [Không nghe thấy] DAVID Malan: Bạn có để malloc bộ nhớ, hoặc sử dụng một mảng trên stack. Và bạn thực sự phải làm cho mảng đó đủ lớn để phù hợp với điều này cộng với điều này, cộng với dấu gạch chéo ngược zero. Sau đó ghép chúng lại với nhau bằng cách sử dụng khuấy động con mèo hoặc bằng tay với một vòng lặp for, hoặc bất kỳ số kỹ thuật. Và chúng tôi cho bạn một vài trong p-thiết sáu. Đó là một cơn đau ở cổ. Và đây thực sự là những gì tôi có ý nghĩa về này so với this-- như C so với PHP. Bạn chỉ nhận được nhiều hơn nữa chức năng miễn phí, để bạn có thể tập trung, lý tưởng, những ngày vui vẻ một phần của mã hóa, các dự án bạn muốn giải quyết, chứ không phải là những chi tiết vụn vặt ở mức độ thấp. Vì vậy, điều này chỉ tạo ra header.php hay footer.php dựa trên đó người ta gọi tôi. Và quả thực nếu tôi đi vào index.php, thông báo tất cả những gì changed-- Thay vì gọi làm cho tiêu đề hoặc làm footer, Tôi gọi render, tiếp theo là tên của mẫu mà tôi muốn làm. Và bạn sẽ thấy điều này, quá, trong vấn đề thiết lập bảy, nhờ đó mà chúng tôi cho phép bạn sử dụng các cùng chức năng để làm cho chùm và chùm trang web khác nhau. Vì vậy, thay vì quá nhấn nhiều hơn nữa về những details-- trong đó bạn sẽ thấy một lần nữa trong Vấn đề đặt seven-- hãy nhìn tại bây giờ là khởi đầu của một giải pháp cho một vấn đề thú vị hơn. Như vậy đến nay, không có gì chúng tôi đã thực hiện có dữ liệu đã lưu. Trong thực tế, thời gian duy nhất mà chúng tôi từng lưu một cái gì đó chúng tôi đã thực hiện trong lớp này là khi chúng tôi đã có một bản demo rất đơn giản một lúc trở lại, nhờ đó mà chúng tôi sử dụng file IO trong C, và tôi nghĩ rằng tôi đã gõ vào tên của tôi, và Tên của Hannah, và tên của Maria, hoặc có lẽ tên của Andy, và sau đó chúng tôi tiết kiệm được một file-- CSV dấu phẩy tách giá trị file. Và chúng tôi sử dụng fopen-- tôi nghĩ chúng tôi sử dụng fprintf khi tôi gọi lại, và chúng tôi lưu một tập tin. Bây giờ, đó là đơn giản nhất hình thức của một cơ sở dữ liệu. Nếu bạn muốn tạo ra một trang web cho các Chương trình Frosh nhắn tức thì, theo đó sinh viên năm nhất có thể đăng ký cho một môn thể thao, bạn lý tưởng muốn làm một cái gì đó với dữ liệu đó. Tuần trước, chúng tôi đã không làm gì với data-- chúng ta chỉ nói, bạn được đăng ký, không thực sự. Hoặc có thể gửi qua email của tôi giám thị, và đó là nó. Nhưng nó sẽ được tốt đẹp nếu tôi có thể cung cấp cho giám thị rằng một tập tin CSV, giống như một tập tin Excel. Hoặc tốt hơn, nó sẽ được tốt đẹp nếu tôi có thể đặt tên những người sử dụng và dorm tên và tất cả điều đó vào một cơ sở dữ liệu chỉ sống mãi mãi, cho đến khi tôi chọn để xóa các dữ liệu. Một cơ sở dữ liệu cho phép tôi để truy vấn thông tin. Và quả thực, đó là những gì một cơ sở dữ liệu là. Chúng tôi giới thiệu hôm nay, và Tuần tiếp theo, quá, một công nghệ gọi SQL-- một Query Structured Ngôn ngữ, nó là một ngôn ngữ khác. Đó là bản chất là một lập trình ngôn ngữ, nhưng đối với cơ sở dữ liệu. Và một cơ sở dữ liệu cho doanh nghiệp, chỉ nghĩ đến như là một phiên bản siêu lạ mắt của Microsoft Excel, hoặc Google Bảng tính, hay Numbers Apple. Nó thường là một chương trình cho phép bạn lưu trữ một bó toàn bộ các dữ liệu trong hàng và cột, khá như bạn có thể trong Excel. Nhưng những gì là tốt đẹp, đặc biệt là nếu chúng tôi không phải là siêu quen thuộc với Excel, những gì SQL cho phép bạn làm là truy vấn này thông tin bằng cách viết dòng mã nơi bạn có thể, ngay cả khi bạn cơ sở dữ liệu có một triệu hàng trong nó, bạn có thể tìm thấy những thứ siêu nhanh. Trong thực tế, đặc biệt là Excel xấu tại các tập dữ liệu lớn. Và trên thực tế, cho đến một vài năm trước đây, hóa ra Excel sẽ chỉ cho phép bạn lưu trữ lên đến 65.535 hàng data-- mà Nghe có vẻ như rất nhiều, nhưng đồng Hiện tôi đang là sinh viên grad, và tôi nhớ vấp điều này vì tôi đã tạo ra File CSV cho nghiên cứu của tôi và tôi muốn phân tích chúng một cách nhanh chóng bằng cách chỉ mở ra trong Excel. Tất nhiên, máy tính của tôi chỉ bị rơi, bởi vì tôi đã có hơn 65.000 dòng. Nhưng đâu là 65.535 đến từ đâu? Microsoft đã làm những gì, có lẽ? Nếu bạn tốt với quyền hạn của hai người? Vâng, họ đã sử dụng một 16-bit giá trị để đại diện cho số liên tiếp. Và hai đến 16 là 65,536-- trừ một, bởi vì nếu bạn chỉ số không có nghĩa đó là số lượng nhất của hàng tôi có thể có. Và đó chỉ là một quyết định thiết kế. Bằng cách tiết kiệm 16 bit, chúng tôi giới hạn 16.000 hàng, thay vì 4 tỷ đồng, mà tôi đã có thể có lý tưởng. Nhưng hiện nay, chúng ta sẽ giới thiệu đề này trong một bối cảnh web. Và những gì tốt đẹp về SQL mà thậm chí là mặc dù nó khá mạnh mẽ và khá tinh vi, nó thực sự nắm xuống đến bốn hoạt động chính, bốn chức năng quan trọng, nếu bạn will-- chọn, để lấy dữ liệu, tìm kiếm cho dữ liệu; xóa hoặc xóa dữ liệu; chèn thêm hàng cho các cơ sở dữ liệu; và cập nhật. Vì vậy, nếu bạn đã từng sử dụng Google Spreadsheets, Apple Numbers, Microsoft Excel, bạn đã thực hiện, rất có thể, tất cả của các hoạt động này như là một con người bằng chỉ cần sử dụng bàn phím và mouse-- của bạn chèn dữ liệu, sử dụng đôi mắt của bạn để chọn hoặc tìm kiếm các dữ liệu, hoặc cập nhật dữ liệu, hoặc xóa dữ liệu. Vì vậy, điều này có nghĩa là gì? Vâng, cài đặt sẵn trong CS50 IDE là một chương trình được gọi là MySQL. Đó là một mã nguồn mở miễn phí cơ sở dữ liệu đó là siêu phổ biến. Facebook, ví dụ, sử dụng nó thế này ngày, trong số các công cụ khác mà họ sử dụng. Và rất nhiều các trang web rất phổ biến sử dụng nó trong phần lớn bởi vì nó nhanh chóng, và bởi vì nó hoàn toàn miễn phí. Mặc dù chắc chắn lựa chọn thay thế tồn tại. Và một số bạn có thể vọc với lựa chọn thay thế cho các dự án cuối cùng. Đây là một ảnh chụp màn hình, trong khi đó, các một công cụ dựa trên web được gọi là phpMyAdmin. Nó là một trùng hợp ngẫu nhiên mà công cụ dựa trên web này cũng là viết bằng một ngôn ngữ, PHP, nhưng những gì nó có nghĩa là để làm được cung cấp cho chúng ta một dựa trên nền web giao diện cho một cơ sở dữ liệu. Vì MySQL thường là một cái gì đó, lịch sử, bạn sẽ tương tác với chỉ với một dòng lệnh. Và nó sẽ là siêu gây phiền nhiễu và phức tạp để có gõ lệnh văn bản để chọn dữ liệu, chèn dữ liệu, và xóa dữ liệu. Vì vậy, một số người trên internet đã viết một chương trình dựa trên web mà chỉ cần cho chúng tôi quản lý các dữ liệu trong cơ sở dữ liệu của chúng tôi. Nó giống như cách nhấp đúp vào Excel, và chạy một phiên bản dựa trên web đó. Và những gì bạn đang sử dụng này cho cuối cùng vào tuần tới, không phải trong p-thiết sáu, nhưng là để xây dựng một cái gì đó gọi là CS50 Tài chính, là sẽ có một cơ sở dữ liệu của người sử dụng, với tên người dùng và mật khẩu, số tiền đô la mà họ có trong tài khoản ngân hàng của họ. Nó sẽ một cái gì đó bạn sử dụng để lưu trữ các biểu tượng và số lượng các cổ phiếu mà người dùng đã mua sử dụng ảo đô la mà bạn sẽ cung cấp cho họ. Và nó sẽ cho phép người dùng đăng ký cho trang web của bạn, vì vậy mà ngay cả bạn bè của bạn có thể điều chỉnh để trang web của bạn và thực sự đăng ký, đăng nhập và chơi xung quanh và cố gắng để tìm lỗi trong mã của bạn, và cố gắng tìm lỗi trong trang web của bạn. Và họ sẽ chỉ cần đăng ký bằng thêm bản thân, có hiệu quả, thông qua mã bạn viết thư cho cơ sở dữ liệu của bạn. Ví dụ, đây là một ảnh chụp màn hình nhanh chóng của những gì một cơ sở dữ liệu có thể trông như thế nào. Đây là một trong những từ solutions-- năm ngoái điều này giống như một Excel nhỏ nộp, lưu trữ trong cơ sở dữ liệu của chúng tôi, được lưu trữ trong phần mềm này được gọi là MySQL. Ở phía bên tay trái, tôi đã rõ ràng cho mỗi người sử dụng một số duy nhất. Trong cột thứ hai, tôi đã cho tất cả mọi người một người dùng name-- của riêng tôi trong số đó. Và phía bên tay phải, Tôi đã cho họ một hash. Bây giờ điều này thực sự là một mật khẩu, nhưng nó không phải là một mật khẩu văn bản đơn giản. Đó là một mật khẩu được mã hóa, nếu bạn sẽ, hoặc một mật khẩu băm. Mà chúng ta sẽ trở lại trước khi dài. Nhưng nếu bạn đã từng đọc một bài viết về cách mật khẩu của bạn tại một số ngân hàng hoặc một số trang web có thể đã bị xâm nhập, nó thường có thể có nghĩa là một trong hai điều. Vì vậy, đây chỉ là một đoạn trích của sáu người. Tất cả các bạn bây giờ có thể hình dung ra qua hack hay nứt gì các mật khẩu sáu người của chúng ta đang có. Nhưng nếu bạn đã bao giờ nhận được một cảnh báo hoặc một lời xin lỗi từ một công ty hoặc trang web của câu nói, xin lỗi, một hacker đã đột nhập vào cơ sở dữ liệu của chúng tôi, có lẽ bạn nên thay đổi của bạn mật khẩu, những gì có nghĩa là gì? Vâng, một, có nghĩa là sự công ty đã được moronic hơn, và đã được lưu trữ mật khẩu của bạn trong một cột như thế này, không được mã hóa. Có nghĩa là kẻ thù, người đã ăn cắp cơ sở dữ liệu, nghĩa là biết của bạn tên người dùng và mật khẩu. Đó là kịch bản tồi tệ nhất có thể. Và như bạn sẽ thấy trong p-set bảy, dễ dàng như vậy để tránh. Hoàn toàn không có lý do gì để mà hình thức của sự ngu si trong Internet ngày nay. Two-- và chúng tôi sẽ tìm thấy một số bài viết để làm chứng một thực tế rằng điều này vẫn xảy ra, nonetheless-- hai, có lẽ các đối thủ đánh cắp phiên bản này của các cơ sở dữ liệu. Đó vẫn là loại xấu, bởi vì bây giờ họ biết rằng tôi có sáu khách hàng, Tôi biết tên người dùng của những sáu khách hàng, và tôi biết được mã hóa phiên bản, hoặc các phiên bản băm, mật khẩu những sáu của khách hàng. Nhưng bất kỳ của bạn, những người có đã thực hiện [? Hacker 2?] nơi bạn bị nứt mật khẩu, hoặc mất một nhìn vào đó phiên bản của vấn đề tập hợp, tại sao nó vẫn còn một chút đáng lo ngại nếu đối thủ biết băm của bạn mật khẩu? Đung Bởi vì họ có thể nhập toàn bộ từ điển vào hàm băm. Và nếu mật khẩu của bạn là một từ điển từ, [? họ chỉ có thể match--?] DAVID Malan: Chính xác, các đối thủ chỉ có thể viết mã, giống như một số bạn đã làm cho [? Hacker?] 2, nhờ đó bạn lặp qua tất cả các từ trong từ điển, hoặc tất cả các kết hợp có thể có của A đến Z và một qua nine-- mà âm thanh như rất nhiều, và nó được. Nhưng đối với một máy tính, nó khá darn nhanh. Và trên thực tế, đó là điểm của [? Hacker 2,?] Là để có thứ đó nghĩa đen trông như thế này, và đảo ngược những gì nó thực sự được. Vì vậy, chúng tôi sẽ xem làm thế nào chúng ta có thể lưu trữ này hiệu quả hơn. Hóa ra, may mắn trong MySQL, có sẽ được loại dữ liệu. Và một trong những phần thú vị về thiết kế cơ sở dữ liệu, phải trung thực, là thực sự quyết định cho chính mình làm thế nào bạn nên đại diện cho dữ liệu? Bạn nên đại diện cho một số điện thoại như một int, như một số lượng lớn, hoặc một lâu? Hoặc bạn có thực sự làm điều đó như là một chuỗi các ký tự? Và có thể có rất tác động không nhỏ của việc này. Trong thực tế, một trong những sớm nhất, vui vẻ chuyện Gecman là khi Mark Zuckerberg đã được xây dựng Facebook, ban đầu nó được viết bằng, và vẫn là chủ yếu viết bằng PHP. Và một trong những thách thức lớn nhất họ phải đối mặt sớm được nhân rộng. Khi họ lại thêm vào học sau trường sau giờ học, kiến ​​thức của tôi, một trong những giải pháp ban đầu về cơ bản để sao chép và dán một số cơ sở dữ liệu và một số các mã, để Havard chạy trên máy chủ riêng của mình, và MIT đã được chạy trên máy chủ riêng của mình. Và đây là lý do tại sao, đối với một số bạn của những người có thể nhớ lại, bạn không thể có bạn bè trong các mạng khác. Bạn có lẽ không có bạn bè MIT hay Harvard 10 hoặc hơn năm trước, nhưng bạn không thể trải rộng mạng lưới cho một phần lý do đó. Và một trong những thách thức lớn nhất đối với Mark và cho các công ty như Facebook là thực sự xử lý hàng trăm và hàng ngàn và hàng triệu yêu cầu mỗi giây. Vì vậy, những điều chúng ta sẽ bắt đầu nói về tuần này đang thực sự sẽ được Gecman để viết phần mềm tốt, và phổ biến công cụ thành công có thể xử lý rất nhiều người dùng. Vì vậy, chúng ta sẽ nói về những điều như lập chỉ mục và tìm kiếm, nhưng đó là nó cho ngày hôm nay. Chúng ta sẽ thấy bạn cho thêm vào ngày thứ Tư. [MUSIC - "Seinfeld" THEME] DAVID Malan: Bạn có thể đến nó, và trừ đi từ nó. Và bạn không cần phải gắn bó với một số lượng tiền xác định của bộ nhớ. Vâng, có chuyện gì đó sẽ được gọi là gì? SPEAKER 1: Vâng, những gì đang xảy ra? SPEAKER 2: bạn có ý nghĩa gì? Ông đem lại cho một bài giảng. DAVID Malan: Và chúng ta có thể sử dụng một chức năng gọi là malloc để memory-- SPEAKER 1: Tại sao không phải là cánh tay của mình di chuyển? SPEAKER 2: Vâng that's-- bạn biết, đó là bình thường. Nó giống như ông đã chỉ xúc xích lớn treo ở đó. SPEAKER 1: Đó là bình thường? SPEAKER 2: Vâng, tôi nghĩ chúng tôi chỉ là giả định ông vô tình thay thế chất khử mùi của mình với keo siêu dính.