DAVID Malan: Được rồi. Đây là CS50, và đây là cuối tuần chín. Đó là một cơn lốc trên trong vài ngày qua. Và vấn đề thiết lập bảy, nếu bạn đầu gối sâu vào nó, nhận ra có khá bit mới ở trong đó. Nhưng chúng ta hãy xem nếu chúng ta không thể mảnh tất cả mọi thứ với nhau ở đây một thời gian ngắn trước sau đó lại chuyển hướng ra trong chưa một hướng và nhìn thấy nơi nào khác chúng ta có thể đi. Vì vậy, cho đến nay, chúng tôi đã nói chuyện về HTML. Chúng tôi đã nói chuyện về CSS. Chúng tôi đã nói chuyện về PHP. Bạn đã bắt đầu trải nghiệm SQL. Hôm nay, chúng tôi sẽ nói một chút về JavaScript. Nhưng làm thế nào để tất cả các khác nhau ngôn ngữ phù hợp với nhau? Vì vậy, chúng tôi nói chuyện tuần trước về khái niệm của việc có một máy chủ. Vì vậy, chúng ta hãy chỉ vẽ hình chữ nhật này như một máy chủ web đây. Và một máy chủ web phục vụ chắc chắn tập tin. Và một số các tập tin có thể được các tập tin HTML. Vì vậy, một trong những điều mà một máy chủ web có thể nhổ ra có thể là một tập tin chúng tôi sẽ chỉ vẽ như thế này có chứa một số HTML. Vì vậy, trong điều khoản của layman, những gì HTML không cho phép bạn làm gì? ĐỐI TƯỢNG: Trang nhìn đẹp. DAVID Malan: OK, làm cho một trang nhìn đẹp, mặc dù tôi nghĩ rằng tôi đã được chứng minh mà nếu không. Vì vậy, HTML không cho phép bạn đặt ra các trang cấu trúc, và nó cho phép bạn loại thẩm mỹ đánh dấu một trang, đánh dấu nội dung tĩnh, vì vậy mà bạn sau đó có thể xem nó với một trình duyệt web. Nhưng đó là chìa khóa. Đó là nội dung tĩnh. Bạn viết nó, bạn lưu nó, và sau đó bạn gửi nó. Và máy chủ web sau đó phục vụ nó lên đến truy cập của bạn. Nhưng chúng tôi phong cách hóa việc sử dụng một khác nhau ngôn ngữ hoàn toàn. Chúng tôi bắt đầu sử dụng một thuộc tính phong cách trên thẻ nhất định. Và các thuộc tính phong cách để chúng tôi thiết lập những thứ như kích thước phông chữ và màu sắc. Và bạn đã có thể bắt đầu để khám phá, hoặc bạn sẽ sớm cho trận chung kết các dự án có khả năng, nhưng khác tài sản mà bạn có thể sử dụng trong CSS. Và do đó, về hiểu là những gì thực sự thì không CSS làm gì? Những chỉ là ví dụ của nó. Nó những gì cho phép bạn làm điều đó HTML dường như không từ những gì chúng ta đã thấy cho đến nay? ĐỐI TƯỢNG: Xác định phong cách của chính mình. DAVID Malan: Xác định phong cách của chính mình. Vì vậy, xác định những điều như các lớp học như bạn có thể gặp phải, hoặc duy nhất xác định các nút trong một tài liệu để mà bạn có thể phong cách hóa chúng. Nhưng đặc biệt hơn, tôi muốn nói rằng CSS thực sự cho phép bạn chụp những việc dặm cuối cùng và cho phép bạn xác định nhiều chính xác hơn là tính thẩm mỹ, trong khi HTML cho hầu hết các phần cho phép bạn cấu trúc trang của bạn. Và mặc dù có một số mặc định, như chúng ta đã thấy các từ khóa cho một thẻ tiêu đề, trong đó khoảng nói thực hiện những điều lớn và táo bạo. Đó là một định nghĩa khá chung chung của thẻ - lớn và táo bạo. Những gì kích thước phông chữ là? Màu sắc đó là những gì? Làm thế nào táo bạo như vậy? Và CSS cho phép bạn tinh tế hơn điều chỉnh như thế. Cũng như bố trí, như một số bạn đã thấy. Và thẳng thắn, CSS là một chút của một ngôn ngữ lộn xộn. Nó rất mạnh mẽ trong đó bạn có thể làm nghĩa là bất kỳ trang web mà bạn đã nhìn thấy trên các trang web ngày hôm nay với nó, nhưng nó là loại một cơn đau ở cổ. Và một số bạn đã đập đầu của bạn chống lại các bức tường đã được chỉ để làm một cái gì đó ngu ngốc như trung tâm một menu trên vấn đề thiết lập bảy nếu bạn đã nhận được để điểm đó đã. Nhưng nhận ra, những điều được dễ dàng hơn theo thời gian. Bạn bắt đầu nhận thấy mô hình. Và một lần nữa, Google sẽ là bạn của bạn cho các cách khác nhau mà bạn có thể giải quyết những vấn đề này. Và tôi dám nói với CSS, và HTML hơn Thông thường, bạn có thể giải quyết vấn đề trong nhiều cách khác nhau, tất cả trong đó có thể rất cũng đúng, hơn bạn có thể trong một cái gì đó như C, thậm chí bây giờ PHP, hoặc JavaScript. Có rất nhiều chỉ khác nhau cách đặt những điều trên. Nhưng điều này bắt đầu để có được lộn xộn, chúng tôi đã nói. Chỉ cần loại trộn lẫn HTML của bạn và CSS của bạn với các thuộc tính phong cách là một chút cẩu thả. Và vì vậy chúng tôi thay vì nói, loại trừu tượng nói, mà bạn nên ít nhất là bắt đầu yếu tố ra CSS của bạn có thể. Không thuộc tính phong cách của bạn, nhưng ít nhất sử dụng các từ khóa phong cách trong những gì một phần của trang web? ĐỐI TƯỢNG: Trưởng. DAVID Malan: Trong phần đầu. Cho đến bây giờ, chúng tôi chỉ có tiêu đề ra ở đó, nhưng bạn cũng có thể thêm một phong cách thẻ, và bạn có thể đặt CSS của bạn khoảng nói phía trên của trang. Nhưng sau đó chúng tôi đã thêm một bước nữa và chúng tôi yếu tố đó hiểu thêm vào một tập tin riêng biệt. Và do đó hai tập tin đã bằng cách nào đó tại liên kết. Và thực sự nó là tag đó đã làm điều đó. Và những gì là một trong những bao quát động lực cho bao thanh toán ra CSS của chúng tôi hơn nữa? ĐỐI TƯỢNG: Có thể dùng lại. DAVID Malan: Có thể dùng lại. Phải không? Bạn có thể đã thấy trong p-bộ bảy đã mà rất nhiều các trang, mua trang, các trang bán hàng, trang danh mục đầu tư, có lẽ cấu trúc phần nào tương tự. Có logo tài chính CS50 ở đầu trừ khi bạn đã quyết định thay đổi nó. Có một chân ở dưới cùng của trang. Và CSS cho phép bạn sau đó đến yếu tố đó ra nó vào một tập tin riêng biệt để nếu bạn muốn thay đổi một cái gì đó trên toàn cầu trên toàn bộ trang web của bạn, bạn có thể thực sự chỉ cần thay đổi nó ở một nơi. Nhưng có một cái giá bạn phải trả có khả năng bởi có yếu tố ra CSS từ tập tin HTML của tôi vào một riêng biệt nộp tham chiếu nó với các thẻ, mà chúng ta đã thấy hôm thứ Hai. Những gì có thể được nhược điểm này? Nghĩ lại cách đây một tuần để khi chúng ta nói về HTTP và giao thức TCP / IP và làm thế nào Internet hoạt động. Một cái gì đó ở đây? ĐỐI TƯỢNG: Phải mất nhiều thời gian hơn. DAVID Malan: Phải mất nhiều thời gian hơn. Tại sao? ĐỐI TƯỢNG: [nghe được]. DAVID Malan: Vâng. Vì vậy, nó cho là cần có thời gian nhiều hơn một chút. Bởi vì một, CSS là rõ ràng không trong cùng một tập tin. Vì vậy, bây giờ bạn có để làm cho không một mà là hai yêu cầu. Và mỗi người yêu cầu như chúng ta đã thấy trong Chrome trong cái gọi là Thanh tra, và chúng ta nhìn vào tab mạng, mỗi của các tập tin đòi hỏi một HTTP yêu cầu, mà chúng ta đã thấy có một số lượng thời gian. Bây giờ, có lẽ nó không phải là một rất nhiều. Có lẽ nó chỉ 20 phần nghìn giây. Có lẽ đó là 200 mili giây. Nhưng suy nghĩ về một trang như Facebook, hoặc CNN, hay Google, trong đó có nhiều lớn hơn các ví dụ chúng tôi đã nhìn cho đến nay. Các trang có thể có hàng chục tác phẩm, mỗi trong số đó có thể yêu cầu một tải về một tập tin. Vì vậy, điều có thể có khả năng bắt đầu chậm lại. Và đặc biệt là những ngày này, tất cả chúng ta có điện thoại di động trong túi của chúng tôi và kết nối Internet chậm hơn, phải đợi thêm một vài mili giây, một vài hơn mili giây để biết thêm tập tin thực sự có thể được làm chậm. Độ trễ là từ mô tả loại chờ đợi mà bạn có mà bạn kinh nghiệm khi chờ đợi một số phần của thông tin. Nhưng có một tăng. Vì vậy, nó không phải tất cả các loại của một - nó thực sự là một chút của một bập bênh đây. Nhược điểm bây giờ, nhưng những gì các trình duyệt có thể làm nếu họ thông minh để tránh có yêu cầu styles.css cùng nộp lại có thể làm những gì? Bộ nhớ cache nó. Vì vậy, bộ nhớ đệm - C-A-C-H-E - thường có nghĩa là ở đây chỉ để tiết kiệm tập tin mà bạn yêu cầu lần đầu tiên, và sau đó kiểm tra bộ nhớ cache của bạn cho nó. Kiểm tra bạn loại container lưu trữ, và nếu bạn đã có một bản sao của styles.css, ngay cả khi một số khác trang trong trang thiết lập, hoặc bất kỳ trang web, yêu cầu nó một lần nữa, chỉ để cung cấp cho các người sử dụng cùng một bản sao cache. Không bận tâm yêu cầu nó. Nhược điểm đó, mặc dù, như một số bạn đã vấp trong p-bộ. Nếu bạn thực hiện một sự thay đổi trên máy chủ và bạn quay trở lại trình duyệt và bạn tải lại, đôi khi trình duyệt không bạn một ưu và không làm phiền tái tải tập tin styles.css của bạn bởi vì, thôi nào, tỷ lệ cược là gì những phong cách mà Facebook sử dụng sẽ thay đổi giờ này sang giờ hoặc ngày này qua ngày? Nó khá thấp. Họ có thể thay đổi theo thời gian, nhưng không từng phút hoặc theo giờ. Vì vậy, một mẹo, chỉ cần FYI khi làm web phát triển, thường được giữ thay đổi quan trọng ví dụ và sau đó nhấp vào tải lại trong trình duyệt của bạn, và điều đó sẽ thường cho tải lại trình duyệt tất cả mọi thứ, ngay cả khi bạn đã có nó trong bộ nhớ cache. Vì vậy, một lần nữa, mặt tích cực và nhược điểm, nhưng tất cả chúng cuối cùng quyết định thiết kế. Vì vậy, bây giờ, chúng tôi đã làm không chỉ kết thúc câu chuyện ở đây. Nếu bây giờ tôi quay trở lại và trở lại và trở lại và trở lại, chúng tôi bắt đầu giới thiệu không chỉ HTML, nhưng PHP. Vì vậy, trong điều khoản của layman, những gì không PHP để chúng tôi làm gì? ĐỐI TƯỢNG: [nghe được]. DAVID Malan: đó là gì? ĐỐI TƯỢNG: Giới thiệu lý vào mã. DAVID Malan: Vâng, giới thiệu logic vào mã của bạn. Vì vậy, nó là một ngôn ngữ lập trình đúng với các vòng, và các biến, và chức năng, và điều kiện, và tất cả các những điều chúng ta đã sử dụng con đường trở lại khi kể từ đầu. Và PHP, chúng ta đã thấy, có thể được sử dụng hoặc là ở dòng lệnh - nó không cần phải có bất cứ điều gì để làm với các trang web, ngay cả khi đó là thực sự nguồn gốc của nó và những gì nó có xu hướng là tốt và có lợi cho - nhưng bạn có thể sử dụng PHP chỉ bằng cách tự nhiên thực tế là nó có một bản in () chức năng, và printf () chức năng, hoặc echo () chức năng. Có chùm cách bạn có thể in văn bản với PHP. Vì vậy, bạn có thể sử dụng chương trình này ngôn ngữ đầu ra chính xác những gì chúng ta đã nói về trước. Bạn có thể tự động tạo ra HTML của bạn. Có lẽ không phải tất cả của nó. Có thể bạn điều khó code, như tiêu đề và chân trang, và các biểu tượng, và phong cách của bạn, và tất cả điều đó. Nhưng đối với một cái gì đó giống như p-thiết lập bảy, nơi bạn đang thao tác và cổ phiếu thấy danh mục đầu tư của người dùng, đó là sẽ thay đổi tự động, bạn có thể chắc chắn sử dụng PHP và logic nó mang lại cho bạn như là một ngôn ngữ lập trình đầu ra tự động tập hợp con của trang. Vì vậy, khi bạn nói về các trang web động, hoặc lập trình web, đó là những gì bạn đang thực sự nói về. Sử dụng một ngôn ngữ như PHP, hoặc điều gọi là Python, hoặc Ruby, Java, hoặc nhưng các ngôn ngữ khác, để truy vấn cơ sở dữ liệu thường, hoặc máy chủ khác, và sau đó tự động nhổ ra HTML. Bây giờ kết quả cuối cùng, như một sang một bên, là rằng HTML của hầu hết các trang web, bao gồm p-thiết lập bảy của bạn, có lẽ sẽ là một mớ hỗn độn lớn nếu bạn nhìn vào mã nguồn mã trong một trình duyệt. Đó không phải là một việc lớn. Tại thời điểm này, khi chúng tôi quan tâm phong cách, chúng tôi quan tâm đến công cụ mà bạn viết. Chúng tôi sẽ không quan tâm đến những thứ rằng những gì kết quả đầu ra mã của bạn. Vì vậy, đừng lo lắng về thụt đầu dòng ở đây nếu nó PHP đó là thực sự xuất công cụ. Sau khi tất cả, trình duyệt sẽ không quan tâm, và một con người sẽ không được tìm kiếm tại nguồn anyway. Chúng tôi, những nhân viên, ví dụ, sẽ được xem xét PHP của bạn. Vì vậy, hãy để tôi đưa ra một ví dụ nhanh chóng tại lý do tại sao khác này có thể có ích. Vì vậy, thẳng thắn, tôi không thể nhớ cuối cùng thời gian tôi sử dụng C để giải quyết một vấn đề trong thế giới thực. Nó có thể là trong trường đại học khi Tôi cần thiết để sử dụng một ngôn ngữ là mức khá thấp và đã cho tôi cơ hội để làm một cái gì đó rất cao thực hiện để thực sự tiết kiệm như nhiều CPU chu kỳ như tôi có thể, trong phần lớn bởi vì tôi đã sử dụng bộ dữ liệu khổng lồ, và mỗi chu kỳ CPU tính. Và thẳng thắn, thậm chí trong những thứ như điện thoại những ngày này và các thiết bị khác nơi bạn không hoàn toàn có nhiều bộ nhớ và bạn hoàn toàn không có như nhiều CPU, sử dụng ngôn ngữ nhanh hơn vẫn còn hấp dẫn. Nhưng trong thế giới thực, khi bạn chỉ muốn ném một số chương trình với nhau để phân tích một số dữ liệu, hoặc bạn đã thu thập một bó toàn bộ đăng ký cho một số nhóm sinh viên và bạn muốn rất nhanh chóng tự động gửi email từng người một để mỗi một trong những đăng ký, bạn sẽ tiếp cận với một ngôn ngữ cấp cao hơn hơn so với C vậy để nói chuyện. Một cái gì đó như PHP hay Python, hoặc Ruby, hoặc một nửa tá những người khác tồn tại những ngày này. Nhưng ba có lẽ hợp thời trang nhất hiện nay. Và điều này có nghĩa là bạn có thể mở lên một trình soạn thảo văn bản như gedit hoặc hầu hết bất cứ điều gì khác và sau đó chỉ bắt đầu viết mã mà không cần phải lo lắng về biên soạn, mà không cần phải thực sự lo lắng về quản lý bộ nhớ, giữ trong tâm trí rằng mặc dù một chút luộm thuộm cuối cùng sẽ trở lại cắn bạn nếu tập dữ liệu được lớn hơn hoặc vấn đề trở nên trầm trọng. Nhưng điều này có nghĩa cho chúng tôi là như sau. Hãy để tôi đi trước và chạy Speller từ vấn đề thiết lập sáu. Vì vậy, đây là việc thực hiện Trie của tôi dựa trên mà tôi sử dụng trên lớn hội đồng quản trị mà tôi thực hiện không tốt lắm. Chúng tôi sẽ trở lại trong thời gian một tuần và xem lại những người đã kết thúc lên trên đỉnh bảng lớn tại bài giảng cuối cùng của chúng tôi. Nhưng bây giờ, hãy để tôi đi trước và chỉ chạy giải pháp của tôi trong văn bản, và chúng tôi sẽ làm King James Bible, và ở đây chúng tôi đi. Vì vậy, đó là tất cả của cho là từ sai chính tả ra khỏi King James Bible. Và thực hiện của tôi mất một nửa trong tổng số. Vì vậy, không quá xấu này máy tính cụ thể. Nhưng suy nghĩ của bao nhiêu mã tôi đã phải viết. Nghĩ rằng bao nhiêu mã bạn đã phải viết. Nghĩ rằng bao nhiêu giờ bạn chi tiêu trong D-hội trường hoặc ký túc xá của bạn hoặc bất cứ nơi nào thực sự mã hóa lên giải pháp đó. Vâng, nếu tôi thực sự có một mức độ cao hơn ngôn ngữ như PHP, lưu ý những gì tôi có thể làm ở đây. Đầu tiên, giả sử rằng đây là thay vì đang phân phối của bạn. Đây là một tập tin gọi là Speller. Nó có sẵn như là một phần của ngày hôm nay đang phân phối. Và tôi sẽ vẫy tay nhiều nhất các chi tiết, nhưng điều này thực sự một ví dụ thú vị về cách Bạn có thể cổng một ngôn ngữ như C trên PHP. Tôi nghĩa là mở hai cửa sổ văn bản, một với phiên bản C của tôi speller.c, và tôi chỉ mới bắt đầu dịch nó trong tôi đi đến PHP và gõ nó bằng cách sử dụng các chức năng tương đương gần nhất. Vì vậy, một số những điều này là khác nhau. Chúng ta đã thấy lần cuối cùng mà PHP không sử dụng bao gồm trong cách khá giống nhau. Nó sử dụng yêu cầu thông thường, mặc dù bao gồm không tồn tại. Xác định là một chút khác nhau từ # Define trong C, nhưng đó là cách chúng ta làm cho một hằng số. $ Argc nó quay ra tồn tại trong PHP, vì vậy chúng tôi đã nhìn thấy rằng trước. Đây chỉ là các biến, tất cả các mà bắt đầu có dấu hiệu đồng đô la. Nhớ lại những chỉ là một bó điểm nổi. Vì vậy, câu chuyện dài ngắn, bạn đang chào đón để lướt qua này nếu tò mò, đây là gần như một dòng-cho-dòng chuyển đổi của C phiên bản của speller.c vào PHP. Và bạn có thể làm điều này một lần nữa cho một nửa tá ngôn ngữ khác. Nhưng điều thú vị này là. Hoặc những gì thẳng thắn nản là thế này. Hãy để tôi đi trước và gõ about dictionary.php, và tuyên bố rằng tôi sẽ đi trước và tái thực hiện vấn đề thiết lập sáu ở đây. Vì vậy, hãy đề nghị đầu tiên mà trong này tập tin, mà sẽ được thực hiện trong PHP, vì vậy hãy để tôi mở thẻ của tôi như thế. Hãy để tôi cung cấp cho bản thân mình một toàn cầu biến, $ kích thước được không. Và tôi sẽ cung cấp cho bản thân mình một bảng băm. Tôi sẽ sử dụng một bảng băm cho điều này. Làm thế nào để khai báo một bảng băm trong PHP? Thực hiện. OK. Vì vậy, mở khung khung gần đại diện những gì trong PHP, như chúng ta đã nhìn thấy? Một mảng, nhưng một mảng có thể là một mảng kết hợp. Một mảng kết hợp là một cấu trúc dữ liệu liên phím với các giá trị. Bây giờ trong số lượng đơn giản nhất được lập chỉ mục mảng, các phím là gì? Bằng không, một, hai, ba, phải không? Tuổi học nhồi nhét trở lại từ C. Tuy nhiên, nó có thể cũng được chuỗi như foo và bar, hoặc Maxwell, hoặc bất kỳ chuỗi như vậy. Vì vậy, tôi có thể tận dụng mà chỉ trong một thời điểm. Hãy để tôi đi trước và tuyên bố một chức năng như - chúng ta hãy làm load () đầu tiên. Vì vậy, chức năng tải (). Và PHP là một chút khác nhau trong đó bạn có nghĩa là loại chức năng, nhưng bạn không gõ một kiểu trả về. Tôi sẽ đi trước và nói rằng load () chức năng nên có trong tham số $ từ điển, chỉ như phiên bản C đã làm. Tôi làm điều đó từ bộ nhớ. Và tôi đề nghị tôi sẽ làm điều này. Tôi chỉ đơn giản sẽ làm foreach. Tôi sẽ gọi một chức năng được gọi là nộp (), đi qua trong tên của tập tin, đó là biến $ $ Điển như từ. Và sau đó bên trong của tôi cho vòng lặp ở đây, tôi sẽ đi trước và lưu trữ trong của tôi $ $ Bảng từ được sự thật. Thực hiện. Oh, chờ đợi. Thực hiện. OK. Đó là chức năng tải trọng () nói trong PHP. Bây giờ, lý do tại sao mà làm việc? Và tôi là loại gian lận ở đây. Vì vậy, một, foreach chúng ta đã thấy một thời gian ngắn thời gian qua. Nó chỉ có nghĩa là bạn có thể duyệt qua một mảng mà không làm phiền với tôi và n và cộng cộng, và tất cả điều đó. Từ điển của khóa học là tên tập tin, một cái gì đó như lớn hay nhỏ, hai từ điển chúng ta sử dụng thời gian qua. Tập tin là một chức năng mà mở ra văn bản tập tin, đọc nó trong từng dòng một, và tay bạn trở lại một mảng lớn, mỗi yếu tố mà là một dòng từ tập tin đó. Vì vậy, đó là sự kết hợp của fopen, và fread, và trong khi vòng lặp, và fclose, và tất cả điều đó. Cuối cùng, như từ chỉ có nghĩa là đó là biến tôi sẽ có thể truy cập trên mỗi lần lặp trong vòng lặp này. Vì vậy, trong ngắn hạn, một lót này ở đây có nghĩa mở tập tin có tên trong từ điển, biến, lặp đi lặp lại hơn từng dòng một, và mỗi lần bạn nhận được một dòng, lưu trữ trong một biến gọi là từ, và sau đó làm một cái gì đó với từ. Tôi phải làm gì muốn làm gì? Tôi muốn đặt từ vào bảng băm của tôi. Vâng, tôi có thể đặt một cái gì đó trong tôi bảng băm giống như trong C sử dụng dấu ngoặc vuông. Đây là tên cho bảng băm của tôi. Tôi sẽ chỉ vào mà băm bảng ở vị trí này. Vì vậy, không khung bằng không, không một khung. Khung quote unquote một cái gì đó, bất cứ điều gì từ đó là. Và cũng giống như bạn có thể có trong của bạn bàn làm việc băm Trie, bạn chỉ cần lưu trữ hiệu quả một Boolean, ngầm hoặc một cách rõ ràng. Thực hiện. Tôi đang lưu trữ các giá trị thực sự. Bây giờ có một vài điều Tôi cắt góc trên đây. Về mặt kỹ thuật, đó sẽ là một dòng mới gây phiền nhiễu, / n, vào cuối mỗi từ. Vì vậy, tôi có lẽ nên gọi một chức năng PHP gọi là chop (), mà sẽ theo đúng nghĩa đen chặt đó. Và tôi thực sự cần phải làm một việc khác. Tôi có lẽ nên tăng kích thước trên mỗi lặp đi lặp lại, vì vậy tôi đang theo dõi trên toàn cầu của nó là gì. Và thẳng thắn, và điều này là một trong những mặt ngu ngốc của PHP, nếu bạn sử dụng một biến toàn cầu, bạn cần một cách rõ ràng nói rằng bạn đang có. Vì vậy, tôi sẽ thực sự gõ trong toàn cầu $ Kích thước, $ bảng toàn cầu, và bây giờ chức năng của tôi được hoàn tất. Vì vậy, không đơn giản như trước, nhưng có thể mất ít thời gian hơn so với C phiên bản, có thể? OK. Vì vậy, bây giờ chúng ta hãy làm việc kiểm tra () chức năng. Chúng ta hãy xem nếu điều này ít nhất đã ngày giờ kết thúc mà chúng tôi đã mất trong C. Vì vậy, hãy để tôi đi trước và tuyên bố kiểm tra như một chức năng. Có trong tranh luận từ, mà là sẽ đến từ Speller. Và tôi chỉ cần đi để kiểm tra xem sau biến isset, bảng khung strtolower của từ - hãy cân bằng tất cả các dấu ngoặc đơn của tôi - sau đó trở thành sự thật. Khác - đó là thực sự khó khăn một phần của chương trình này. Khác, trả về false. Thực hiện. Đó là kiểm tra (). Bây giờ, tại sao không làm việc này? Vâng, một tôi đã thông qua trong một từ, đó là một chuỗi. Hai, tôi đang kiểm tra bên trong của bảng băm bảng, người được gọi là $ bảng. Tôi buộc nó thành chữ thường bằng cách gọi một chức năng khá tương tự ToLower () trong C, nhưng điều này không từ toàn bộ, không phải là một nhân vật duy nhất. Và nếu được thiết lập, nói cách khác có là một tập hợp giá trị, nói cách khác, nếu đó là sự thật, sau đó có, đây là một từ. Bởi vì tôi đặt nó ở đó có tải trọng (). Và nếu không, tôi sẽ trả về false. Bây giờ những người khác dễ dàng. Kích thước chức năng (), làm thế nào để tôi làm điều này? Tôi về cơ bản không trả lại $ kích thước. Nhưng về mặt kỹ thuật tôi cần phải làm điều này gây phiền nhiễu. Và thực sự lên nghe, tôi đã được cắt một góc quá nhiều. Tôi thực sự cần phải làm $ bảng toàn cầu. Nhưng điều đó đang được nói, dỡ bỏ). Dỡ bỏ () là tuyệt vời. Chức năng dỡ bỏ (). Làm thế nào để tôi muốn thực hiện dỡ bỏ ()? Thực hiện. OK. Vì vậy, dỡ bỏ (), quản lý bộ nhớ chăm sóc hoàn toàn chụp cho bạn trong một cái gì đó như PHP và rất nhiều của ngôn ngữ bậc cao. Vì vậy, đây là tuyệt vời. Thích lý do tại sao quái nào chúng tôi đã dành quá khứ tám tuần cộng với trên C bằng văn bản dường như rất chậm, thực sự thời gian vấn đề tiêu thụ với hàng chục giờ làm việc dưới thắt lưng của chúng tôi? Vâng, cho một điều, điều này có thể làm việc tốt cho các chương trình nhỏ. Chắc chắn nó tăng tốc của tôi thời gian phát triển. Nhưng hãy xem những gì sẽ xảy ra trong thế giới thực. Hãy để tôi đi vào thư mục này trong một cửa sổ thiết bị đầu cuối. Có Speller. Và nhận thấy như một sang một bên, và bạn có thể đã gặp phải điều này trong bộ vấn đề sáu hoặc bảy vấn đề thiết lập. Bạn không đúng phải kết thúc các file PHP với. php. Nếu bạn đặt một dòng như thế đầu tiên tại phần trên, đó là một dòng đặc biệt cú pháp mà chủ yếu là tìm chương trình được gọi là PHP và sử dụng nó để giải thích tập tin này. Vì vậy, bây giờ không có ai thực sự biết rằng Tôi đang chạy một chương trình PHP. Tôi có thể chạy nó chỉ như thể nó được biên soạn một cái gì đó trong C. Nhưng đây là vấn đề. Trên thực tế, chúng ta hãy làm điều này một lần nữa. Dropbox/pset6 /. Có Speller. OK, 0,44 giây. Nó đã nhanh hơn thời gian này. Bây giờ chúng ta hãy đi vào trong phiên bản PHP. Tốt đẹp liên lạc. Nhưng chỉ nghĩ rằng bao nhiêu thời gian Tôi lưu tại giờ làm việc. OK. Vì vậy, 3.59 giây, mà thực sự không có âm thanh chính xác một trong hai. Nhưng đó là bởi vì câu chuyện dài ngắn, khi bạn in ra một số lượng lớn công cụ để màn hình, mà tự làm chậm xuống. Những gì nó thực sự đã CPU trong thiết bị là 3,59 giây, trong Trái ngược với C, mất 0.44 giây gần đây nhất. Đó là thực sự là một thứ tự cường độ khác nhau. Vì vậy, nơi được giá đó đến từ đâu? Tại sao nó lại chậm hơn nhiều? Tại sao PHP thực hiện quá nghèo nàn? Danielle? ĐỐI TƯỢNG: Bạn đã không thực sự sử dụng một bảng băm. DAVID Malan: Tôi đã không thực sự sử dụng một bảng băm. Vì vậy, tôi loại đã làm. Vì vậy, nó là một mảng kết hợp. Nhiều khả năng nếu người dân ở PHP thực sự thông minh, họ đã sử dụng bên dưới mui xe một bảng băm thực tế thực hiện trong một cái gì đó như C hoặc C + +. Nhưng. Vâng. ĐỐI TƯỢNG: [nghe được]. DAVID Malan: Vâng. Vì vậy, mỗi người trong số các chức năng tôi đã viết ngay bây giờ - trên thực tế, bạn có thể nói rằng một lần nữa một ít to hơn? ĐỐI TƯỢNG: Mỗi phòng trong số chức năng mà bạn đã bao gồm có rất nhiều đầy đủ hơn công suất hơn - DAVID Malan: Vì vậy, đó là rất đúng. Có rất nhiều chi phí hơn là chúng tôi không thực sự nhìn thấy bằng cách chỉ tập trung vào dictionary.php, mà tôi chỉ viết. Ngược lại, có cả một thông dịch viên sẽ ở chế độ nền. Thật vậy, khi tôi chạy chương trình này, nó không chạy số không biên soạn và những người thân thiết kế cho CPU Intel của tôi. Thay vào đó, nó đã được chạy từng dòng Mã PHP trông giống hệt như chúng tôi gõ chữ. Và bất cứ khi nào bạn sử dụng một ngôn ngữ giải thích, bạn thực sự làm trả giá này. Nó sẽ mất một thời gian để đọc đầu tập tin của bạn xuống dưới, từ trái sang phải, và sau đó thực hiện mỗi xếp hàng một lần nữa và một lần nữa. Bây giờ trong thực tế, đặc biệt là trên các trang web, bạn thực sự có thể đẩy nhanh quá trình này của bộ nhớ đệm kết quả Mã PHP được giải thích. Và có ý nghĩa trên web, bởi vì nếu bạn không có một người sử dụng như tôi ở đây, nhưng 1.000 hoặc 10.000 người sử dụng, sau đó có lẽ lần đầu tiên tập tin là truy cập chậm, nhưng sau đó nó nhanh hơn nhiều. Nhưng điều này quá, một lần nữa, là một thương mại giảm. Và cho một cái gì đó giống như một dữ liệu nghiên cứu thiết lập, hoặc thậm chí một cái gì đó lớn như này, người dùng của bạn sẽ cuối cùng bắt đầu cảm thấy suy thoái đó. Ngôn ngữ như vậy trong ngắn hạn, giải thích là rất thịnh hành, rất phổ biến, và thẳng thắn có lẽ là ngôn ngữ bạn nên đến khi giải quyết vấn đề tiếp theo để CS50. Nhưng nhận ra bao nhiêu bạn thực sự dùng cho các cấp bên dưới mui xe thực sự những vài tuần qua trong băm bảng, và cây, và cố gắng, được sử dụng cuối cùng để thực sự thực hiện những điều như khung mở, khung vuông, mà chúng tôi có thể bây giờ biết ơn đưa cho các cấp. Vì vậy, chúng ta hãy có một cái nhìn tại trong bối cảnh web này. Và tôi đã đề cập lần cuối cùng mà có một loạt các superglobals trong PHP không thực sự có liên quan tại dòng lệnh. Họ thích hợp hơn trong bối cảnh của việc sử dụng PHP trong một bối cảnh web. Vì vậy, chạy PHP trên một máy chủ web để để tạo ra các công cụ như HTML. Và chúng ta liếc nhìn $ _GET và $ _POST, và đó là nơi tự động của người sử dụng đầu vào kết thúc chỉ đơn giản là nếu bạn gửi một hình thành vào một tập tin kết thúc bằng. php trên một trang web máy chủ như thiết bị. Nhưng chúng ta hãy xem một thời gian ngắn tại $ _COOKIE Và $ _SESSION. Trong điều khoản của layman, một cookie như là những gì bạn hiểu nó trong bối cảnh sử dụng các trang web? ĐỐI TƯỢNG: tập tin trên máy tính. DAVID Malan: Vâng. Đó là một tập tin trên máy tính của người sử dụng trồng của bất kỳ trang web bạn tình cờ ghé thăm. Vì vậy, khi bạn đi vào Facebook, khi bạn đi để bankofamerica.com, khi bạn đi đến google.com, khi bạn đi đến hầu hết các trang web trên thế giới những ngày này, bao gồm cs50.net, một cookie được trồng trên máy tính của bạn, đó là hoặc là một giá trị được lưu trữ trong bộ nhớ RAM trong của bạn máy tính trong bộ nhớ của trình duyệt, hoặc đôi khi thực sự là một tập tin lưu trữ trên ổ cứng của bạn. Và những gì thường được lưu trữ trong tập tin đó không phải là tên người dùng của bạn, không phải của bạn mật khẩu, thông thường là không một cái gì đó nhạy cảm, trừ khi trang web không phải là quá tốt với an ninh của họ, mà là nó là một định danh duy nhất lớn giữa các những thứ khác. Đó là một số ngẫu nhiên lớn trồng trên của bạn máy tính nhưng bạn có thể nghĩ như sắp xếp của một dấu tay ảo như từ một câu lạc bộ hoặc một số công viên vui chơi giải trí mà cho phép các nhân viên, chủ sở hữu mà dịch vụ, để nhớ bạn là ai. Vì vậy, nếu các số ngẫu nhiên lớn là như 12345678, mặc dù đó là rõ ràng không quá ngẫu nhiên, suy nghĩ về nó như dấu tay khi bạn truy cập facebook.com lần đầu tiên, họ đóng dấu con số đó trên bàn tay của bạn. Và sau đó bởi vì bạn nói HTTP, bạn là một trình duyệt, và vì Facebook rõ ràng là nói giống như một trang web máy chủ, giao thức HTTP cho biết bất cứ lúc nào bạn sau đó ghé thăm facebook.com, cho dù đó là một thứ hai sau đó, một giờ sau đó, ngay cả những ngày tiếp theo, miễn là bạn chưa rõ ràng đăng xuất, mà hiệu quả là như rửa tay. HTTP nói rằng bạn nên trình bày của bạn tay đóng dấu mỗi khi bạn quay trở lại trang web đó. Những gì Facebook sau đó không là họ nhìn vào đó dấu tay và họ nói, oh, 123456789. Tôi không biết ở cái nhìn đầu tiên này là David Malan ở Cambridge, Massachusetts, nhưng họ có thể kiểm tra của họ cơ sở dữ liệu và nói, oh, người trên máy tính mà chúng tôi trồng 123456789 là David Malan từ Cambridge, Massachusetts. Chúng ta thấy rằng người sử dụng sau đó hồ sơ của mình trang hoặc News Feed của mình. Nhưng có một vấn đề ở đây nếu điều này là cách các trang web thực sự hoạt động. Chúng ta hãy xem xét một ví dụ nhanh chóng. Chúng ta hãy thực sự đi nói facebook.com. Nhưng trước khi chúng tôi có thể đến đó, chúng ta hãy tôi đi trước và mở Chrome Thanh tra xuống đây. Hãy để tôi nhìn vào tab mạng. Và bây giờ chúng ta hãy đi trước và gõ trong https://facebook.com. Và tôi làm điều đó để chúng ta không nhìn thấy tất cả những chuyển hướng và chất thải thời gian tìm kiếm thông qua các. Hãy để tôi nhấn Enter. Được rồi. Chúng tôi nhìn thấy một bó toàn bộ các yêu cầu. Có đến Facebook. Có một bó toàn bộ các tập tin. Và ở đây, mỗi đề cập đến của tôi độ trễ thời gian qua, đó là rất nhiều các yêu cầu HTTP. Nhưng là người đầu tiên có lẽ là thú vị nhất. Vì vậy, hãy di chuyển xuống đây, và Tôi sẽ phóng to trong một giây. Điều này là có được loại một mớ hỗn độn, nhưng chúng ta hãy xem. Facebook đang gửi cho chúng tôi một toàn bộ loạt các công cụ. Nhưng whoa, thú vị. Họ đang trồng không phải một, nhưng bốn tem tay lên tay của tôi ở đây. Thiết lập cookie, Set-cookie, set-cookie, set-cookie. Và có một vài tính năng ở đây. Tất cả đều đề cập đến một số loại hết hạn. Và có vẻ như Facebook đang hy vọng nhớ tôi cho đến năm 2015. Vì vậy, đó có lẽ là thời gian mà Tôi phải thoát hoặc họ sẽ chỉ tự động giả định tôi không quay trở lại. Vì vậy, đó thực sự là một phong nha số lượng thời gian. Và có một số khác điều đang xảy ra ở đây. Cookie này dường như là cưỡng bức xóa bằng cách nói nó hết hạn vào năm 1970 trước khi cookie tồn tại. Vì vậy, các trình duyệt chỉ cần đi giả định OK, đó là như rửa dấu tay. Nhưng bây giờ khi trình duyệt của tôi làm cho một yêu cầu tiếp theo - hãy để tôi đi trước và làm điều này một lần nữa và lại. Bây giờ chúng tôi di chuyển trở lại yêu cầu hàng đầu và đi xuống ở đây, tiêu đề yêu cầu. Thông báo này. Vì vậy, bây giờ tôi không theo tiêu đề phản ứng, nhưng thấy nó nói tiêu đề yêu cầu. Và nhận thấy rằng trình duyệt của tôi như là một phần của yêu cầu của mình sau khi đánh tải lại có gửi tối thiểu dưới đây thông tin. Không thiết lập cookie, nhưng cookie. Vì vậy, đây là dòng, tiêu đề HTTP để để nói chuyện, trong đó trình duyệt của tôi là loại của tôi mà không cần biết nó trình bày tay của tôi để kiểm tra Facebook. Vì vậy, các tập tin cookie có thể được sử dụng sau đó để làm gì? Để nhớ bạn là ai, hoặc nhớ làm thế nào nhiều lần bạn đã có, hoặc thực sự bất cứ điều gì. Vì vậy, đây là counter.php. Và cho tôi phóng to phông chữ. Và mỗi lần tôi lại trang này, thông báo nó nhớ bao nhiêu lần Tôi đã ở đó. Vâng, đó không phải là tất cả những gì ấn tượng. Chúng ta chỉ cần đóng tab đó, và bây giờ chúng ta hãy quay trở lại http://localhost/counter.php. Ồ, đó là thú vị. Nó vẫn còn nhớ, ngay cả mặc dù tôi đóng tab. Và thẳng thắn, nếu tôi đóng trình duyệt, nếu được thực hiện một cách đúng đắn, tôi vẫn còn nhớ rằng người dùng này là người người đó là lần đầu tiên, và chỉ một lần tôi đi vào thực đơn của Chrome, mà trên đây là ở đây, và đi đến Lịch sử, và nhấp vào Xóa dữ liệu duyệt web, như một số bạn có thể có trong qua, chỉ sau đó sẽ cookie thực sự bị xóa trong quá web phát triển. Vì vậy, nếu chúng ta đi - chúng ta hãy đóng lên gedit đây. Và nếu chúng ta đi ngay bây giờ để tập tin này. Hãy để tôi đi vào của chúng tôi vhosts / localhost / công cộng, và để cho tôi làm counter.php. Chú ý rằng đây là một khá chương trình đơn giản. Đó là một trang web khá đơn giản. Vì vậy, đầu của tập tin chỉ là ý kiến. Nhưng đây là một dòng mới mà bạn có thể đã thấy đã có trong p-bộ bảy, session_start (). Đây là một dòng mã PHP cơ bản cho máy chủ web, hãy chắc chắn để đóng dấu tay và làm cho chắc chắn kiểm tra dấu tay. Đó là tất cả những dòng nào, và nó hiện tất cả các quá trình đó cho chúng ta. Sau đó nhận thấy tôi đã chỉ cần có hai chi nhánh ở đây. Nếu phím truy cập bên trong này biến toàn cầu đặc biệt gọi là $ _SESSION Được thiết lập - nói cách khác, nếu có một số giá trị đó - chúng ta hãy làm cho nó và lưu trữ nó trong một địa phương biến gọi là $ truy cập. Khác, chúng ta hãy gán $ truy cập giá trị mặc định là 0. Bây giờ đây là một khía cạnh của PHP đó là cả một phước lành và một lời nguyền. PHP là một chút cẩu thả. Vì vậy, trong khi đó trong C, điều gì sẽ phạm vi truy cập đã hoặc đây hoặc đây? Nó sẽ được giới hạn những dấu ngoặc nhọn. Đoán những gì? Trong PHP, nó tồn tại ngay cả bên ngoài của những dấu ngoặc nhọn, ở đây, và ở đây, và ở đây, và ở đây, và thậm chí xuống dưới. Vì vậy, tôi nói điều này là một phước lành trong ý nghĩa bạn không phải suy nghĩ như khó khăn như chúng tôi đã làm tuần trước. Nhưng nó cũng là một chút của một lời nguyền trong đó không có vấn đề mà bạn sử dụng một biến trong PHP, ít nhất là trong một chương trình như thế này, đó là trên toàn cầu có thể truy cập cho tốt hơn hoặc tồi tệ hơn. Vì vậy bạn phải giữ trong tâm trí bây giờ mà biến của bạn có thể không được xác định. Bạn có thể đã được xác định ở một nơi khác. Nhưng những gì tôi sẽ làm gì cuối cùng? Tôi sẽ lưu trữ bên trong đó toàn cầu biến như là một giá trị của chìa khóa truy cập kết quả của làm truy cập cộng với 1. Vì vậy, đây chỉ là số học mà không được incrementation của truy cập đó. Và thực tế là tôi đang lưu trữ mà giá trị trở lại đây là phương tiện để về cơ bản cập nhật cơ sở dữ liệu hãy nhớ rằng người dùng 123456789 đã được đây hai lần. Và khi tôi làm điều đó một lần nữa trong thời gian tới tôi tải lại trang web, nó sẽ kiểm tra đóng dấu tay của tôi và nói, oh, người sử dụng 123456789 có bây giờ đã ở đây ba lần. Và vì vậy những gì PHP và tương tự như ngôn ngữ đang làm cho chúng ta là họ đang tìm ra như thế nào và ở đâu và trong bao lâu để lưu trữ các giá trị trong này đặc biệt superglobal. Và superglobal lần sau này tôi truy cập vào trang là loại kỳ diệu trước đông dân cư, đầy giá trị đã có lần cuối cùng bạn truy cập, cho dù đó là một giây trước đó, một tuần trước đây, vào năm 2013 và bây giờ chúng ta đang nói khoảng năm 2015. PHP và máy chủ web chăm sóc của tất cả các điều đó cho bạn. ĐỐI TƯỢNG: [nghe được]. DAVID Malan: Các biến trong PHP về cơ bản luôn luôn toàn cầu, trừ khi bạn khai báo bên trong một chức năng, và sau đó họ có địa phương chỉ có chức năng. Nhưng bởi vì tôi đã không viết bất kỳ chức năng, họ đang có hiệu quả toàn cầu trong suốt toàn bộ tập tin của tôi ở đây. ĐỐI TƯỢNG: Có cách nào để làm cho họ địa phương? DAVID Malan: Có cách để làm cho họ địa phương? Chỉ có bao bì của họ vào các chức năng. Mà trong phiên bản mới nhất của PHP, bạn có thể làm điều này với một chức năng vô danh. Nhưng thêm vào đó trong các bối cảnh của JavaScript. Nhưng câu trả lời ngắn gọn là không. Một câu trả lời dài hơn là có. Tốt đẹp. Câu hỏi bài kiểm tra. Được rồi. Vì vậy, cuối cùng, các trang đó là thực sự khá đơn giản. Chú ý rằng một khi tôi thoát khỏi chế độ PHP, nhớ lại rằng tất cả các công cụ này xuống dưới đây chỉ là đi để có được nhổ ra liệu cho trình duyệt. Đó là tốt, bởi vì tôi muốn gửi người sử dụng một số HTML, nhưng tôi không muốn để tự động cập nhật mà HTML. Và một trong những cách tôi có thể làm điều này là để sắp xếp của rất nhanh chóng giảm trở lại vào PHP chế độ, sử dụng mở dấu hỏi khung dấu bằng, và sau đó sản lượng giá trị của truy cập. Hoặc nếu điều này có vẻ hơi khó hiểu, điều này dấu bằng là thực sự chỉ là một số cú pháp đường cho việc này printf ($ truy cập). Nhưng thẳng thắn mà nói, đó chỉ là một chút xấu xí và một chút khó chịu để loại. Vì vậy, PHP rất độc đáo cung cấp tính năng này mà bạn chỉ có thể nói nó hơn ngắn gọn trong cùng một cách. Vì vậy, những gì đang xảy ra bên dưới mui xe? Chúng ta hãy nhanh chóng xem xét mạng tab đây để counter.php. Và để cho tôi đi trước và đầu tiên chúng ta cần xóa các tập tin cookie của bạn. Dữ liệu duyệt web rõ ràng chúng ta hãy từ đầu thời gian. Bây giờ chúng ta hãy quay trở lại đây. Bây giờ chúng ta hãy tải lại trang. Và tôi lại không. Vì dấu tay của tôi đã được rửa sạch, Bây giờ tôi nhận được một cookie mới. Thực sự nếu tôi nhìn vào tab mạng và nhìn vào tiêu đề phản ứng, thông báo rằng thiết bị đang gửi tôi một cookie có tên là hơi tùy tiện, nhưng loại hợp lý, PHPSESSID. Và nó gửi cho tôi điều này thực sự số lớn ngẫu nhiên. Nó không phải là một số lượng khá. Nó không hoàn toàn hệ thập lục phân. Đó là một số loại chuỗi chữ số, nhưng có lẽ đó là ngẫu nhiên. Và đó là dấu tay như vậy để nói mà tôi đang đề cập đến. Trong khi đó nếu tôi nhấp vào tải lại và sau đó nhìn vào dòng thứ hai này cho thứ hai của tôi yêu cầu, thông báo bây giờ là yêu cầu của tôi tiêu đề bao gồm PHPSESSID bằng này, không thiết lập cookie, nhưng chỉ cookie. Và đó là trình bày trình duyệt của tôi của dấu tay của tôi. Vì vậy, bây giờ là một lời trêu ghẹo, và chúng tôi sẽ nói chuyện nhiều hơn về điều này trong một tuần hoặc lâu hơn, nhưng trong những cách thực hiện điều này làm cho bạn dễ bị tổn thương, tài khoản Facebook của bạn dễ bị tổn thương, và như vậy khác tài khoản dễ bị tổn thương? ĐỐI TƯỢNG: Nếu ai đó có cookie của bạn. DAVID Malan: Vâng, nếu một người nào đó có cookie của bạn. Tôi có nghĩa là thực sự, giống như một số bạn có thể đã cố gắng tại như một câu lạc bộ hoặc một công viên giải trí, nếu bạn cố gắng một cái gì đó như thế này để sao chép các tem, mặc dù ngược trở lại vào tay của người khác, và sau đó anh ta trình bày nó như riêng, nếu họ nó thực sự nhìn giống hệt nhau, 123456789, sau đó các trang web máy chủ là dường như chỉ cần đi để tin tưởng rằng người đó là bạn. Và điều này thực sự là một cơ bản mối đe dọa bất cứ lúc nào bạn sử dụng cookie bởi vì nếu một người nào đó chỉ lừa đảo như vậy để nói cookie, con số của bạn ra khỏi những gì nó được, hoặc bằng cách thực sự sao chép nó bằng cách nhìn vào máy tính của bạn và là như thế, OK. Cookie của David là JJ3JIK và vv, và sau đó họ đủ thông minh để biết cách sắp xếp của tự gửi mà cookie từ trình duyệt hoặc từ một chương trình họ viết, họ có thể hoàn toàn đăng nhập vào một trang web như bạn. Nó không phải là khó để giả vờ là một người khác trừ khi chúng tôi xem lại p-bộ hai, trong đó giới thiệu những gì? ĐỐI TƯỢNG: Mật mã học. DAVID Malan: A little bit của mật mã. Mật mã đơn giản, ít nhất là trong tiêu chuẩn phiên bản, nhưng mật dù sao. ít hơn. Thực ra, nếu bạn mã hóa tất cả những tiêu đề sử dụng một cái gì đó mà bạn bây giờ có thể biết thân thiết hơn như SSL, Secure Socket Layer, hoặc URL https://, sau đó tất cả những điều chúng tôi đã liếc nhìn thực sự mã hóa, có nghĩa là nó giống như bạn không thể đọc được dấu tay. Chỉ facebook.com có ​​thể, hoặc google.com, hoặc trong trường hợp này, thiết bị có thể đọc mà dấu tay. Bi kịch mặc dù, và một lần nữa, đây là tất cả các quá thích hợp với các công cụ NSA của cuối năm, thậm chí SSL là vỡ. Và nó thực sự không phải là khó thậm chí nứt mã hóa. Không quá nhiều khám phá ra mã hóa, nhưng bằng cách lừa trình duyệt vào giải mã các dữ liệu sớm. Nhưng một lần nữa, chúng tôi sẽ trêu chọc bạn với trước lâu. Hiện tại, chỉ sợ. Đó là bi kịch loại đúng. Được rồi. Vì vậy, nơi thực hiện điều này bây giờ lại cho chúng tôi? Vâng, chúng ta hãy làm điều này. Chúng ta hãy đi trước và có một cách nhanh chóng trêu ghẹo trước khi chúng ta nghỉ ngơi. Và tôi nghĩ rằng chúng tôi sẽ nán lại lâu hơn một chút ngày hôm nay, nhưng chúng ta sẽ đi sâu vào một cái gì đó mới và gợi cảm, mà sẽ kích thích sự thèm ăn của bạn cho nhiều hơn. Vì vậy, đó là lời trêu ghẹo. Vì vậy, SQL, chúng tôi bắt đầu nói về bao giờ nên một thời gian ngắn thời gian qua. Bạn thực sự sẽ có được bàn tay của bạn bẩn với một số của nó trong p-thiết lập bảy. Và trong điều khoản của layman, những gì hiện SQL - S-Q-L - làm cho bạn? Nó là gì? Vâng. ĐỐI TƯỢNG: Hãy bạn truy cập dữ liệu. DAVID Malan: Vâng. Nó cho phép của bạn truy cập dữ liệu trong một cơ sở dữ liệu. Structured Query Language. Và điều này về cơ bản là một ngôn ngữ lập trình. Có những tính năng của nó mà chúng tôi thậm chí sẽ không sử dụng trong lớp học. Nhưng bạn có thể có hiệu quả xác định chức năng. Chúng được gọi là lưu trữ thủ tục trong SQL. Nhưng chúng tôi sẽ giữ nó khá đơn giản và chỉ sử dụng nó cho một số hoạt động cơ bản giống như lựa chọn dữ liệu, chèn dữ liệu, cập nhật dữ liệu, và xóa dữ liệu. Và bạn thực sự có thể nghĩ đến một cơ sở dữ liệu, giống như một cơ sở dữ liệu SQL, như chỉ là Microsoft Excel. Bởi vì SQL đề cập đến một quan hệ cơ sở dữ liệu, nơi mối quan hệ chỉ có nghĩa là bảng. Hàng và cột. Vì vậy, bất cứ điều gì bạn có thể đặt trong một bảng tính như thế này hay Google Docs, bạn có thể đưa vào một cơ sở dữ liệu SQL bằng cách tuyên bố một bảng. Bây giờ, làm thế nào để bạn thực sự truy cập thông tin đó? Vâng, với các lệnh hoặc truy vấn như thế này. SELECT, INSERT, UPDATE, và DELETE. Và đối với hầu hết các phần, đó là những bốn chỉ thành phần bạn sẽ cần phải làm một cái gì đó khá mạnh mẽ trong vấn đề thiết lập bảy. Bây giờ trở lại trong ngày, bạn sẽ thực sự tương tác với một cơ sở dữ liệu trong một cửa sổ terminal màu đen và trắng tại một dấu nhắc nhấp nháy như thế này. Và cơ sở dữ liệu chúng tôi đang chạy trên thiết bị được gọi là MySQL, đó là cơ sở dữ liệu nguồn mở miễn phí. Nếu bạn Google và đọc Wikipedia bài viết, bạn sẽ biết rằng tên là một chút của quá trình chuyển đổi đối với một số các phiên bản của Linux. Cơ sở dữ liệu Maria thực sự là một ngã ba như vậy để nói về MySQL. Long câu chuyện ngắn, Oracle mua MySQL. Oracle là một công ty lớn. Người đã lo lắng rằng nó sẽ không còn duy trì nguồn khá mở, do đó, đây chỉ là một bản sao của MySQL đó là vẫn còn miễn phí, vẫn còn mã nguồn mở, và cài đặt trong Fedora Linux theo mặc định. Nhưng đây là loại một cơn đau ở cổ để làm quen với một cơ sở dữ liệu theo cách này. Vì vậy, chúng tôi đưa vào thiết bị CS50 một công cụ mã nguồn mở miễn phí được gọi là phpMyAdmin. Chỉ là một trùng hợp ngẫu nhiên mà nó được viết bằng PHP. Không có cơ bản cần cho PHP ở đây. Nhưng điều này chỉ là một công cụ dựa trên web chúng ta tải về miễn phí, cài đặt trong thiết bị, cho phép chúng ta có một giao diện người dùng đồ họa mà để khám phá p thiết lập cơ sở dữ liệu với bảy để tạo ra cơ sở dữ liệu mới, nói cho dự án cuối cùng của riêng bạn nếu bạn muốn như thế, và cuối cùng tạo ra các trang web động như CS50 Tài chính cho phép bạn truy vấn dữ liệu và cập nhật dữ liệu tự động. Bạn sẽ không phải sử dụng chỉ một tập tin văn bản đơn giản hoặc CSV. Bạn thực sự có thể sử dụng một cơ sở dữ liệu thông minh chương trình để bạn có thể thực hiện nhiều hơn truy vấn phức tạp hơn là chỉ đọc thông qua tất cả mọi thứ tuyến tính. Vì vậy, ví dụ, đây là những gì chúng tôi cung cấp bạn ra khỏi hộp cho p-thiết lập bảy. Đây là một bảng với dường như ít nhất ba cột, một trong số đó là Tên truy nhập, một trong số đó là băm, và một trong số đó là ID. Nhưng điều thú vị, và chỉ để trêu chọc ra một suy nghĩ ở đây, tên người dùng có lẽ là đã độc đáo, phải không? Ý tôi là, hầu hết các trang web bất kỳ, nếu bạn có một tên người dùng, có không thể có hai Caesars. Không thể có hai malans. Không thể có hai jharvards. Độc đáo của nó. Nếu không, họ không biết jharvard nó thực sự là. Vì vậy, những gì có thể là động lực cho cũng có một cột thứ ba bên trái đó được gọi là ID, trông giống như một số đó là duy nhất tương tự? Nó cảm thấy một chút dư thừa với tôi ở cái nhìn đầu tiên. Lý do tại sao nó có thể là hấp dẫn để có không chỉ tên người dùng duy nhất, nhưng cũng con số duy nhất? ĐỐI TƯỢNG: Họ có thể có cùng một mật khẩu. DAVID Malan: Mọi người có thể có cùng một mật khẩu, chắc chắn. Mà hoàn toàn có thể xảy ra. Nhưng nếu họ có tên độc đáo này, tôi sẽ lập luận rằng đó không thực sự vấn đề, bởi vì nếu họ gõ vào họ Tên truy nhập, tôi chỉ cần kiểm tra của họ mật khẩu, băm của họ biết. Tại sao nữa? ĐỐI TƯỢNG: nhanh hơn tìm kiếm. DAVID Malan: nhanh hơn tìm kiếm. Tại sao? ĐỐI TƯỢNG: ID chỉ có một. DAVID Malan: ID chỉ là một nhân vật, hoặc chính xác hơn, đó là một số, do đó, nó có thể là 32 bit hoặc một cái gì đó như thế. Trong khi đó, tên người dùng, rõ ràng Jason Lên Hirschhorn của có loại ridiculously dài, và nó sẽ đưa tôi thời gian nhiều hơn để chuỗi so sánh H-I-R-S-C-H-H-O-R-N, và có thể a / 0 hay như thế, để để tìm kiếm Jason, như trái ngược với chỉ nói cho tôi sử dụng số hai. Đó là 32 bit. Đó là một INT duy nhất mà bạn có để so sánh. Và quả thật, đó là chính xác lý do tại sao cơ sở dữ liệu có xu hướng gán ID duy nhất để hàng trong đó. Bây giờ những gì các loại dữ liệu khác đang có bên cạnh đó INT và rõ ràng chuỗi như thế này? Vâng, để được thích hợp hơn, Cơ sở dữ liệu SQL, như MySQL, có các lĩnh vực CHAR. Và CHAR một chút sai lạc không phải là một CHAR duy nhất. Một lĩnh vực CHAR trong một cơ sở dữ liệu MySQL một hoặc nhiều ký tự, nhưng đó là một số cố định của các nhân vật. Vì vậy, ví dụ, nếu tôi đi qua phpMyAdmin như bạn có thể đã có, hoặc sớm là một vấn đề sẽ thiết lập bảy, và tôi đi cơ sở dữ liệu của tôi, và chỉ để cho vui, chúng ta hãy tạo một bảng mới gọi là kiểm tra chỉ với hai cột. Sau đó tôi sẽ nhấn Go. Và điều này sẽ trở nên khá quen thuộc, đặc biệt là khi bạn chọc ngoáy xung quanh mình. Ở đây tôi có thể gõ ID để tạo ra một bảng mới của kiểu INT. Nhưng ở đây tôi có thể gõ tên người dùng để tái tạo mà bảng trước đó. Và thông báo tôi có một bó toàn bộ các loại để lựa chọn. Và đây cũng là lý do tại sao phpMyAdmin là loại tốt đẹp. Đó là loại tự học trong đó bạn có thể chỉ là loại điểm và nhấp chuột, và nhìn vào trình đơn thả xuống, và suy ra từ rằng những gì quyền hạn SQL cung cấp cho bạn. Và quả thực, nếu tôi chọn CHAR, tôi sau đó phải xác định độ dài, hoặc làm thế nào nhiều giá trị, bao nhiêu ký tự. Giá trị nên rất phổ biến là những thứ như 255, nhưng đó là một ít lâu. Thường là tám cho một tên người dùng. Nhưng đó là một chút nhỏ những ngày này. Vì vậy, đây là một quyết định thiết kế. Có 8 ký tự tối đa, 32, 255, 1000? Nó thực sự tùy thuộc vào bạn. Nhưng một lĩnh vực CHAR là một con số cố định. Vì vậy, lựa chọn quá ít và bạn đang loại hơi say nếu bạn muốn một tên người dùng lâu hơn. Chọn quá nhiều và những gì nhược điểm? ĐỐI TƯỢNG: [nghe được]. DAVID Malan: Đó là lãng phí. Cũng giống như trong C, nếu bạn có một lớn hơn đoạn bộ nhớ hơn bạn cần, bạn chỉ lãng phí thời gian và lãng phí không gian. Vì vậy, như một sự thay thế, tồn tại VARCHAR, mà giải quyết vấn đề này bằng điều trị dài không phải là một chiều dài cố định, nhưng như chiều dài tối đa, và sử dụng một số biến của các ký tự, sau đó có xu hướng chỉ sử dụng như nhiều ký tự như bạn thực sự cần. Đó là âm thanh hoàn hảo. Tại sao chúng ta không thoát khỏi sự Nhập dữ liệu CHAR sau đó? Những gì có thể là nhược điểm của sử dụng varchars, mà âm thanh như đó là một chiến thắng đẹp? Yeah? ĐỐI TƯỢNG: [nghe được]. DAVID Malan: OK, tốt. Vì vậy, nếu tất cả các dữ liệu của bạn là như nhau chiều dài, mối quan tâm là những gì? ĐỐI TƯỢNG: Bởi vì bạn đang lãng phí dữ liệu bằng cách nói cho tất cả. DAVID Malan: Vì vậy, nếu tất cả các dữ liệu của bạn chiều dài tương tự, tuy nhiên, tôi sẽ tranh luận rằng việc xác định chiều dài tối đa trên VARCHAR là không khác nhau từ chỉ định một chiều dài cố định trên CHAR nếu Bạn có biết rằng số trước. Nhưng có thực sự là, và tôi sẽ sắp xếp của trích xuất từ ​​đó câu trả lời thực tế rằng bạn vẫn có một tối đa, mà có thể được gây phiền nhiễu, đặc biệt là nếu bạn gặp phải tên của một người đó là bất thường lâu mà bạn không dự đoán. Và đó cũng là một chút ít hiệu quả để thực sự tìm kiếm trên varchars như trái ngược với tìm kiếm ký tự, đặc biệt là cho các bảng dài mà có rất nhiều và rất nhiều dữ liệu. Vì vậy, ở đây, chủ đề là một lần nữa không có sự lựa chọn rõ ràng. Vì vậy, chỉ để cung cấp cho bạn một cảm giác khác kiểu dữ liệu mà có thể quan tâm hoặc cho p-bộ bảy hoặc trong tương lai, có INT. Có BIGINT, mà là như lâu dài. Nó có xu hướng là 64 bit. Có số thập phân, mà bạn sẽ thấy trong bộ vấn đề, mà là một nhiều sạch câu trả lời cho những vấn đề chúng tôi gặp với phao và trôi nổi điểm không chính xác. Và sau đó có datetime. Có nghĩa là một kiểu dữ liệu có trông giống như một năm, một tháng, một ngày, và một giờ, phút và giây. Nhưng cơ sở dữ liệu SQL cũng có điều mà chúng tôi sẽ gọi cho chỉ số. Và một chỉ số là một cái gì đó mà bạn chỉ định khi tạo bảng để thực hiện tìm kiếm và các hoạt động khác hiệu quả hơn. Cụ thể, có một cái gì đó gọi là chỉ số tiểu học mà bạn có thể tuyên bố như sau. Chúng tôi đã làm điều này cho bạn với bảng người sử dụng, chúng tôi cung cấp cho bạn. Nhưng nhận thấy nếu tôi được tự tái tạo bảng người sử dụng ở đây cho nó một cái tên của người sử dụng. Tôi đã được xác định ID. Tôi đã chỉ định INT. Tôi đã chỉ định tên người dùng với tối đa 32 ký tự. Nhưng nếu chúng tôi tiếp tục di chuyển trong này khá cửa sổ rộng, nhận thấy có một bó của những thứ khác tôi có thể xác định. Một, tôi có thể chỉ định các thuộc tính thích, bạn biết những gì, điều này INT nên UNSIGNED. Tôi không muốn số âm, vì vậy hãy làm cho nó UNSIGNED. Null là không liên quan ở đây bởi vì Tôi muốn mọi người dùng để có một số duy nhất. Tôi không muốn nó là vô giá trị. Nhưng điều này là thú vị. Tôi có thể xác định rằng ID là một trong hai khóa chính của cơ sở dữ liệu này, hoặc nó độc đáo, hoặc nó lập chỉ mục, hoặc toàn bộ văn bản. Vì vậy, mục đích của ngày hôm nay, câu chuyện dài Tóm lại, có nghĩa là tiểu học mà trách nhiệm này được cả hai khái niệm và kỹ thuật các lĩnh vực mà chúng tôi sử dụng để duy nhất xác định người sử dụng. Vì vậy, khi chúng ta nhìn lên người sử dụng, đây là loại của một lời hứa để tìm chúng chủ yếu là do là định danh duy nhất. Và cơ sở dữ liệu sẽ đảm bảo rằng nếu bạn có một số người sử dụng 3, bạn có thể không thể chất chèn một người dùng khác với con số cùng 3. Cơ sở dữ liệu sẽ chỉ từ chối để lưu thay đổi. Đó là một điều tốt, bởi vì bạn có thể bảo vệ mình khỏi chính mình. tự Ngoài ra, nhập tên người dùng. Vì vậy, hàng thứ hai, thu hồi, là lĩnh vực tên người dùng. Vì vậy, hàng thứ hai ở đây là tên người dùng, như chúng tôi đã làm trên bên trái đó. Vì vậy, những gì khác tôi có thể muốn để xác định? Tôi không được phép, theo SQL, để xác định hai khóa chính. bạn có thể chỉ định một khóa chung nơi bạn nhìn vào cả hai lĩnh vực, nhưng họ không thể cá nhân là khóa chính. Vì vậy, đó là trong số các câu hỏi. Vì vậy mà tôi có thể muốn để lựa chọn? Vâng, UNIQUE là tinh thần tương tự một khóa chính mà bạn chỉ định này trường phải là duy nhất, nhưng nó sẽ không phải là một trong những Tôi sử dụng tất cả các thời gian. Và chúng tôi sẽ không sử dụng này tất cả thời gian cho những gì lý do một lần nữa? Nó chậm có khả năng nếu đó là một tên dài. Nó chỉ là một sự lãng phí thời gian. INDEX, trong khi đó, quy định cụ thể rằng đó là không phải là duy nhất, nhưng tôi muốn bạn làm việc kỳ diệu của bạn bên dưới mui xe để làm cho nó nhanh hơn cho tôi để tìm kiếm trên lĩnh vực này. Vì vậy, điều này có lẽ là không liên quan ở đây. Đối với Tên truy nhập, tôi muốn lập luận rằng UNIQUE là một câu trả lời tốt. Nhưng giả sử mà chúng ta đã sử dụng hơn thú vị hơn là chỉ tên người dùng, băm, và số ID. Nếu chúng ta đã cho mọi người cái tên đầy đủ? Nếu chúng ta cho họ địa chỉ và các dữ liệu khác về họ? Vâng, nếu bạn xác định rằng một cột trong một cơ sở dữ liệu được lập chỉ mục, có nghĩa là MySQL hay Oracle, hoặc bất cứ điều gì cơ sở dữ liệu bạn đang sử dụng, nên làm việc kỳ diệu của nó và sử dụng một số loại dữ liệu ưa thích cấu trúc giống như một cái cây, hoặc một Trie, hoặc một bảng băm, hoặc một cái gì đó để đảm bảo rằng khi bạn tìm kiếm dữ liệu sử dụng chọn trên lĩnh vực cụ thể - như chỉ cho tôi tất cả mọi người sống trên đường Oxford. Một câu truy vấn như thế. Nếu bạn đã xác định trước đó bạn muốn một chỉ số về lĩnh vực đó, tìm kiếm sẽ được nhiều, nhanh hơn nhiều. Nếu bạn không chỉ định một chỉ số, là tốt nhất bạn có thể làm là một tìm kiếm tuyến tính nếu nó không được sắp xếp. Nhưng nếu bạn chỉ định INDEX, thông minh những người làm cơ sở dữ liệu - những người như bạn của những người bây giờ biết cây và cố gắng và bảng băm - sẽ tự động xây dựng một dữ liệu đó cấu trúc trong bộ nhớ RAM để đảm bảo rằng những người tìm kiếm được nhanh hơn nhiều. Toàn văn trong khi đó là tinh thần tương tự, nhưng cho phép bạn làm ký tự đại diện , tìm kiếm như cho tôi tất cả mọi người sống ở đường phố bắt đầu bằng chữ O vì lý do gì. Bạn có thể thực hiện tìm kiếm ký tự đại diện như thế. Hoặc, những điều hấp dẫn hơn như chương trình tôi tất cả những người có chữ - chỉ cho tôi tất cả mọi người có tên bắt đầu với một lá thư đặc biệt. Bạn có thể tìm kiếm các từ khóa theo cách này. Được rồi. Vì vậy, cơ hội thiết kế có khả năng. Có những người khác mà tôi sẽ vẫy tay của tôi tại. Nó chỉ ra rằng bạn có thể có công cụ lưu trữ khác nhau. Và điều này là phức tạp hơn chúng ta cần chắc chắn cho vấn đề thiết lập bảy. Theo mặc định, các bạn đang sử dụng một cái gì đó gọi là InnoDB. Bạn sẽ thấy đề cập đến một nơi nào đó trong giao diện phpMyAdmin của khả năng nhất. Nhưng biết rằng có những thiết kế khác quyết định có tiềm năng quan tâm đến các dự án cuối cùng nếu bạn làm điều gì đó dựa trên web. Nhưng chúng ta hãy làm điều này. Chúng ta hãy đi trước và đặt này trên màn hình như một lời trêu ghẹo cho một câu chuyện liên quan đến bạn, một người bạn cùng phòng, và một ly sữa. Chúng ta hãy một phút hai hay như vậy phá vỡ ở đây. Và nếu bạn có thể dính vào xung quanh, chúng ta hãy trở lại, nhìn nhiều hơn một chút ở SQL, và sau đó một chút của JavaScript với p-đặt tám trong tâm trí. Được rồi. Vì vậy, chúng ta hãy giúp bạn suy nghĩ về một trường hợp góc mà có thể rất dễ dàng phát sinh trong bối cảnh của việc sử dụng một cơ sở dữ liệu, hoặc thẳng thắn, thậm chí sử dụng những thứ thế giới thực như máy ATM để lấy tiền. Vì vậy, đây là một tủ lạnh. Giả sử bạn đã có một quá trong ký túc xá của bạn hoặc nhà của bạn. Và bạn đã có một người bạn cùng phòng, và cả hai bạn thực sự thích sữa ví dụ. Vì vậy, bạn trở về nhà từ lớp học một ngày. Người đó là chưa trở lại. Bạn mở tủ lạnh. Bạn thực sự muốn một ly sữa lớn. Không có sữa. Vì vậy, bạn sẽ làm gì? Bạn đóng tủ lạnh. Bạn lấy chìa khóa của bạn. Bạn đi ra ngoài với hình vuông. Và bạn nhận được hàng tại CVS tại những thứ tự kiểm tra, mà luôn luôn mất nhiều thời gian hơn thực tế có nhân viên thu ngân. Dù sao đi nữa. Vì vậy, sau đó, trong khi đó, dot dot dot, của bạn bạn cùng phòng về nhà và người đó tương tự có một khao khát cho một ít sữa. Do đó, em mở tủ lạnh, nhìn vào bên trong, và oh, chết tiệt. Không có sữa. Vì vậy, người đó đứng ra, sẽ xảy ra đi đến CVS khác, mà chỉ là một chặn đi vì một lý do, và người cô được xếp hàng để mua một ít sữa. Trong khi đó, bạn trở về nhà, anh ta hoặc cô trở về nhà, và những gì làm cuối cùng bạn có? Gấp đôi sữa. Nhưng bạn không thực sự thích sữa nhiều. Vì vậy, bây giờ bạn có sữa rất nhiều mà bây giờ một trong số họ chỉ là sẽ đi chua cuối cùng. Vì vậy, đây là một vấn đề thực sự xấu. Phải không? Vì vậy, những gì đã xảy ra? Vì vậy, về cơ bản, đây là loại một ví dụ vô lý. Nhưng bên dưới mui xe, những gì chúng ta đã có xảy ra ở đây là cả hai bạn kiểm tra tình trạng một số phần bộ nhớ, tủ lạnh. Cả hai bạn kiểm tra nhà nước của một số biến. Cả hai đã thu hút một kết luận mà bạn sau đó hành động trên. Nhưng không may, trong khi người bạn cùng phòng của bạn là tại các cửa hàng, nhà nước đó biến đổi, họ trở lại và bây giờ muốn thay đổi trạng thái, nhưng nó đã được thay đổi trên người đó. Và tất nhiên, họ sẽ không có đi đến các cửa hàng nếu họ biết mà bạn đã đã trên đường. Vì vậy, trong thế giới thực, làm thế nào có thể bạn tránh vấn đề này, giả sử bạn có tủ lạnh, bạn có một người bạn cùng phòng, và bạn thực sự thích sữa? ĐỐI TƯỢNG: Giao tiếp. DAVID Malan: Giao tiếp. OK. Nhưng làm thế nào bạn có thể giao tiếp? ĐỐI TƯỢNG: Để lại một lưu ý. DAVID Malan: Để lại một lưu ý, phải không? Luôn luôn để lại một lưu ý, đối với người hâm mộ của chương trình. Được rồi, vì vậy luôn luôn để lại một lưu ý, hoặc đưa thực sự giống như một ổ khóa hoặc một cái gì đó trên tủ lạnh mà giữ của bạn bạn cùng phòng từ kiểm tra trạng thái của rằng biến. Bây giờ, tại sao có thể này được Gecman để vấn đề thiết lập bảy, hoặc máy ATM. Vâng, hãy tưởng tượng một thế giới trong một máy ATM nơi bạn có thể có thể đi đến một ATM máy ở đây, và một máy ATM ở đây. Và điều này xảy ra khá thường xuyên. Và giả sử bạn có hai thẻ ATM, mà có thể có được. Và bạn đăng nhập vào cả hai máy hiệu quả đồng thời, hy vọng trong khi không ai đang tìm kiếm. Và sau đó bạn nhập vào mã PIN của bạn khoảng cùng một lúc. Và sau đó bạn làm một truy vấn số dư để xem có bao nhiêu tiền bạn có. Và chúng ta hãy nói rằng bạn có $ 100 còn lại trong tài khoản của bạn. Vì vậy, về cơ bản cùng một lúc, bạn nói một, không, không, nhập. Và bạn hy vọng có được trở lại một số tiền. Nhưng bao nhiêu tiền bạn có thể lấy lại? Bây giờ máy tính vào cuối ngày, đặc biệt là nếu họ đang nói chuyện với các máy chủ, không nhất thiết phải làm những việc theo thứ tự đó là dự kiến. Vì vậy, giả sử những gì xảy ra, vì bất cứ điều gì mạng có vấn đề tốc độ là, hoặc các vấn đề CPU có, hoặc bất cứ điều gì như thế, giả sử đầu tiên ATM kiểm tra số dư và thấy, oh, người này có $ 100. Nhưng sau đó bị phân tâm bởi vì có thể một bản sao lưu đang xảy ra và vì vậy nó chậm lại. Hoặc có thể trong khi kiểm tra, mạng kết nối có chậm hơn một chút bởi vì điều này chỉ xảy ra. Họ thiết bị vật lý. Vì vậy, trong khi đó, các máy ATM thứ hai là hỏi cùng một câu hỏi. David không có bao nhiêu tiền? $ 100 là câu trả lời. Nhưng bởi vì các máy ATM đầu tiên có chưa gửi tin nhắn trừ $ 100, cả hai ATM đã kiểm tra kho quỹ của ngân hàng, nhìn thấy có 100 $ đó, và bây giờ cả hai máy có khả năng là sẽ nhổ ra một câu trả lời. Bây giờ, điều này là rất tốt cho bạn trong một số ý nghĩa nếu những gì các ngân hàng không cuối cùng được thay đổi số tiền trừ đi 100 bằng thiết lập biến bằng của bạn chiếm ngân hàng bằng 0, như trái ngược để làm trừ đi 100. Bây giờ trong trường hợp xấu nhất cho ngân hàng - hoặc tốt nhất cho các ngân hàng, trong khi đó, họ cung cấp cho bạn $ 200, và tài khoản ngân hàng của bạn hiện nay cho thấy tiêu cực $ 100, mà thực sự không có lợi cho bạn cả. Nhưng điểm là cuộc đua này điều kiện để hai bạn cùng phòng nhận được sữa, hoặc cho hai máy ATM cố gắng để có được tiền mặt và thay đổi trạng thái của một kho tiền đồng thời tồn tại bất kỳ khi bạn có một cơ sở dữ liệu. Bây giờ trong vấn đề thiết lập bảy, vấn đề này phát sinh trong ý nghĩa rằng nếu bạn mua một cổ phiếu của cổ phiếu Facebook, và sau đó cho Ví dụ bạn mua một cổ phiếu thứ hai của Cổ phiếu Facebook, bạn cần phải thực hiện một quyết định như các lập trình viên. Để quyết định làm thế nào để cập nhật cơ sở dữ liệu, tỷ lệ cược là bạn sẽ có một hàng cho cổ phiếu đó, và điều này là một cách để thực hiện nó. Và bạn sẽ có một phần FB, đó là biểu tượng cổ phiếu mã chứng khoán của họ cho tên người dùng này, hoặc người sử dụng này ID, nhận dạng duy nhất. Nhưng những câu chuyện tương tự có thể xảy ra ở đây. Nếu bạn làm một SELECT trong SQL, như bạn sẽ thấy trong vấn đề thiết lập bảy khi bạn nhìn thấy, oh, David có một phần cổ phiếu Facebook. Bây giờ tôi thay đổi này là hai cổ phiếu, bởi vì anh muốn mua một phần thứ hai. Nhưng giả sử David thực sự đã có hai cửa sổ trình duyệt mở, hoặc giả sử rằng đó là một tài khoản chung với hai vợ chồng, và cả hai đều đang cố gắng để thực hiện các hoạt động tương tự, ở đó, cũng vậy, tiềm năng tồn tại cho một quyết định được thực hiện dựa trên trước nhà nước của thế giới - tài khoản có một cổ phiếu - và cả hai người, hoặc cả hai máy chủ, bây giờ cố gắng để nói tăng nó để hai cổ phiếu. Nhưng trong trường hợp này, bạn có thể tính phí tôi tiền cho cả hai cổ phiếu, nhưng tăng lên chỉ là một thời gian. Vì vậy, trong ngắn hạn, vấn đề cơ bản ở đây, như với các trò đùa về để lại một lưu ý, hoặc đặt một ổ khóa trên đó, là nếu hai người, hoặc hai chủ đề - nghĩ lại đầu - có thể kiểm tra trạng thái của một số biến và sau đó cố gắng thay đổi biến đó, nhưng hai điều này không xảy ra tại cùng một thời gian, nhưng có thể nhận được bị gián đoạn bởi những thứ khác xảy ra, dữ liệu có thể nhận được vào một trạng thái rất lạ. Và bạn có thể có lợi hoặc bạn có thể bị trong ý nghĩa của ví dụ tiền. Vì vậy, trong vấn đề thiết lập bảy, chúng tôi cung cấp cho bạn một dòng mã này, mà dài truyện ngắn, giải quyết điều này vấn đề trong MySQL. Này hướng dẫn rất dài mà không làm thậm chí phù hợp vào một dòng trên màn hình ở đây đảm bảo rằng hoạt động của bạn là những gì được gọi là nguyên tử. Tất cả xảy ra cùng một lúc, hoặc nó không xảy ra ở tất cả. Cụm từ rất lâu này có thể không nhận được gián đoạn một phần. Và những gì nó làm là theo nghĩa đen những gì nó nói. Chèn vào một số bảng sau ba lĩnh vực những giá trị cụ thể, nhưng trên khóa trùng lặp, không làm một chèn. Làm một bản cập nhật. Vì vậy, điều này giống như làm một SELECT và một INSERT vậy để nói chuyện cùng một lúc. Và chìa khóa đó có thể là những gì được gọi đến đây? Hóa ra, và bạn sẽ thấy điều này trong vấn đề thiết lập thông số bảy, bởi vì chúng tôi đã tuyên bố có được một chìa khóa duy nhất trên bàn đặc biệt này như vậy mà bạn không thể có nhiều hàng cho người sử dụng cùng với cùng một biểu tượng cổ phiếu penny - trong ví dụ này đây, là DVN.V một cổ phiếu penny ngớ ngẩn mà chúng ta tham khảo trong spec. Bởi vì chúng tôi đã tuyên bố nó là duy nhất, điều này có nghĩa là nếu bạn cố gắng để chèn một hàng trùng lặp, bạn thay vào đó sẽ cập nhật nó mà không bất cứ ai khác có một cơ hội để thay đổi trạng thái của thế giới hai. Vì vậy, trong ngắn hạn, điều này đảm bảo điều này là nguyên tử. Nói chung, mặc dù cơ sở dữ liệu như MySQL - và bạn không cần tính năng này cho p thiết lập bảy, nhưng giữ nó trong tâm trí cho tương lai - hỗ trợ những gì được gọi là giao dịch, nơi bạn có thể nói BẮT ĐẦU GIAO DỊCH nghĩa đen. Sau đó bạn có thể thực hiện hai câu lệnh SQL. Và một câu lệnh SQL, như bạn sẽ thấy trong p-thiết lập bảy, trông hơi một cái gì đó như thế này. Cập nhật một bảng gọi là tài khoản. Thiết lập các cột cân bằng bất cứ điều gì cột cân bằng hiện nay là âm 1000 mà số lượng, số tài khoản, như ID của người dùng, bằng 2, và sau đó cập nhật tài khoản dot dot dot. Vì vậy, trong điều khoản của layman, những gì hai truy vấn dường như đang làm trong cảm giác thế giới thực của ngân hàng? ĐỐI TƯỢNG: Chuyển đến tiết kiệm. DAVID Malan: Chính xác. Chuyển tiền từ một chiếm đến khác. Và đây là một ví dụ khác, nơi bạn thực sự muốn hai điều này xảy ra hoặc không xảy ra. Bạn không muốn một cái gì đó để có được trong giữa chúng và có khả năng gây rối các môn toán, hoặc mess up bao nhiêu tiền bạn có, hoặc có bao nhiêu tiền ngân hàng có. Vì vậy, những gì thực sự tốt đẹp về giao dịch trong MySQL là, và cơ sở dữ liệu nói chung, là họ và những người thông minh, những người đã thực hiện các tính năng tìm ra cách để làm cho chắc chắn rằng cả hai điều xảy ra hoặc không gì cả. Và nếu bạn đang thực sự khát vọng biến một trang web mà được sử dụng bởi những người trên khuôn viên trường, mọi người trong thế giới thực, làm một cái gì đó trong ý nghĩa khởi động, đây là những loại quyết định thiết kế càng trở nên quan trọng như vậy. Nếu không, bạn bắt đầu để mất dữ liệu, bị mất người sử dụng, hoặc trong trường hợp xấu nhất như chúng tôi đã nhìn thấy ở đây, có khả năng bị mất tiền. Vì vậy, một lần nữa, thêm vào đó trong vấn đề thiết lập bảy, cũng như có thể cho một số bạn trong dự án cuối cùng. Vì vậy, hãy thay đổi điều đó chúng tôi đã có hình ảnh một thời điểm trước đây chỉ trong một trong nhiều cách. Vì vậy, hãy để tôi thực sự thấy nếu tôi có thể - nope, đó là đi. Có nó được. Vì vậy, đây là nơi mà chúng ta để lại thời gian qua. Và hóa ra chúng ta sẽ quăng một điều nữa vào hỗn hợp ở đây - một ngôn ngữ được gọi là JavaScript. Vì vậy, JavaScript thực sự phù hợp thành phần này - và tôi không khá chừa đủ chỗ, vì vậy đây không phải là bây giờ theo quy mô. OK, điều này thực sự là thảm hại. OK, vì vậy đó là JavaScript. Được rồi. Tôi đang thực sự làm việc đó một tai hại. Được rồi. Vì vậy, JavaScript là lập trình khác ngôn ngữ, và cuối cùng chúng tôi, Nếu giúp trấn an rằng không có nhiều hơn của vòi phun chữa cháy ở đây. Vì vậy, JavaScript cũng là một giải thích ngôn ngữ, có nghĩa là bạn không biên dịch nó thành số không và những người thân. Bạn chỉ cần chạy nó. Nhưng những gì cơ bản khác nhau với JavaScript thường là bạn không chạy nó trên máy chủ web của bạn. Nó không được chạy trong thiết bị cho mỗi gia nhập. Thay vào đó, nó được tải về bởi người dùng thông qua vào trình duyệt của họ HTTP - Chrome, Safari, Internet Explorer, Firefox, bất cứ điều gì - và đó là trình duyệt mà thực hiện điều này ngôn ngữ lập trình cụ thể. Vì vậy, để được rõ ràng, PHP vậy, đến nay đã được thực hiện vào lúc hoặc dòng lệnh trong cửa sổ màu đen và trắng của chúng tôi, trên một máy chủ như các thiết bị, máy tính thích thiết bị, hoặc nó được thực hiện bởi một máy chủ web chạy trên một máy tính. Nhưng chủ đề ở đây là PHP mà cho đến nay đã được thực hiện phía máy chủ, vì vậy người sử dụng và trình duyệt của người dùng không bao giờ nhìn thấy một dòng mã PHP. Trong thực tế, nếu bạn mở một trình duyệt cho trang web này hay cách khác của bạn và bạn thực sự thấy mã PHP trong cửa sổ của bạn, ai đó đã hơi say lên. Bởi vì nó không có nghĩa là phải gửi đến một trình duyệt trực tiếp. Nó phải được thực hiện và quay vào một cái gì đó giống như HTML. Nhưng JavaScript cơ bản là ngược lại. Nó có nghĩa là để được chạy thường bên trong của cửa sổ trình duyệt của người dùng. Và những gì các loại trang web sử dụng JavaScript sau đó những ngày này? Như nghĩa đen mỗi trang web phổ biến. Tất cả các website mà các bạn có thể sử dụng hàng ngày sử dụng JavaScript cho đơn giản và thậm chí cả tính năng gợi cảm nhất. Vì vậy, một cái gì đó như Facebook Trò chuyện nếu bạn sử dụng. Làm thế nào mà thực sự làm việc? Cũng vậy, đến nay, tất cả những thứ chúng tôi đã thực hiện với HTML và PHP giả định rằng bạn kéo lên một URL, và bạn nhấn Enter, và bạn thấy một số nội dung HTML. Và kích vào liên kết, làm thay đổi URL, thay đổi trang, và tải lại một số nội dung mới. Nhấp vào URL khác hoặc gửi một mẫu, bạn được gạt sang một trang khác và bạn nhìn thấy một số nội dung mới. Nhưng sử dụng một cái gì đó như Facebook Chat, hoặc Gchat, hay Google Maps, hiếm khi không làm mới toàn bộ trang như vậy mà bạn sẽ thấy một màn hình trắng trong giây lát và sau đó nội dung mới. Thay vào đó, các trang web hiện nay là tự động nhận được cập nhật một lần nữa và một lần nữa và một lần nữa tất cả các loại của đằng sau hậu trường. Và nó chỉ ra rằng khi bạn đi đến một cái gì đó như Facebook, hoặc Gchat, hay Gmail, và các bản cập nhật trang tự động mà không cần tải lại toàn bộ màn hình, những gì đang xảy ra là Trình duyệt của bạn đã có những loại bí mật yêu cầu HTTP bổ sung - không cho các trang web toàn bộ, nhưng chỉ dành cho khối nhỏ của dữ liệu, giống như tin nhắn ngay lập tức mà bạn của bạn chỉ gửi cho bạn, hoặc các cập nhật trạng thái một người nào đó chỉ gửi cho bạn, hoặc các tweet rằng một người nào đó chỉ cần gửi. Nó chỉ làm cho các yêu cầu nhỏ cho dữ liệu, và sau đó sử dụng JavaScript, điều này ngôn ngữ lập trình, thay đổi những gì các trang web trông giống như không có sự máy chủ giúp đỡ, mà không cần máy chủ tạo ra HTML. Vì vậy, trong ngắn hạn, JavaScript có thể được sử dụng sau đó không chỉ lấy dữ liệu mới từ các máy chủ mà không cần tải lại toàn bộ trang hoặc nộp một mẫu đơn. Nó cũng có thể được sử dụng để thay đổi cái gọi là DOM - đối tượng tài liệu mô hình - đó chỉ là cách ưa thích cho nói rằng cây của HTML mà chúng ta đã thấy thời gian qua. Vì vậy, để trấn an, JavaScript cú pháp rất giống với C là tốt. Không có chức năng chính. Bạn chỉ cần bắt đầu viết mã và nó sẽ được thực hiện, hoặc giải thích đúng hơn. Điều kiện sẽ như thế này. Không khác C hoặc PHP cho rằng vấn đề. Biểu thức boolean hoặc-ed cùng sẽ như thế này. ANDed với nhau như thế này. Thiết bị chuyển mạch sẽ như thế này. Cho các vòng sẽ như thế này. Trong khi vòng sẽ như thế này. Làm trong khi vòng sẽ như thế này. Này là mới. Vì vậy, JavaScript không có một foreach xây dựng cho mỗi gia nhập, nhưng cấu trúc này cho biến i trong mảng, và tôi trong này trường hợp trở thành một giá trị chỉ số. Vì vậy, nó là một chút khác biệt so với foreach, mặc dù phiên bản mới của JavaScript được sắp ra tất cả các thời gian, vì vậy ngay cả các tính năng ngôn ngữ đang phát triển. Và như một sang một bên, JavaScript những ngày này cũng có thể được sử dụng trên một máy chủ giống như PHP sử dụng một khuôn khổ gọi là Node.js. Một trong CS50 của TF, Kevin, đã dẫn đầu một hội thảo về Node.js đó là có sẵn tại cs50.net/seminars. Vì vậy, nếu bạn tò mò, biết rằng bạn có thể sử dụng ở phía máy chủ như tốt, nhưng đó là một xu hướng khá gần đây, nhưng một mạnh mẽ tại đó. Đây là một chút khác nhau. Đây là một mảng trong JavaScript. Và những gì cuộc đình bạn như khác nhau so với C hoặc PHP? Có một vài câu chuyện nhanh chóng chúng ta có thể nói đây. Những gì còn thiếu so với PHP? ĐỐI TƯỢNG: [nghe được]. DAVID Malan: Có? Xin lỗi, nói một lần nữa? ĐỐI TƯỢNG: Không khai báo kiểu của biến. DAVID Malan: Chúng tôi không tuyên bố kiểu của biến. Vì vậy, thực sự khá giống như PHP, chúng tôi không quy định cụ thể các loại của biến này. Thay vào đó, chúng tôi tổng quát hơn nói var cho biến. Chúng tôi không có phiền toái của PHP ký hiệu đô la, trong khi đó tẻ nhạt để loại, không làm cho rõ ràng hơn một cái gì đó là một biến. Trong khi ở đây, chúng tôi loại trở lại Cách tiếp cận C bằng cách chỉ gọi một biến bằng tên chúng tôi muốn để cung cấp cho nó, giống như các con số. Và cũng như PHP, chúng tôi có dấu ngoặc vuông cho giá trị trong mảng đó. Vì vậy, các biến trong JavaScript cũng có thể trông như thế này. Nhận thấy đây là một chuỗi gọi là s, nhưng tương tự như chúng ta không có quy định rằng đó là một chuỗi. Ở đây mặc dù là một tính năng mà không làm tồn tại trong chính xác cùng một cách trong PHP, nhưng một chút tương tự. Đây là một đối tượng trong JavaScript. Và các đối tượng là loại quân đội Thụy Sĩ Con dao của một cấu trúc dữ liệu trong đó bạn có thể sử dụng chúng cho bất kỳ số lượng của sự vật. Ở đây, ví dụ, chúng tôi tuyên bố một biến gọi là báo giá. Các loại biến là một đối tượng. Bạn có thể nghĩ về điều này như một cấu trúc C có khóa và giá trị. Biểu tượng là một chìa khóa. FB là một giá trị, rõ ràng một biểu tượng cổ phiếu. Dấu phẩy. Giá là chìa khóa khác, và giá trị của nó là rõ ràng là một dấu chấm, hoặc một số nói chung trong JavaScript, của $ 49,26. Vì vậy, PHP không có - chúng tôi đã không nhìn thấy trong các đối tượng PHP khá như thế này, nhưng chúng tôi đã nhìn thấy một tương tự, đó là những gì? ĐỐI TƯỢNG: [nghe được]. DAVID Malan: mảng kết hợp. Vì vậy, trong khi PHP có mảng kết hợp có cú pháp là bao giờ một chút để khác nhau - chúng ta đã thấy các dấu ngoặc vuông. Chúng ta đã thấy các mũi tên ký hiệu lạ. JavaScript có các đối tượng, nhưng đây là chủ yếu là một sự khác biệt ngữ nghĩa và từ đồng nghĩa khác nhau cho bây giờ. Tuy nhiên, như một sang một bên, PHP cũng có các đối tượng trong một cách mà Java và khác ngôn ngữ có các đối tượng trong lập trình hướng đối tượng. Nhưng chúng tôi sẽ sử dụng các chỉ với nhiều loại dữ liệu cho bây giờ. Đối tượng và mảng kết hợp. Điều này có thể làm cho nó nhiều hơn một chút rõ ràng. Đây là lý do tại sao một đối tượng là hữu ích. Khi bạn muốn khai báo một sinh viên, như Zamyla, chúng ta có thể thực sự đóng gói có thể nói bên trong đó đối tượng sử dụng dấu ngoặc nhọn giống như trước khi một bó toàn bộ phím và các giá trị ở đây. Chúng tôi có một ID, một ngôi nhà, và một tên cho Zamyla, theo sau là một dấu chấm phẩy như thông thường ở cuối. Xuống ở đây, điều này là hơi khác nhau, nhưng cũng rất mạnh mẽ những ngày này. Dưới đây là một mảng, và tôi biết rằng vì có một khung vuông lên đầu và một khung vuông ở phía dưới. Và điều này là một mảng của những dữ liệu gõ rõ ràng trong JavaScript? Đây là một mảng của nó trông như ba đối tượng. Và tôi biết nó là một đối tượng duy nhất vì các dấu ngoặc nhọn. Và thông báo có mở xoăn cú đúp, một số công cụ, gần xoăn đôi, dấu phẩy, sau đó một số chi tiết, dấu phẩy, và sau đó một số chi tiết. Vì vậy, đó là ba đối số ngăn cách bởi hai dấu phẩy. Vì vậy, đây là một mảng của ba đối tượng. Và mỗi người trong số các đối tượng xuất hiện để được một sinh viên hay nhân viên của một số sắp xếp, đều có một ID, nhà, và tên. Nhưng tôi đã được gọi là một cái gì đó gọi là JSON - JavaScript Object Notation. Và điều này là một định dạng dữ liệu thực sự như vậy là rất phổ biến và trong thịnh hành trong những ngày này nếu bạn viết một ứng dụng sử dụng Facebook API, API Twitter, thực sự gần như bất kỳ API ra có những ngày, bao gồm cả một số của riêng CS50, sự dữ liệu bạn nhận được trở lại không phải là trong định dạng CSV trường học cũ. Vì hồi đó CSV là siêu đơn giản. Nó chỉ là cột phân cách bằng dấu phẩy. JSON dữ liệu cung cấp cho bạn siêu dữ liệu hơn. Nó liên kết một phím với mỗi giá trị để họ không phải chỉ là giả định rằng cột thứ không là một giá trị, cột một là một, hai là cột khác. Tất cả mọi thứ trong một đối tượng JSON đây là loại tự mô tả, bởi vì mỗi một trong những tên trong tập tin này có nghĩa là tên ở phía trước của nó như là một trích dẫn chuỗi. Vì vậy, chúng ta hãy xem xét một vài ví dụ ở đây. Hãy để tôi đi vào thiết bị. Và để cho tôi đi vào vhost của chúng tôi thư mục thành công. Và để cho tôi đi vào Thư mục JavaScript. Và chúng ta hãy đi trước và mở ra dom-0.html, nơi mà chỉ có nghĩa là DOM mô hình đối tượng tài liệu. Đó là những thứ cây mà Tôi đề cập trước đó. Và cho tôi đề nghị sau đây. Dưới đây là một trang web có cơ thể là khá đơn giản. Vì vậy, ở đây ở phía dưới, nhận thấy tôi có một hình thức. Chúng tôi đã nhìn thấy những người trước. Nó có hai đầu vào, trong đó có một ID của tên, một trong số đó có một loại trình, và là người đầu tiên một loại là văn bản. Vì vậy, đây thực sự âm thanh khá đơn giản. Chúng ta hãy đi đây. Chúng ta hãy quay trở lại trang này ở đây. Chúng ta hãy đi vào localhost, và đi vào thư mục JavaScript của chúng tôi, và đi đến dom-0, và ở đây chúng tôi có hình thức này. Vì vậy, đó là rõ ràng tất cả các trang này không. Nó có một trường tên với một nút Submit. Nhưng tôi sẽ không sử dụng PHP đây. Tôi sẽ làm tất cả mọi thứ phía khách hàng có thể nói trong JavaScript như sau. Nhận thấy rằng tôi đã thực sự được đặt tên lĩnh vực đầu vào độc đáo nhận dạng, trong đó sẽ thực sự tiết kiệm cho tôi một số thời gian trong một thời điểm. Và thông báo tôi đã giới thiệu một thẻ khác trong phần đầu của trang web của tôi,  tag. Vì vậy, trong ý nghĩa này mà JavaScript là một ngôn ngữ lập trình phía máy khách. Trong trường hợp này, giống như CSS, tôi đã đặt nó vào thẳng bên trong của HTML của tôi. Nhưng nhận thấy tôi đã tuyên bố một chức năng trông hơi giống như PHP cú pháp, nhưng điều này thực sự JavaScript, bởi vì một lần nữa, đó là khách hàng bên trong trình duyệt. Và hãy đoán xem điều này sẽ làm, cho dù một số cú pháp đây là mới. ĐỐI TƯỢNG: Chào hỏi bất cứ ai. DAVID Malan: Nó sẽ nói lời chào với bất cứ ai truy cập trang này. Vậy làm thế nào? Vì vậy, thông báo, hóa ra trong JavaScript có một chức năng cảnh báo (). Đây là một loại rất chức năng buồn thực sự chỉ có xu hướng làm phiền người sử dụng. Nó không phải là một trong những bạn thực sự nên sử dụng thường, nhưng đó là một nhanh chóng và bẩn cách loại in một cái gì đó để một người dùng đồ họa giao diện, giống như một trình duyệt. Chú ý ở đây là tôi đã có một chuỗi trong dấu nháy đơn. Nó chỉ ra rằng không giống như C, JavaScript có thể thực sự có bạn sử dụng duy nhất dấu ngoặc kép, và thẳng thắn mà nói nó chỉ là loại Công ước phong cách trong Lập trình JavaScript sử dụng dấu nháy đơn. PHP, họ thực sự có một chút ý nghĩa khác nhau. Nhưng bây giờ, chỉ biết rằng đó là lý do duy nhất. Quy ước trong JavaScript thường là sử dụng dấu ngoặc đơn, nhưng chúng ta có thể sử dụng dấu ngoặc kép ở cả hai nơi là tốt. Vì vậy, đây là thú vị. Nhớ lại lần cuối cùng chúng tôi đã có hình ảnh trên màn hình đã vẽ một cây nơi bạn có nút HTML, và nút đầu và nút cơ thể, và sau đó một số văn bản. Nhưng có một nút đặc biệt ở trên cùng mà tôi gọi là tài liệu. Vâng, nó quay ra trong JavaScript, bất kỳ khi bạn viết một chương trình trong JavaScript trong một trình duyệt, bạn có thể truy cập một biến toàn cầu đặc biệt. Tinh thần tương tự superglobals PHP, này được gọi là trong tất cả các tài liệu chữ thường. Nó giống như một cấu trúc, nhưng cấu trúc này cũng có chức năng bên trong của nó. Vì vậy, một cấu trúc C chỉ có dữ liệu thông thường. Nhưng một đối tượng JavaScript như này về mặt kỹ thuật cũng có nhiều chức năng, hay còn gọi là phương pháp, bên trong của nó. Và bạn có thể gọi một chức năng bên trong của đối tượng này theo đúng nghĩa đen của nó làm tên, dấu chấm, và sau đó là tên của chức năng, hoặc một lần nữa phương pháp. Nó chỉ là một từ đồng nghĩa, thực sự. Và những gì hiện chức năng này làm gì? Bạn có thể loại đoán từ tên của nó. Có được yếu tố của ID. Vì vậy, đây sẽ tìm kiếm các trang web, Tìm kiếm cây, tìm kiếm bất cứ nút, phần tử AKA, có một ID duy nhất của quote tên unquote. Và sau đó những gì tôi sẽ làm gì? Tôi sẽ nhận được giá trị bên trong mà nút trong cây, và tôi sẽ bằng cách nào đó nói lời chào với tên đó. Vì vậy, có nhiều phán đoán, mặc dù chúng tôi đã không nhìn thấy điều này chưa, những gì cộng biểu tượng có nghĩa là ở đây và ở đây có thể? ĐỐI TƯỢNG: nối. DAVID Malan: nối. Phải, và đây là những chỉ loại quyết định thiết kế người thực hiện năm trước. Trong PHP, bạn nối điều với dấu chấm. Trong C, bạn nhảy qua một số hoops và gọi chức năng như strcopy () hoặc strcat () hoặc các chức năng khác. Nhưng trong JavaScript, bạn sử dụng dấu cộng. Vì vậy, đây chỉ là ghép ba dây - xin chào, một tên, và sau đó một dấu chấm than. Vì vậy, khi nào và tại sao chức năng này mặc dù được gọi là? Vâng, có một đoán từ HTML ở phía dưới. Tại sao chào đón () được gọi, hoặc khi nào? Rõ ràng, là tốt nhất tôi có thể nói, trên trình, khi gửi đơn đăng ký, Tôi sẽ làm bất cứ điều gì bên trong các dấu ngoặc kép. Và đặc biệt, tôi sẽ gọi chào () và sau đó trả về false. Vâng, chúng ta hãy xem những gì mạng hiệu quả đây là lần đầu tiên. Vì vậy, hãy để tôi đi trước và gõ trong, nói, Loren, Submit. Xin chào Loren. Chúng ta hãy xem nếu có thể đây chỉ là thực hiện một may mắn. Không. Vì vậy, nó gõ ra bất cứ điều gì tên tôi thực sự đặt ở đó. Nhưng hãy chú ý những gì không thay đổi. URL là vẫn dom-0.html. Không có register.php. Không có tập tin thứ hai. Không có thuộc tính hành động. Vì vậy, trở lại đây là những gì sai có lẽ đang làm gì? Tại sao tôi gọi chào hỏi () và sau đó trở về sai có thể? Những gì thường xảy ra khi bạn nhấp chuột Trình trên một hình thức mà ngay cả chúng ta có nhìn thấy trong tuần qua? ĐỐI TƯỢNG: [nghe được]. DAVID Malan: Nó đi đâu đó, phải không? Nó đi vào một số URL đích. Nhưng tôi không muốn điều đó xảy ra ở đây. Tôi muốn trang web của tôi để được hoàn toàn năng động như Gmail, nơi mà một khi bạn đã ở đó, bạn ở lại đó. URL không thay đổi trong một cách mà cho toàn bộ trang được tải lại. Thay vào đó, tôi chỉ muốn thay đổi một cái gì đó như in ra một cái gì đó đây trên màn hình. Cũng cho tôi làm sạch này lên một chút. Hãy để tôi mở ra không dom-0, nhưng hãy để tôi mở ra dom-2. Chỉ cần để bạn đã nhìn thấy một số cú pháp ở đây. Nó chỉ ra rằng những gì chúng ta chỉ đã được sử dụng JavaScript liệu. Vì vậy, đây thực sự là ngôn ngữ JavaScript. Một số bạn có thể biết một thư viện được gọi jQuery. Vì vậy, jQuery là không giống nhau điều như JavaScript. Nó chỉ là một thư viện mà một thực sự thông minh chàng trai đã viết và phổ biến rộng rãi như vậy mà hầu như tất cả mọi người trong thế giới hiện nay sử dụng jQuery khi sử dụng JavaScript. Và ở cái nhìn đầu tiên, trung thực, nó nhìn nhiều hơn một chút khó hiểu. Nhưng bạn sẽ tìm thấy, đặc biệt là nếu bạn đi có cho dự án cuối cùng của bạn với các trang web phát triển, bạn sẽ thấy rằng đây dọn dẹp những thứ lên và giúp bạn tiết kiệm khá vài dòng mã. Vì vậy, chúng ta hãy chỉ nhìn lướt qua như thế nào hình thức này là làm việc. Thông báo những gì đã làm tôi loại bỏ rõ ràng từ HTML của tôi? Không có trên trình xử lý vậy để nói chuyện. Không có thuộc tính. Bởi vì bạn biết, những gì Tôi không thực sự như thế nào? Tôi cảm thấy như chúng tôi đã giảm thành thói quen cũ có. Cũng giống như nó đã được bắt đầu cảm thấy cẩu thả để hoà nhập với cả CSS HTML, bởi vì bạn đang loại ném ngôn ngữ khác nhau trên tất cả các nơi, tương tự như đã làm điều này bắt đầu cảm thấy như một con đường xấu đi xuống nơi Tôi đang đặt mã JavaScript bên trong của tôi HTML chứ không phải thanh toán nó ra. Vì vậy, đó là bài học ở đây. Trong dom-2.html, tôi thanh toán nó ra. Và tôi đang làm những điều hơi khác nhau. Còn bây giờ, tôi sẽ vẫy tay của tôi vào những gì điều này thực sự bên dưới mui xe. Nhưng chỉ cho bây giờ cho rằng đó đầu tiên dòng mã trong thư viện này gọi là jQuery chỉ có nghĩa là khi tài liệu đã sẵn sàng, bạn làm như sau. Bởi vì các trang web có thể mất một số thời gian để tải. Bạn có thể có trên internet chậm kết nối, và nó có thể được quay và quay, và cuối cùng nó đã được nạp. Rằng dòng mã chỉ nói đợi cho đến khi toàn bộ trang đã sẵn sàng, các tài liệu đã sẵn sàng, trước khi thực hiện mã này. Và bây giờ thông báo, điều này có lẽ là người đầu tiên hữu ích nhất lấy đi từ jQuery. Dòng này ở đây là rất tương tự như trong tinh thần để dòng này còn nhiều ở đây. Trong khi đó, trong mã JavaScript liệu, có tồn tại một đối tượng toàn cầu tài liệu có một chức năng được gọi là getElementById (), những người đã viết jQuery đơn giản rằng chỉ cần nói ký hiệu đô la, và sau đó bên trong ngoặc đơn đặt hai dấu ngoặc kép, và sau đó đặt một biểu tượng băm tiếp theo ID duy nhất bạn muốn lấy. Vì vậy, điều này tương đương với document.getElementById. Trong khi đó,. Submit chỉ có nghĩa là trên nộp bất cứ hình thức bạn đề cập đến bên trái, đi trước và thực hiện điều này. Nhưng điều này bây giờ là sự tò mò quá. Có gì lạ về những gì Tôi đã nhấn mạnh đây? Không chỉ là loại cú pháp mới, cũng có một cái gì đó mất tích. ĐỐI TƯỢNG: Nó chỉ được gọi là chức năng? Nó không được gọi là cảnh báo? DAVID Malan: Vâng. Tốt, vì vậy cảnh báo () là xuống ở đây, để được công bằng. Nhưng không có đề cập đến một tên, như bạn đã biết, foo hoặc một cái gì đó ở đây. Và quả thực, đây là một trong những tính năng JavaScript đó là khá mạnh mẽ, nhưng cũng khá mới. Và PHP thực sự có điều này là tốt. Hãy để tôi đi trước và làm một cái gì đó thực sự nhanh chóng. Hãy để tôi đi trước và đặt này tại đây. Hãy để tôi làm điều này. Chức năng. Chúng ta hãy gọi xử lý này (). Một chức năng xử lý như vậy để nói chuyện. Một cái gì đó để xử lý một số hoạt động. Hãy để tôi làm sạch thụt đầu dòng của tôi. Và đặt này ở đây. Và đặt ở đây. Vâng. OK. Vì vậy, bây giờ tôi có một chức năng được gọi là xử lý () mà tôi không thực sự biết những gì nó được nêu ra. Nó chỉ còn có công cụ đó. Rất tiếc. Mất quá nhiều. Chúng ta hãy làm điều này. Được rồi. Xin lôi. Được rồi. Hãy để tôi làm điều này. OK. Điều đó có vẻ tốt đẹp và thẳng về phía trước ngay bây giờ. Hãy để tôi làm điều này. Làm điều này. Và OK. Vì vậy, bây giờ, chúng ta hãy đặt này trên đây. Không lập trình hơn khi đang bay. OK. Vì vậy, bây giờ, chúng ta hãy quay trở lại nơi câu chuyện bắt đầu. Trước đây, tôi cho rằng dòng này đây có nghĩa là khi tài liệu đã sẵn sàng, đi trước và làm điều này. Tôi phải làm gì muốn làm gì? Cũng đặc biệt, tôi muốn đi phía trước và làm như sau. Thực thi dòng mã này, và sau đó những gì tôi muốn bạn làm là gọi này hoạt động khi biểu mẫu được gửi. Bây giờ đây là điều thú vị. Đây không phải là chính nó một chức năng. Nhận thấy Tôi không đặt dấu ngoặc đơn đây theo cách thông thường. Tôi nghĩa đen đi qua một chức năng được gọi là xử lý () để hoạt động khác gọi là trình () như một đối số như mặc dù nó giống như một biến. Và điều này là một trong những tính năng của JavaScript là chức năng tự thực sự chỉ là các đối tượng. Trong thực tế, họ đang thực sự chỉ biến của một số loại. Và nếu tên của chức năng này là xử lý (), không có lý do tôi không thể vượt qua nó như một đối số ở đây. Và điều này có nghĩa là khi các hình thức với ID của demo gửi, gọi chức năng này. Nhưng bây giờ nếu tôi lùi lại tất cả điều này, tại sao lúc đó tôi mới có thể làm đây là một thời điểm trước đây? Vâng, đây là một chức năng vô danh. Bởi tôi nhận ra lý do tại sao tôi làm phiền để lãng phí thời gian khai báo một chức năng được gọi là xử lý () chỉ để gọi nó trong một và chỉ một nơi? Nếu tôi không cần tên, và tôi làm không cần phải gọi nó là nhiều hơn một nơi, chúng ta hãy thực hiện chức năng bên phải, nơi tôi cần nó. Và như vậy JavaScript và PHP hỗ trợ những gì được gọi là chức năng vô danh mà cho phép tôi làm chính xác điều đó đây. Nhưng chúng tôi chỉ trầy xước bề mặt. Hãy trêu chọc chỉ với một vài ví dụ cuối cùng ở đây. Nếu tôi đi vào quote.php. Chú ý rằng điều này thực sự là một PHP chức năng, một chương trình PHP, mà tôi đã viết mong đợi một tham số HTTP được gọi là biểu tượng, và tôi có thể vượt qua trong một giá trị như FB. Và nếu chúng ta thực sự nhìn vào mã nguồn mã, đây là truy vấn một trang web miễn phí gọi là Yahoo Finance, giống như p-bộ bảy, và nó trở về với tôi một cái gì đó trong dường như định dạng được gọi là JSON - JavaScript Object Notation. Nó chỉ là một đối tượng. Chú ý các dấu ngoặc nhọn, dấu ngoặc kép, đại tràng, và các dấu phẩy. Bây giờ trong khi đó, điều này là khá mát mẻ. Bởi vì tôi có thể có thể sử dụng một chương trình ngôn ngữ để tạo URL trông giống như này tự động, phải không? Tôi có thể thay đổi điều này để Google và lấy lại Google giá cổ phiếu của $ 1,017.55. Vì vậy, chúng ta hãy xem nếu chúng ta không có thể sử dụng ngay bây giờ. Cho tôi đi đến ajax-0 ở đây, mà trông giống như sau. Nó chỉ là một trang web có một hình thức với một nút bấm. Hãy để tôi ở đây đi trước và gõ vào YHOO cho biểu tượng cổ phiếu của Yahoo, nhấn Get Trích dẫn, và bây giờ thấy tôi đã nhận được một cảnh báo với 32.86. Hãy để tôi thực sự đi đến một phiên bản fancier của trang này, phiên bản hai, và loại trong chúng ta hãy nói rằng Microsoft, MSFT. Trích dẫn được. Và bây giờ nhận thấy, không có cảnh báo. Nhận thấy nơi nó nói giá được xác định? Có đơn giản nhất của ví dụ gợi ý vào những gì Gchat, và Facebook Trò chuyện, và Gmail, và như vậy khác các trang web đang làm bằng cách thực sự thay đổi trang web. Thông báo này. Hãy để tôi tải lại trang. Hãy để tôi mở ra thanh tra của Chrome. Hãy để tôi đi đến các yếu tố tab xuống đây. Bây giờ thông báo nếu tôi phóng to xuống đây và mở này lên, nhận thấy rằng đây là của tôi HTML DOM - mô hình đối tượng tài liệu của tôi. Đây là HTML của tôi. Nhưng bây giờ nhận thấy, mặc dù nó sẽ là một chút khó khăn để nhìn thấy nó trong cả hai nơi cùng một lúc, nếu tôi gõ vào FB lên đây, xem phía dưới của màn hình duy nhất. Nó thực sự thay đổi HTML của tôi đang bay. Và nó làm điều này khá đơn giản bằng cách làm một cái gì đó như thế này. Nếu tôi mở ra ajax-2, thông báo thực hiện một cái gì đó như là sexy như rằng, mặc dù nó đẹp, xấu xí, nhưng như tinh vi như chức năng, nó có một số HTML ở phía dưới. Nhưng nhận thấy tôi sử dụng để đánh dấu. Chúng tôi đã không sử dụng này trước đây, nhưng đây là như một, nhưng nó không có hiệu lực tất cả mọi thứ vào một dòng mới. Nó chỉ làm cho một khu vực hình chữ nhật trên cùng một dòng cơ bản. Nhận thấy rằng tôi đã cho nó một ID của giá. Và nó quay ra bằng cách sử dụng cùng Thư viện JavaScript, tôi có một chức năng gọi là quote () đó được gọi là bất cứ khi nào biểu mẫu được gửi. Và những gì tôi đang làm điều này là. Tôi khai báo một biến trong JavaScript được gọi là địa chỉ, tiết kiệm giá trị quote.php? biểu tượng =. Nói cách khác, bản thân tôi đang bắt đầu để chuẩn bị một yêu cầu HTTP, và sau đó Tôi ghép vào đó với một cộng bất cứ điều gì các phần tử với ID biểu tượng được, mà thông báo là lĩnh vực văn bản phải xuống đây. Vì vậy, cũng giống như chúng tôi đã có các hình thức trong quá khứ. Và sau đó nó quay ra trong jQuery, nếu bạn val gọi. (), mà các cuộc gọi của một val chức năng, một chức năng giá trị, mà được bất cứ điều gì người dùng đã đánh máy in Và sau đó tất cả các lưu lượng mạng điều đó xảy ra là điều này. GetJSON. $. Và như một sang một bên, ký hiệu đô la là chỉ là một ký hiệu viết tắt. Nó thực sự jQuery.getJSON. Làm cho tôi để JSON từ URL này, và khi yêu cầu trở lại, gọi đây chức năng và vượt qua trong như là đối số bất cứ điều gì trở về từ máy chủ. Vì vậy, nói cách khác, nếu tôi quay trở lại trình duyệt, và tôi trở lại quote.php, những gì trình duyệt của tôi đang làm là nhận được đoạn dữ liệu này. Và khi tôi đi đến trang web này ở đây, thông báo nếu chúng ta thay vì đi vào mạng tab và xóa nó, và sau đó gõ vào một cái gì đó như GOOG cho Google và Nhận Trích dẫn, thông báo trang không thay đổi. Nhưng một yêu cầu HTTP đã được thực hiện, và những gì trở lại đây nếu chúng ta nhìn vào phản ứng là một bó toàn bộ các JSON mà chúng ta truy cập cuối cùng với dòng đơn giản này ở đây. Dữ liệu là những gì đã nhận được từ máy chủ. Giá là tên của chính tôi quan tâm. Vì vậy, data.price mang lại cho tôi đó. Bây giờ trong khi đó, và điều này là ví dụ mới nhất. Bạn có thể làm nhiều hơn với nhưng trang. Một thực sự, cũng hai. Chúng ta có thể mang lại thẻ, nếu bạn nhớ những điều này. Đó là JavaScript. Chúng ta có thể làm điều đó. Rất thú vị. Chúng tôi sẽ rời khỏi đó như là một cliffhanger. Nhưng sôi nổi hơn, bạn có thể làm những việc như thế này. Nếu tôi đi đến định vị-1, nó quay ra Chrome biết rằng chúng ta đang ở kinh độ vĩ độ 42.37. -71,10. Vì vậy, thậm chí có có hơn theo ý của bạn. Nhưng thêm vào đó trong tuần tới. Hẹn gặp lại thứ hai.