[音樂播放] DAVID MALAN:這是CS50,和 這是八週的開始。 而且我們很高興地歡迎 背,大驚喜,CS50自己的拉蒙 高爾文,上升資深誰一直 消費在過去的幾個月 自七月在洛杉磯,在好萊塢, 從字面上工作一個全新的電視 節目叫殖民地,它的創造者 實際上是一個哈佛大學的明礬自己。 所以,我們非常興奮地看到這一 首次亮相美國網絡今年一月上。 敬請關注這一點,對於 對於週更拉蒙來。 知道現在到底是近了。 而這是什麼意思是,有沒有 所有的東西離開了CS50的,痛心地說。 我們只有三個問題 套left--有 問題集six--這是在 你的手現在還是很快就會被, 由於稍後week--是為了彌補 我們在命令行中,其中世界 我們已經花費了我們大部分的時間用 C和Web編程的世界。 那麼,你會看到很多的想法 在命令行工作借來的, 但也有很多新的 而有趣的想法 這也將是有密切關係的 移動應用和技術, 更一般地,使用它 人都熟悉時下 在筆記本電腦和手機等。 所以,你將實現不 一個網頁,或網站 本身,而是實際的web服務器。 您將編寫一個Web服務器的其它部分 C語言編寫的,其目的在生活中 是接收的HTTP請求,那些 我們一直談論的虛擬信封 對了,居然無論是與回應 一些靜態內容 - 就像一個圓點的HTML 文件,或一點陣JPEG或 任何其他數量的文件, 甚至是PHP文件,由此您的Web 服務器將解釋該PHP 代碼和吐出的結果。 現在,我們為您提供 相當多的框架 對於它 - 確實 對於問題的分佈碼 組六超過1000行代碼,一個 很多這是註釋,是fair-- 但這實際上意味著 為契機 讓你的手臟跳水 到一個相當大的項目 我們已經非常明確 雕刻出件的你, 這樣真的,當你退出CS50和 進入編程的真實世界 並希望涉足 任何數量的項目, 你將有更大的 舒適下載一些源 代碼,一些開源 項目在網絡上, 和潛水,使 你認為合適的變化。 習題集七是將是關於 使自己的基於Web的應用程序 這需要動態輸入和 產生動力輸出形式 的etrade.com樣的網站。 而問題集8將集中在尚未 已知以JavaScript另一種語言。 同時,最終 項目是在地平線上。 所謂預提案 一個星期從今天到期。 按照規範的預proposal--, 這是對CS50的website-- 是一個很隨意的機會 你發送一個非常簡潔的電子郵件 你的助教 只是通知他 (她),你在想什麼, 用他或她作為一個傳聲筒。 而有理智check-- 不管你是想 關於貪得 太多或者太少, 也許你無論如何也沒辦法 並希望與其進行通話。 其後是一個建議 和狀態報告, 所謂CS50這裡在黑客馬拉松 劍橋哈佛和耶魯大學的學生 一致好評。 最後一個項目的 實現是那麼所致。 然後這裡CS50公平,在劍橋, 還有另外一個在紐黑文。 所以建議,看看 該網站的詳情。 但更令人興奮的,也同樣是一個 機會,讓你的手臟, 和你的頭腦開放給整個 一堆的主題和工具 和技術,是輔助 該課程的核心教學大綱, 但仍然相關。 而同樣精彩墊腳石 這樣做很酷的最終項目 遠遠超出了我們的材料已經覆蓋 正式的問題在課堂上設置或。 所以去CS50的網站 研討會整個花名冊。 如果你還沒有註冊,這很好。 來吧,註冊仍然和我們將 跟進直播流媒體鏈接, 的日期和時間是在網站上。 所有的一切都將是 記錄下來,放到網上 如果你不能使 特別的日期和時間。 至於什麼樣的未來thereafter--好, 當然,還有的CS50黑客馬拉松。 這張照片,回憶,從零一周拍攝 凌晨4點左右的一個晚上在過去的幾年。 該CS50公平,這再次 將在這兩個城市。 然後,只需廠 種子,儘管我們仍然 有一個月加左學期,如果 你想加入CS50自己的教學 工作人員,並且要開始 想成為一個CA, 或教學老鄉,知道 我們將開始談論更多關於 後來這個學期。 但圖為 今年大部分時間的球隊。 因此,PHP--我很傷心 上週[? Allyse?]好心 去得到的努力 我們這些精彩的道具 我沒有使用結束,所以 真的只是看上去有點傻 我們有一個鐵鍬坐在這裡所有 日上週三,和一個小勺子。 但是,這是我的隱喻 試圖描繪方式 為什麼我們過渡的圖片 從C到PHP之類的語言。 並且同樣可以的任何所述 languages​​--的Java,Python和Ruby的數量 的others--但而在或串 C,比如,編寫C語言程序 通常可能是這樣 採取這樣的勺子 而挖的一個洞 地面上,在沙或污物。 PHP可以讓你花費太多 大咬出了問題, 編寫更少的代碼 用小得多的工具, 因為有這麼多 功能拼湊研究。 現在,如果我們真的是戲劇性的, 我們不得不有所鏟 在這裡,但就這樣吧。 同時,其它 比喻,我們想出了 是的,當然,你可以 使用類似扳手 錘的東西都像釘子。 不過,當然,合適的 使用的工具是怎麼回事 是沒有這麼多的 所謂的語言C-- 現在我只是生氣 [?桑德斯?]也許, 我們將解決這個問題later--如此 正確的工具經常使用 是不會被 這種最低水平的工具。 事實上,C是不是一種語言, 你們中的大多數都曾經打算使用, 還是應該必然再次使用。 而事實上,一個小 secret--唯一一次 我用C自己之間幾乎 每一個秋天的九月和十二月 學期。 那是因為我們 以此為契機 教基本面 編程, 並與它的計算機 科學的基本原理,數據 結構,算法和 like--但很快會把你 現在看到的語法 和思想基礎C 如此奇妙 轉移到更現代的 更高層次的語言,如 PHP和Python和Perl和Java 和Objective-C--其實,與其說 目的-C--但斯威夫特,這些新 語言是很多人都會 然後涉足與你最後的項目。 因此,事不宜遲,讓我們真正 使用PHP來解決一些問題。 回想一下,在年初,去年 本週,我們只是用CS50 IDE, 我們寫了一個極小的小程序 只是說,“世界,你好。” 然後我救了它 稱為文件hello.php。 然後我跑了這個命令。 為什麼? 在英語中,這是怎麼回事嗎? 什麼是我在做的時候 我跑這個命令? 是嗎? 聽眾:有一些功能PHP 讀什麼in--明白這一點。 DAVID馬蘭:好,有一些功能 PHP--,讓我更具體, 有一個名為PHP程序,又名 一個解釋,那理解 hello.php的內容, 和頂部解釋它 底部,左到右, 然後做了這些命令說。 當然,在hello.php的命令, 僅僅是源代碼 - 功能 和變量和循環和 等等,我們自己 已經開始使用PHP編寫。 但不同於C,這是 編譯語言, PHP你只寫它,並運行它。 你跳過了中間商的步驟 將其轉換為0和1 然後運行它。 還等什麼是這種積極的一面? 為什麼我們省略這一步? 為什麼做更多的現代語言 往往會忽略這一步呢? 是什麼好處? 或者只是直覺? 即使我們還沒有 之前寫太多PHP, 什麼是有益的關於不 編譯代碼,你覺得呢? 沒有? 不承諾? 抓你的頭? 是啊。 聽眾:更有活力。 DAVID馬蘭:更多的活力呢? 什麼意思? 聽眾:[聽不清] DAVID馬蘭:OK,好,所以 取決於輸入, 你不必每次都進行編譯。 它真的是為 簡單that--什麼 繼續點 編譯代碼? 這僅僅是一個步驟中的 making--這是需要, 在過去的幾 週,兩倍的步驟 作為剛剛運行您的程序。 它是有益的看到你 看到一些錯誤信息等等, 但它仍然只是一個惱人的一步。 所以程序員實現 隨著時間的推移,我們為什麼不 開始編寫語言的不 需要一個相當機械的步驟, 這樣就可以只寫 你的代碼並運行它。 但究竟是什麼價格 我們看到,我們付出 上週,有一個具體的例子? 是嗎? 速度。 所以,[?什麼?]口譯 慢一點, 在零和一的 很好,速度很快的電腦 要了解,因為 Intel的CPU,或不管它是什麼, 只是明白這是怎麼回事 與這些位模式。 而一名翻譯 是一個程序,真的 有讀取ASCII源 您所編寫的代碼, 並將其轉換,可以這麼說,或者 弄清楚如何將它轉換最終 到零和一。 因此,它只是需要一點點 一個性能命中位。 所以這是一個有點折衷。 現在,如果我們做到這一點在這裡,讓我 繼續前進,做一個舉例如下。 如果我走在這裡,新的文件,我要去 再次保存,這是hello.php。 現在我要繼續前進 並說,“印刷世界你好” - 和回憶,我可以使用打印,我不 必須使用打印-F。而現在到這裡, 如果我做hello.php的PHP,huh--我 似乎沒有不同的方式解釋它。 我做了什麼錯? 聽眾:有角度的手鐲。 DAVID馬蘭:是的,你需要 這個角度支架往上頂。 因此,它是一種惱人的,但 你習慣它很快。 如果我有寫PHP代碼,我 一般需要告訴程序, 或者告訴解釋,嘿嘿 PHP,這裡涉及一些PHP代碼。 然後,良好的措施,我想 關閉此與此,而是 只有問號角 支架,以至於現在到這裡, 如果我跑這一次,現在 我獲得所需的結果。 現在,讓我們做一個輕微的優化, 只是讓你以前見過它。 這是種討厭我 必須運行PHP空間hello.php, 因為在過去我 可以只寫點斜線 節目的名字,這是一種很好的。 它是一種更好的用戶體驗。 因此,原來你可以這樣做 與following--我的PHP 可以使用這個相當隱蔽 咒語在此處的頂部, 這一般被稱為認領, 因此,這是一個尖銳的象徵, 可以這麼說,這是一個爆炸 或感嘆號。 而現在這是通向一個程序 在一個典型的Linux系統, 被稱為環境,或包膜。 而這個line--漫長的故事 short--行一個剛 說,哎電腦,找到PHP 環境中的解釋對我來說, 發現它在你的記憶,可以這麼說。 什麼是好的,現在,是 如果我去到這裡, 我可以做點斜線 你好點PHP,or--哼。 權限被拒絕。 那麼,你會看到更多的這 有問題設置七,如果你 還沒有準備好,與權限。 事實證明,我需要 執行此命令 所謂的[? chamod?]變革 mode--一個X軸正hello.php。 我需要[聽不清]這一個額外的 步驟,告訴我的電腦, 使hello.php可執行文件。 而現在看什麼happens--點 斜線hello.php,它只是運行。 我並不需要指定 解釋了。 我可以讓它更漂亮, 不過,如果我重新命名這件事情。 如果我移動hello.php只 Hello--所以注意到在左上角, 該計劃的名稱是 實際上現在只是您好。 現在我可以使它看起來像一個C程序, 即使它寫在PHP-- 或者坦白任何數量 其它語言。 所以邊緣增強, 沒有功能差異。 但它只是一個小的好奇心 現在,這樣就可以編寫程序 在任何語言,而且用戶不 要知道或關心那些是什麼。 好吧,讓我們來看看一個更 現在引人注目的例子 我提前掀起了。 這就是所謂的quote.php。 而且它是可在網上。 並注意這是很short-- 但它是一個命令行程序,是 要查找股價 對我來說,這實際上是將 是有密切關係的問題設置七人。 所以,讓我們來看看我在做什麼。 在最上面我已經得到了 開放式支架問號PHP。 然後,我已經得到了這條線,因此我 需要一個名為functions.php--文件 我們將看到 更多關於這一點, 但是這是像C的 版犀利包括, 你想要去 包括另一個文件。 PHP稱它為要求,雖然它 也有一個包括功能。 而事實證明,function.php是 只是我在課前寫的。 我把它放在同一個目錄下,因為 我想分解出一些代碼 我們可能要在其他地方使用。 同時,你也許可以 推斷出是怎麼回事。 這是C--,但有一點不同 這是什麼意思通過確保正確使用? 技術上更翻譯此。 在什麼情況下我是 退出程序,或退出? 是嗎? 聽眾:當你不具備 兩個命令行參數。 DAVID馬蘭:如果我沒有 以命令行參數。 請記住,其中之一 參數是該程序的名稱本身。 和第二將是 一個字我提示符後鍵入。 所以就像C,這 是我的檢查方式, 沒有用戶合作, 運行該程序,因為我打算? 現在,有什麼東西 有一點不同 與C--首先我們 有這樣的美元符號, 什麼做一美元 簽署表示在PHP? 只是一個變量。 這是all--只是一個變量後跟 無論你想實際調用它。 請注意,有一些東西 從我的PHP程序缺失, 就像它缺少最後 本週,對C,這是什麼? A型,而且別的東西。 沒有東西 function--主要功能。 有沒有主要功能。 你剛開始寫 你的代碼,而不必 擔心一個比較隨意 命名一些默認的約定 功能為主。 所以ARG C是真的 一個全局變量 該解釋 使提供給我。 現在,這是有趣的。 所以查找的東西。 美元符號的股票是在 離開了,這是我的變量。 在右手側, 有明顯 在PHP中的函數調用查找的 我通過我的最後一個命令行 參數用於:不管這個詞。 我們將看到如何 工作在一個時刻。 然後最後我匯報的價格。 我打印一顆顆 份額如此這般。 請記住,這是 在PHP--在PHP--的方式方法 在這裡,你不必做 美元符號s了。 你可以只用花括號 並插入一些變量。 你不必擔心 用printf以同樣的方式。 而作為一個不談,當你把一個變量 雙引號像這裡面, 您使用的是看中技術 所謂的變量插值。 它只是意味著插上變量在這裡。 而作為一個拋開你,有的誰進來 從其他編程背景, 你可能不使用單引號 字串,做到這一點。 您必須使用雙引號 變量代換工作。 否則,你會從字面上 看到這些花括號。 所以,最後,讓我們繼續並運行此。 讓我做我的終端大些。 讓我繼續運行 在我引用的目錄。 [? CDsource?] [? AM?] [?報價?] PHP的報價點PHP, 而我要尋找的東西 就像歌,這是它的股票代碼, 和一個共享的新名稱, 字母表公司,花費$ 717到今天為止。 好吧,如果我們想 再次運行此,任何人 還有一個股票行情 他們想看看嗎? 微軟,我認為是 這其中,MSFT-- $ 53 我認為雅虎是可能的。 而Facebook是。 那麼,什麼是這個程序在做什麼? 魔術似乎被嵌入 在查找功能。 因此,讓我們快速瀏覽一下。 事實證明,不來 用PHP,它在functions.php中。 我們不會通過 這很詳細, 但注意的詞這裡 上functions.php--六線 我從字面上說功能。 我指定我的函數的名稱。 我然後指定任何 參數,或者參數, 我想這功能take--沒有類型。 然後,我實現它。 我會揮揮手 在實施中, 因為它是相當先進的右 現在,但我們會再次看到它實際上 在一個星期中的問題設置七人。 但我可以打掃一下了。 我也包括在 今天的代碼版本 的報價,其中有沒有點PHP文件。 因為什麼大概是在 所謂剛引用程序的頂部? 這所謂的shebang--的 相當神秘的咒語 上面寫著發現PHP,然後 在我的代碼運行在這裡。 好吧,這樣帶來的 我們的地方,我們離開 最後時間 - 儘管有 一些更高級的例子。 有任何疑問,迄今約 PHP還是我們在做什麼? No--所有權利。 是嗎? 聽眾:內 HTML文件,做你 - [?你呢?] [?只是打電話了嗎?] 一個[聽不清] PHP文件? DAVID馬蘭:好問題。 在網絡方面,我們是 從字面上即將過渡到, 你不使用所謂的 認領在頂部, 因為Web server--常 程序調用Apache或微軟 IIS,Internet信息服務器,或 任意數量的其他網絡服務器軟件, 知道,它認為,當 一個點的PHP文件,它 應在其上運行的解釋。 它不看那個第一行。 所以這第一行招 只是當你 寫命令行programs-- 我們不會做超的時候, 但它是我們的橋接方式 我們的C例子,現在我們的PHP。 因此,讓我們確實彌補這個世界 在命令行天下網絡 通過執行以下操作。 讓我繼續前進,繪製 在這裡只是一瞬間。 因此,如果我們有一個web服務器,或者更確切地說, 如果我們有我的筆記本電腦在這裡, 我就畫這樣的。 在這裡,我們有 互聯網以某種形式。 然後在這裡,我們有 在building--服務器 這是怎樣的互聯網 works--在這裡 與一些燈光,也許一台服務器。 什麼是真正回事 這兩個連接之間? 所以在這個建築是一個Web服務器。 這只是一台電腦 這在運行一些操作 系統 - 或許稱為自由軟件 阿帕奇,其中CS50 IDE運行。 所以,你可以實際 覺得這個建築 作為建設中 這CSt0 IDE存儲。 這就是所有你 帳戶,所有的你 擁有自己的Web服務器 運行時,所有的你 有自己獨特的網址, 當我們開始討論, 你會看到更多的在體育組六。 這裡是我的筆記本電腦的地方 其他在互聯網上。 因此,當我訪問一個網址屬於 對我來說,互聯網流量是怎麼回事 轉移到服務器,該服務器的 收到HTTP request-- 像獲得的index.html,它的 回复該網頁。 所以這是一般的範例。 而一切行動 到現在為止的今天,一切都 不僅是發生在 這座大樓的界限。 我用我的筆記本電腦,但 我是連接到CS50 IDE, 因此,所有這些程序我跑 是服務器,它本身的內部。 但現在,讓我們開始重新使用PHP 寫一些實際的程序 由網絡服務器提供。 而要做到這一點,我要去 到一大堆的例子 這裡介紹了這個想法。 因此,這是怎樣的一種奇特的方式 描述一個編程範例。 而事實上,當你退出CS50 或工作的最終項目, 或者採取一些後續 在類中,你會開始 地看到,天下 - 特別是已經長大了 與語言,如C 是超低level-- 意識到有更好 如何寫軟件。 有一定的 模式可以遵循, 整理文件的某些方面 和命名你的函數的方法, 使長話短說, 世界已經到來了 有一大堆縮寫詞 和名稱進行編程的方法。 這些都是你可以只使用技巧。 其中之一稱為MVC中, 對於模型視圖控制器。 而這僅僅是為 現在,一個過於複雜 的說你應該怎麼佈置方式 一個基於PHP的網站,在我們的例子。 你如何組織你的文件, 你如何安排你的邏輯, 的方式,可以更容易地 編寫更複雜的網站? 事實上,我們很快就會 那裡用對置7。 因此,在MVC的世界裡,你會 看到我們的代碼一般可以 被表徵為型號代碼, 或控制器的代碼,或查看代碼。 而我要去 過分簡單化它作為follows-- 所述控制器是 你的程序的大腦, 這其中所有的 有趣的邏輯發生。 所以,一切,我們已經 寫迄今在課堂上, 是一種像控制器 代碼 - 它的控制 你的程序,你的循環,你的 條件,你的函數 和變量和所有。 意見,現在,將是一個小 在幅材的世界更明顯。 視圖是美學 你的網站。 這就是用戶sees--的圖像, 在HTML表格,HTML標記,並且所有 這一點,所有的蓬鬆美感 東西並不難寫, 但僅僅是要生成什麼, 是所謂的觀點,美觀。 和型號,最終會 是數據庫stuff--這 我們將開始深入到這些 更本週三。 所以控制器是邏輯, 視圖是審美的東西, 和型號將是哪裡 我們保存我們的實際數據。 因此,讓我們看看這個更具體 用下面的例子。 我要進入我的目錄位置 今天的源代碼 - 所有這些都 可在網上。 而且我要進入零版本。 在這裡,is--讓我們叫它 的CS50的網站版本0。 沒有太多在這裡的。 這是一個非常簡單的網頁,是 可能使用什麼HTML tags--剛 從過去的例子猜? 那是什麼? H1--可能為大黑體 標題,這標誌向上頂,CS50。 而且是在玩什麼? 是嗎? 聽眾:無序列表。 DAVID馬蘭:無序列表中 - 所以 UL標籤,也許一對夫婦LI標籤。 如果你不記得這些, 老實說,這並不重要。 這些都是蓬鬆排序 HTML的實現細節 您快速查找 和你回來的路上。 我們將更多的精力放在編程 想法是多汁件。 那麼就讓我們來簡單 看HTML--的確 如果我打開查看源代碼在這裡,是啊, 這正是這裡發生了。 這裡有一個UL標記。 那裡面嵌套是LI標籤。 然後,我借來的網址 這裡實際的教學大綱。 然後在 lectures.php顯然是 另一個動態生成的頁面 這將不得不讓我們see--啊, 前兩週的講座。 所以有一周零一周,讓我們 看this--如果我查看網頁源代碼, 也超簡單。 這些都導致​​了兩頁 所謂week0.php和week1.php。 所以,現在考慮發生了什麼。 當我點擊week0.php,我的筆記本電腦 正在為week0.php請求。 Web服務器,也叫做CS50 IDE, 正在接收該虛擬包絡。 它看到一個消息 像,得到week0.php。 它然後解釋該文件中,頂 至底部,左到right--文件 所謂week0.php--和 吐出的結果。 所以此文件的內部, week0.php,必須 在生成控制器邏輯 這個HTML,我們將很快看到。 但現在,讓我點擊零一周, 現在我們有三,五, 現在我們有幻燈片 慢慢的從零一周。 你可能還記得 這從遙想當年。 所以,這就是這個網站是做什麼。 因此,讓我們考慮一下它是如何做這個。 我要去回 這裡的源代碼,在CS50 IDE, 我要去開拓的index.php。 在該文件的頂部 是一堆意見。 然後在該文件中的中間,它 事實證明,沒有PHP代碼任何責任。 因為如果你沒有任何的 開放式支架問號PHP標籤, 你可以自由地只是把HTML。 因為是PHP 解釋是應該做的, 是當它讀取該file-- 從上到下,左right-- 它只是解釋它看到的代碼 這些尖括號問號。 和其他任何它不 承認PHP,它只是吐出來。 而HTML是其中的東西 它只會吐了出來。 因此,這個文件可以有 被稱為index.html的, 但我命名的一切 點PHP的墊腳石。 Lectures.php--類似 給人留下深刻印象,它只是一些HTML。 Week0.php,同樣只是一些HTML。 但現在讓我們把對 眾所周知工程帽, 並考慮我們如何才能改善這一點。 這並不難做到這一點,但我種 中演化成複製和粘貼。 而事實上,如果我做兩個星期,你 知道我可能會做什麼? 我要去week1.php,我 要突出一切。 我要去複製,粘貼 到一個名為week2.php新的文件, 調整一些網址,以及我的路。 因此,基於我們所 可見在C中已經, 這感覺不對,希望。 複製,粘貼,很少正確的解決方案。 那我們可以開始 要怎樣才能提高呢? 機會在哪裡 為更好的設計? 到時候我去 8週,這是怎麼回事 是真的很煩人 如果我想改變 每一個的字體 我的網頁,或者如果我想 改變佈局的結構。 因此,哪來的機會 為更好的設計? 好吧,讓我們來看看什麼是 在所有這些文件的共享。 這裡有一個星期,這裡的一周 零,這裡的lectures.php, 這裡的index.php--什麼是相同的, 所不同的是,粗略地講, 在每個文件? 是嗎? 聽眾:[聽不清] DAVID馬蘭:好,好。 因此,有一種模式,當然,其中 每次我選擇我的演講, 我應該產生 非常相似漂亮的網頁。 所以,也許我可以利用 事實真是, 我們特意數值 索引我們的lectures-- 如果我可以把更多的 也就是說在你的答案。 什麼是唯一的,真的, 這為期一周的變化埃德蒙頓 讓我向下滾動,所​​以它是 大致處於同一place-- 所以這裡是零一周, 大致在頂部。 這裡是一個星期,週 零個,一個星期,零週。 OK,從字面上如果你知道 沒有任何程序, 這是現在就像一個 模式匹配遊戲。 那麼,有什麼不同呢? 是嗎? 聽眾:[聽不清] DAVID馬蘭:好,所以標題 是變化的,非常輕微。 零是怎麼回事,當然,一。 同樣的事情發生了,在H1標籤。 同時,我們也不太把它看成很容易, 因為URL是有點長。 但是,這些網址被稍微改變。 但是,什麼是沒有改變的是,敢跟我 說,大多數的page--的內容 HTML標記是相同的,頭部是 相同的,標題是幾乎相同的, 身是相同的,並 幾乎一切 是除了同一 這些小的調整。 那麼,如何才能去 一些保本了呢? 那麼,讓我提出確切 在未來的版本。 因此,這裡的一個版本,我有確切 相同的文件,以及其他幾個。 下面是index.php--即使 你從來沒見過的PHP之前, 那我可能做來解決這個 根據problem--你在這裡看到的? 是啊,是輕微的承諾? 沒有? 是的,去上。 聽眾:[聽不清] DAVID馬蘭:是的。 聽眾:[聽不清] DAVID馬蘭:我需要你 只是大聲一點說話。 聽眾:[聽不清] DAVID馬蘭:好,好。 我think--是 很難聽到你 - 但我 以為你在說什麼是 這是常見的往上頂的標籤, 那是常見的標籤 底部,現在已經被提取出來, 或降級哪些文件? header.php文件,footer.php-- 我們要去 做出一些調整,以 這些關注你只是 提出了關於數字變化,為 舉例來說,如果我沒有聽說你。 但是,這似乎是它的要點。 如果有大量的 冗餘的頁面的頂部, 且數額巨大的 冗餘底部, 讓我們從字面上只是亮點 切的內容了, 把它放在一個單獨的file--就像 CSS中,我們提取出來的想法 非常相似的美學,把 它在一個單獨的點PHP文件, 使用需要mechanism--這 是像C銳利包括 - 這 基本上好像是說去 抓住的header.php的內容, 和複製並粘貼到這裡。 但是,這意味著什麼,現在在 的index.php,我有這兩條線。 在lectures.php,我也 有那些兩行。 在week0.php,我也 有那些兩行。 所以,現在,如果我想改變 我的所有網頁的標題, 或者我想改變 基本結構, 我可以在一個地方,現在改變它, 兩places--頁眉和頁腳, 分別。 現在代碼的開始看 多了幾分神秘,對吧? 但是,如果你想想頁面 是doing--如果我請求week0.php, 就像在畫過 當week0.php要求這裡 - , 這是什麼意思? 從字面上看,這個文件是 由瀏覽器請求。 該網站server--又名 CS50 ID--抓住這個 文件,week0.php,並讀出 它從上到下,從左到右。 線之一,它立即遭遇 開放式支架問號PHP,需要 頭點PHP,等等 什麼PHP解釋器 does--是內置於網絡 服務器,因為我們預先配置 它為你 - 它會自動進入 成的header.php,複製的內容, 在這裡它們粘貼。 但隨後的解釋遭遇 問號密切支架, 所以這一切都做了思考。 現在,它只是盲目地吐出 出線路2至7, 因為它只是原始的HTML。 獲取到線八條,並做了 同樣神奇的again--打開文件, 斂的內容,並 要求他們或者將其粘貼 那麼好吧或出現。 但我只是提到了一個錯誤。 這是一個局部的退步, 因為如果我們看在header.php中, 那種我剪了一個角落。 我才給什麼功能了,為了 獲得這一有爭議的更好的設計? 是嗎? 聽眾:[聽不清] DAVID馬蘭:是啊,我種 切一個平凡的角落。 你指出什麼改變 是標題,在標題的數量, 並在H1的數目。 所以我的解決辦法是,OK, 讓我們只重命名頁面, 並沒有涉及這 遇到任何問題。 所以這是一個局部 倒退是肯定的。 但是,這裡值得注意的是 是,我做了什麼 另有因素 所有常見的東西。 而在footer.php,通知我分解 出了這一切,儘管較小, 常見的東西。 所以,我需要以某種方式現在能 走又前進了一步,並修復 該標題的問題。 因此,讓我們做到這一點。 讓我進入我的第二個版本 這裡,這又具有相同的文件 除了一個新的補充。 它是一個多一點 詳細,但我們如果我們看看 可以梳理出哪些是怎麼回事。 因此,而不是要求 的header.php和footer.php, 我似乎只需要一個 file--叫,當然,helpers.php。 讓我現在的規定, 什麼是helpers.php內 只是一堆功能 我寫的,就像以前一樣。 但我把它叫做helpers.php。 現在很明顯,在 三線和10,我 調用兩個functions-- 渲染頁眉,頁腳渲染。 那些不來 PHP的,我寫這些我自己。 我把它們放在helpers.php。 現在,我們只看到此語法 一次,它是超級簡單。 但是,這顯然是一個參數 渲染報頭,該函數。 為什麼我知道? 那麼這裡有一個密切的括號, 這裡是一個開放的括號。 當然,就像在C, 這些括號內的任何 是input--或 函數的參數。 這是什麼參數的數據類型, 根據我所強調? 什麼做的那些方括號 表示,根據上週? 是的,這是一個array-- 特別是關聯數組。 而這個語法誠然 有點時髦, 但這只是路過 在一個鍵值對。 最關鍵的是,報價引文結束 標題,並且該值是CS50。 如果我們做到了這一點 在C中,它可能會改為 看起來更像這樣, 只是報價引文結束CS50-- 或者實際上這將是捲曲 括號,或者類似的東西在C, 其中鍵是零, 和的值是CS50。 但同樣,在PHP,即使 語法是,再次,這一點都不奇怪, 它可以讓你傳遞 字來代替的數 將密鑰與值關聯。 那麼,這意味著什麼? 如果我進入helpers.php, 讓我們來看看這個功能。 renderHeader.php,而 renderHeader是我的功能, 我知道,因為我看到 這裡function關鍵字。 這是顯然C--它新 採用所謂的數據 - 一個參數 但我可以把這種現象稱之為 任何事情,但我把它叫做數據, 僅僅是一個小clean--和 只是採取一種猜測,尤其是 如果您在其他一些已設定 高級語言之前,東西 上述C,概念上。 這是什麼平等的開放式支架 括號大概是什麼意思? 或者什麼可能它是什麼意思? 我們還沒有看到這一點C.呀? 空數組。 具體而言,這意味著,如果 用戶不調用renderHeader 有一個參數,我仍然會 有所謂的數據參數, 但它的默認值是 將是一個空數組。 所以這是一個不錯的便利性。 我沒有要罵的用戶, 或者說,你用我的功能失常。 我可以給用戶一個默認 值,如果我沒有特別在意。 現在這個功能,我 要揮揮手的。 但是,這種提取物功能允許 我們通過數據這些變量 入的header.php以下列方式。 這是最後一塊, 我想時髦的語法。 這裡是我的新版本 的header.php--它 常說,從字面上看,開 支架標題CS50,僅此而已。 而同樣的事,H1。 現在它顯然說 一些漂亮時髦。 讓我簡化 一會兒如下。 這就是我 改變了我的標題是。 但是,它變得有點難看 不斷開放的支架用PHP, 然後使用打印功能。 事實證明,PHP有一個速記 符號對於這一點,這僅僅是 一個等號,這在技術上是一個 函數調用呼應,而不是打印, 但它同樣的事情,有效。 這只是看起來更好。 這只是一個語法 糖,如果你願意, 這使得我的代碼看起來更好一點。 但事實證明,和 我們將再次看到這 沒多久,​​我們必須把這種 煩人稱為長功能 在HTML特殊字符 PHP的,因為事實證明 有一定的投入 用戶可能給我們, 或者說用戶可能給我們, 這是要打破我們的網站。 但是,我們會看到下一個 一周使用JavaScript。 但現在,只知道 這個文件,headers.php,只需 取的標題, 我通過了,這讓 確保它的安全,可以注入到網絡 頁面,它吐出它作為我的標題 和我的H1。 所以,如果我進入現在這個版本, 注意聽課有它的標題後面, 零星期都有它的標題後面, 事實上,HTML我生成 是相同的就是我的第一個版本 was--除了我的空白, 因為我已經開始格式化 我的代碼有點不同。 但我所產生的所有 我在乎的代碼。 因此,讓我停下來 只是一瞬間,看看 如果有任何問題, 或混亂,我創建的。 好吧,讓我們扭轉 稍微用力在這裡 看看是否有一個 機會改善。 Helpers.php也有過這種 函數,稱為renderFooter。 這有什麼值得一提的約 renderHeader和renderFooter? 再次,對於今天的目的,知道 該提取物的功能僅僅是 我傳遞參數的方法 成的header.php和footer.php。 對不起? 聽眾:[聽不清] DAVID馬蘭:是啊,我只 改變需要對線路。 所以從字面上看,我犯了罪 複製和粘貼,再次。 這不是一個巨大的數字 行不過來on-- 如果我複製和粘貼的一切 只是改變一個小小的字, 而一個小小的字艾倫點 出在這裡軀,與頭在這裡。 否則,一切都是 相同的,除了為, 當然,該功能的名稱。 那麼,我們能否做得更好? 那麼,讓我開了這個版本 這裡,由此helpers.php, 為什麼不讓我只是得到一個 小聰明這件事? 寫稍微複雜 代碼,但把它渲染? 所以,我有什麼根本性的變化? 它需要一個參數now-- 兩個參數,數據依舊。 然後,什麼是第一 名稱可能被用於, 基於你在這裡閱讀什麼? 即使有些語法仍然是新的。 什麼是美元符號的模板? 對不起? 聽眾:頁眉或頁腳。 DAVID馬蘭:頁眉或頁腳。 所以很明顯,我決定,如果 唯一的事情正在發生變化 是我想要的模板 以print--和模板 我的意思是,這是藍圖 我想輸出代碼, 但我想在一些堵塞 values​​--因此,如果這只是頭 或頁腳,我為什麼不參數 這和調用的參數美元符號 模板? 然後,這個時髦的語法,讓我 在一個變量在這裡營造出路徑。 所以美元符號路徑是一個變量。 這是什麼語法 這樣做,如果你熟悉嗎? 是嗎? 聽眾:[聽不清] DAVID馬蘭:沒錯。 如果模板,報價引文結束, 頭,或者如果模板是, 報價引文結束,頁腳,該行有 我已經強調,八線, 是簡單地把這個名字,像頭, 和連接用點PHP。 因此,我們沒有這個操作符 在C這點運算符 一個了不起的事情在PHP--如果你 熟悉JavaScript或Java, 您可以使用加 簽字做串聯。 在C中,它是在一個neck--疼痛 我很抱歉,在對組六, 你將不得不做 this--它是在頸部疼痛 連接字符串。 為什麼呢? 好了,因為如果你有 一個字符串,它是此長, 而另一個字符串是這個漫長的, 你不能只是插在一起。 你是什​​麼,而不是必須做在C中? 是嗎? 聽眾:[聽不清] DAVID馬蘭:你對malloc 存儲器,或在堆棧上使用的陣列。 而你確實有 使該數組足夠大 以適應這種加這個, 再加上反斜線零。 然後用它們串聯在一起 攪拌貓或手動與一個for循環, 或任何數量的技術。 我們向您展示一對夫婦在對組六。 這是在頸部疼痛。 這是真正的我是什麼意思約 這與this--像C與PHP。 你只要能獲得更多 免費的功能, 這樣您就可以集中精力, 理想情況下,就開心 編碼的一部分,該 你想解決的項目, 而不是低電平細節。 因此,這只是產生的header.php或 基於哪一個我稱之為footer.php。 事實上,如果我去 到index.php,通知 所有這一切changed--代替 調用呈現頁眉或頁腳渲染, 我打電話渲染,其次是 我想要做的模板名稱。 你會看到這一點,也是如此, 在問題設置七, 因此我們允許您使​​用 同樣的功能,使串 與不同的網頁束。 因此,而不是糾纏太多 這些details--更多 你會再次看到 習題集seven--讓我們來看看 在溶液的現在的開始 一個更有趣的問題。 到目前為止,沒有什麼我們已經 做有保存的數據。 事實上,唯一的一次,我們曾經保存 這是我們已經在這個類進行 當我們有一個非常簡單的演示一段時間 回來,因此我們使用的文件IO在C, 我認為我輸入我的名字, 漢娜的名字,和瑪麗亞的名字, 或者是安迪的名字, 那麼,我們節省了CSV file-- 逗號分隔值文件。 我們用fopen--我想 我們使用fprintf中我記得, 我們保存的文件。 現在,這是最簡單的 形式的數據庫。 如果你想為一個網站 Frosh即時消息程序,即新生 可以註冊一個運動,你理想 想要做的事與該數據。 上週,我們什麼也沒做 與數據 - 我們剛才說的, 您已註冊,不是真的。 或者,也許我給的 監考官,那就是它。 但是,如果,如​​果我能很好 給那個監考CSV文件, 就像一個Excel文件。 或者更好的是,它會 如果我能很好 把這些用戶的名稱和 宿舍名稱和所有的 成的數據庫 只是住在永遠, 直到我選擇要刪除的數據。 數據庫允許 我要查詢的信息。 事實上,這是一個數據庫是什麼。 我們今天介紹,和 下週也是如此,一個技術 所謂SQL--結構化查詢 語言,這是另一種語言。 它本質上是一種編程 語言,但對於數據庫。 而對於現在的數據庫,只是 認為作為一個超級花哨版本 Microsoft Excel或谷歌的 電子表格,或Apple數字。 這通常是一個程序,允許 您存儲一大堆數據 以行和列,相當 就像你可能在Excel中。 但是,什麼是好的,特別是當 我們不是超級熟悉的Excel, 什麼SQL允許你做的是查詢本 通過編寫代碼行信息 在那裡你可以,即使你的 數據庫有一百萬行吧, 你可以找到的東西超級快。 事實上,Excel是特別 壞的大型數據集。 而事實上,高達幾 年前,橫空出世 Excel中只允許你存儲 最多65,535行其數據 - 的 聽起來很多,但在 那時候我是個研究生, 我記得絆倒 這是因為我正在生成 CSV文件,我的研究,我 想快速分析它們 由剛剛開放在Excel中。 當然,我的電腦正好死機, 因為我有超過65,000行。 但做了65,535來自哪裡? 什麼是微軟在做,大概? 如果你是好與你的兩個大國? 是的,他們使用的是16位 值來表示的行號。 而二至16 65,536-- 上下一心,因為如果你 零指數意味著是 大部分的行數,我可以有。 而這只是一個設計決策。 通過保存16位,他們限制我 16000行不是4十億, 我可以有理想的。 但現在,我們要 介紹這個更在網絡環境。 什麼是好的關於SQL的是,即使 雖然它是非常強大的,漂亮 複雜的,它真的沸騰 下降到四鍵操作,四 關鍵的功能,如果你will--選擇, 用於檢索數據,搜索 數據;刪除或刪除數據; 插入的行添加到數據庫; 和更新。 所以,如果你曾經使用過谷歌 電子表格,蘋果的數字,微軟 Excel,您已經執行, 最有可能的,所有的 這些操作作為一個人受 只是用你的鍵盤和mouse-- 插入數據,用你​​的眼睛 選擇或搜索的數據, 或更新數據或刪除數據。 所以,這是什麼意思? 那麼,預先安裝在CS50 IDE是一個名為mysql程序。 這是一個自由的,開放源碼 數據庫是超人氣。 實,例如,使用它來此 天,其中,它們使用其他工具。 而很多非常受歡迎的網站使用 這在很大程度上是因為它的快速, 因為它是免費的。 雖然的確存在替代品。 而有些人可能有玩水 替代品的最終項目。 這是一個屏幕截圖,同時, 一個基於Web的工具,稱為phpMyAdmin的。 這是一個巧合, 這個基於Web的工具也是 寫在一個語言,PHP, 但它的意思做 是給我們一個基於Web的 接口到數據庫。 由於MySQL通常是 東西,從歷史上看,你 也只有互動 使用命令行。 這將是超 討厭和奧術有 鍵入文本命令來選擇 數據,插入數據和刪除數據。 所以有些人在互聯網上 寫了一個基於Web的程序 這只是讓我們管理 在我們的數據庫中的數據。 這就像雙擊Excel和 其運行的基於網絡的版本。 你要怎麼使用它進行 最終在下週,而不是在對組六, 但要建立的東西 所謂的CS50融資,這 將有一個數據庫 用戶,與用戶名和密碼, 美元數額,他們 在他們的銀行賬戶。 這將是 是你用它來存儲 的符號和數量 個股用戶 已經使用虛擬購買 美元,你就會給他們。 而這將允許用戶 註冊為您的網站, 所以,即使你的朋友 可以調整到您的網站 而實際註冊, 登錄,和玩 並試圖找到故障代碼, 並試圖找到您的網站的錯誤。 他們會簡單地註冊通過 加入自己,有效, 通過代碼編寫到數據庫。 例如,這是一個快速截圖 一個什麼樣的數據庫可能是什麼樣子。 這是從一個 去年solutions-- 這就像一個小型的Excel 文件,存儲在數據庫中, 存儲在該軟件名為MySQL的。 在左邊,我已經很明顯 給出的每個用戶的唯一編號。 在第二列中,我已經給 人人用戶name--我自己 在他們之中。 和在右手側, 我已經給了他們一個哈希值。 現在,這實際上是一個密碼, 但它不是一個純文本的密碼。 這是一個加密的密碼,如果 你願意,或哈希密碼。 我們將回來不久。 但是,如果你讀過 有關如何文章 您的密碼在某個銀行或者一些 網站可能受到了侵害, 它一般意味著兩件事情之一。 因此,這是六個用戶只是摘錄。 在座的各位,現在自己看著辦 出通過黑客或破解 就是我們六個人的密碼。 但是,如果你收到 警報或道歉 從公司或網站上說, 對不起,黑客闖入我們的數據庫, 你或許應該改變你 密碼,可能是什麼意思? 嗯,一,可能意味著 公司一直比較魯鈍, 並已存儲你的密碼 在這樣的專欄,未加密的。 這意味著對手, 誰偷了數據庫, 從字面上知道您 用戶名和密碼。 這是最差的情況。 正如你會在P-集看 七,所以容易避免。 絕對沒有任何藉口了 愚蠢的在今天的網絡形式。 Two--,我們會發現一些文章 作證的事實,這仍然 情況發生,nonetheless-- 二,也許是對手 偷了這個版本的數據庫。 這仍然是有種不好的,因為現在 他們知道,我有六個客戶, 我知道用戶名 這六個客戶, 我知道的加密 版本,或散列版本, 的那六個客戶的密碼。 但是,任何你誰可能 做了[?黑客2?] 在那裡你破解密碼,或把 一看那個版本的問題 集,為什麼還是有點令人擔憂 如果攻擊者知道你的哈希 密碼? 聽眾:因為他們可以 進入整個字典 入散列函數。 如果你的密碼是一個字典 一句話,[?他們可以match--?] DAVID馬蘭:沒錯,對手 可以只寫代碼,就像你們中的一些 沒有為[?黑客?] 2, 因此你遍歷 所有的在字典中的詞語, A或所有可能的組合 到Z和一個通過nine-- 這聽起來好像很多,它是。 但對於一台電腦, 這是相當不錯的快。 而事實上,這是 點[嗎?黑客2,η]為 取東西, 從字面上看起來像這樣, 和反向工程 它實際上是什麼。 因此,我們將看看我們如何能夠 更有效地存儲這一點。 事實證明,幸運的是在MySQL中, 那裡將是數據類型。 而有趣的部分約一個 數據庫設計,說實話, 實際上是決定自己 你應該如何表示數據? 如果您代表電話號碼 一個int,像一個巨大的數字,或長? 或者你真正做到這一點 作為一個字符序列? 並且可以有很 這種非平凡的影響。 事實上,人們的 最早的,好玩的鍺的故事 是當馬克·扎克伯格正在建設 Facebook的,它最初寫成, 仍然主要是用PHP寫的。 而其中最大的挑戰之一 他們早早就被縮放面對。 當他們不停地之後加入學校 學校放學後,據我所知, 原始的解決方案之一 基本上是複製和粘貼 一些數據庫的 和一些代碼, 使哈佛 其自己的服務器上運行, 麻省理工學院在自己的服務器上運行。 這就是為什麼,對於一些 你們誰可能還記得, 你可以沒有朋友 在其它網絡。 你可能根本不具備的朋友 麻省理工學院或哈佛10年前左右, 但你不能跨越網絡 對於部分的原因。 而對的最大挑戰之一 馬克和Facebook這樣的公司 實際上是處理數百 和千千萬萬 每秒請求。 所以這個事情我們將開始 說起這個星期 真的會是有密切關係的 編寫好的軟件和普遍 成功的工具, 能夠處理大量的用戶。 因此,我們將討論有關事項 像索引和搜索, 但它是今天。 我們會看到你更多的週三。 [MUSIC - “宋飛正傳”的主題] DAVID馬蘭:你可以 它,並減去它。 你不必堅持 一些預定量的存儲器。 那麼,什麼是將要叫什麼? 揚聲器1:哦,這是怎麼回事? 揚聲器2:你是什麼意思? 他給一個講座。 DAVID馬蘭:我們可以用一個 函數調用的malloc到memory-- 揚聲器1:為什麼不是他的懷裡動? 揚聲器2:嗯that's-- 你知道,這是正常的。 這就像他剛才 大香腸掛在那裡。 揚聲器1:這是正常的? 揚聲器2:是的,我想我們 只是假設他意外 取代他的除臭劑與強力膠。