[Powered by Google Translate] [8]週
[DAVID J馬蘭] [哈佛大學]
這是CS50。[CS50.TV]
>> 歡迎回來。
這是CS50，這是開始的第8週。
本週一對夫婦的機會，
他們在這裡說，在一些食品供應。
欲了解更多詳細信息，檢查出在線的幻燈片。
也由自己的托馬斯Carriero的另一個事件本週。
他是一個CS50的前負責教學研究員誰現在是在Dropbox的，
他的傢伙迷上了，你也知道什麼，
因此，如果您想了解更多的到他們的談話，頭今天下午Dropbox和更多。
CS50午餐是這個星期五​​。
你加入我們，如果你有能力，1:15，像往常一樣，在火與冰。
>> 現在，我們深入到一些所謂的研討會。
我們的CS50研討會，召回，這是可選的類教學研究員的帶領下
和課程助理和朋友的過程中，
從一組在校園裡的人，這是一組被稱為ABCD
技術愛好者，在校園裡，以及一組名為HCS，
哈佛大學計算機協會，本科生同樣感興趣計算的。
今年的研討會名冊，包括研討會上Android和iOS和JavaScript
和PHP，UNIX，Vim的多，所以認識到，這些研討會都上來了。
如果你想RSVP，他們前往該網址那裡。
然後，我們將發布在本課程的網站，一旦他們確定的時間和地點。
但是要知道前研討會的有5年的價值可在網上，
其中有許多是非常大的電流的技術，你可能
要玩你的最後的項目，所以頭上有一些影片。
>> CSS，你已經熟悉CSS，
什麼是它概括？
什麼是CSS？
它的級聯樣式表，這是什麼意思呢？
這是什麼做對我們來說，CSS？
好吧，讓的熱身一個簡單的，HTML超文本標記語言。
為我們做什麼？
任何人在嗎？
它變得非常尷尬的問這些問題。
HTML超文本標記語言。
是嗎？不是嗎？
[聽不見的學生反應]
好了，好了，讓我們來標記文本顯示在Web瀏覽器。
這是不是一種編程語言。
的確，這是一種標記語言，這意味著它指示瀏覽器如何顯示
信息，所以最簡單的化身，因為我們已經看到了
是一些超級簡單的像加粗，開放式支架B右括號說
使這個文本加粗，而這實際上只是許多方法之一
中，我們可以做到這一點，確實，這些天來一個更好的辦法
風格化您的網頁，使事情粗體和斜體
中心和合理的，不這樣做僅僅通過HTML標籤
而是用了一種叫做CSS，層疊樣式表。
這是對自己的語言。
它也不是一個編程語言，但
大家好，這是丹，參加我們今天的。
一些技術上的困難。不是一個問題。
>> 讓我們的樣式CSS的頁面
通過設置被稱為屬性，所以讓我們來看看這個
由一些基本的實施例的方式。
讓我進入今天的家電。
我在這裡源週一目錄的，
我會去到一個目錄中稱為CSS，我們有一大堆
在這裡等待著我們的文件，
在該文件夾中，我們有，例如，search0.html從最後一次。
現在，回想與搜索0，我們留在本附註
排序實現谷歌或真的只是它的前端一個星期前，
注意到，我們有一些新的標籤。
我們有一個大的，大膽的標題H1，
形式，這使得我們有一個HTML表單的用戶輸入。
行動的action屬性，究竟是什麼含義
在HTML表單標籤？
這一點，行動的意義是什麼？
我就這樣做。
行動的目標是到哪裡的形式將被提交。
事實上，說行動=“google.com /搜索”
意味著，當用戶單擊提交按鈕或等效
任何形式的字段填寫的將被發送到我們的服務器
我們的設備，但在谷歌，而該特定URL。
要使用它的方法被稱為，
而得到的，就目前而言，僅僅是一個技術傳遞到Web服務器的信息，以及
通過URL的方式，讓我們來快速回顧一下這是如何工作。
>> 請注意，有一個輸入其名稱為q
其類型是文本，然後類型提交的第二輸入端
它的值是CS50的搜索，而事實上，如果我們打開這個文件，在這裡，
sea​​rch0.html，這是一個超級簡單的形式，
如果我搜索的東西，如計算機科學
然後按下回車鍵或點擊CS50搜索
注意，會發生什麼情況超出去谷歌
我特意結束了在這個URL在頂部，
google.com /搜索Q =電腦+科學​​，
計算機科學顯然是我所輸入的字詞。
+只是意味著一個空格字符，
它的瀏覽器，以確保公正，有沒有
在實際的URL的混亂和空白。
那麼q，當然是參數名稱。
我們還沒有看到我們如何，程序員，實際上可以進入Q還。
我們可以假設，谷歌知道該怎麼做在這裡，
但我們會在適當的時候。
>> 但是，讓我看看，而不是在search1.html，
看起來有點不同，因為我決定，這種形式在這裡只是有點跛。
我的意思是，這是在左上角。
真的沒有美學，所以我想的樣式
有點像谷歌的網頁，召回，
即使你可能經常不能訪問，今天看起來是這樣的萬聖節。
而如果我們打開這個文件的第1版，搜索1.HTML，我中心。
不過很醜陋，但至少現在我已經開始控制此頁的美學，
不只是標記物。
讓我們來看看在搜索，而且也真的只有一個區別就在這裡，
這可能跳出你，也許不是，
但什麼是一條線或片段的差異呢？
>> 這種風格的屬性，所以，在HTML
大部分元素，大部分標籤上的樣式屬性，
在該樣式屬性是帶引號的字符串，
而且引號的字符串是CSS。
在那裡，你可以把級聯樣式表
通過指定它作為屬性名
其次由一個冒號後面的值。
幾年前，這是一個不幸的設計決策
CSS是你們自己的語言，
但是從HTML語法上是非常不同的。
在這種情況下，我們可以看到，我的網頁上的內部，這是寫在HTML中，
我有CSS裡面的這些報價，並約定CSS
是，你有什麼所謂的財產，其次，再次，一個冒號，
其次，物業的價值，所以也沒有等號。
有沒有額外的報價。
只是這個冒號分隔的鍵值對，
文本行不正是它說。
它在體內的頁對齊文本，這是真正的膽量的頁面，
在中心。
>> 好了，那麼，最終的結果是明確的，是這樣的。
不是所有的性感，但至少它為中心，有點像真正的谷歌。
但是，如果我不是打開第2版
並指出在這裡完全一個新的標籤？
現在，在我的網頁的頭，這在以前只有標籤
在所有先前的例子嗎？
它只是有這個稱號。
剛才的head標籤是這樣的。
現在，而不是它有它的style標籤內，
這也太，我很抱歉，語法看起來非常不同的（HTML）
但你習慣了它，據此，裡面的風格標籤
我現在可以分解出是剛才
一個屬性，樣式屬性，我可以把它在我的網頁的最頂端。
>> 為什麼呢？
那麼，這是一步步走向清潔的東西，就像在寫C代碼
我們有時會寫功能分解出常見的功能。
這只是一個小的清潔劑開始分解出的東西，如美學
到一個中央位置，而不是它的所有點綴在你的HTML。
這也沒有說什麼，即使有一點新的語法。
我們在這裡可以看到，這是一個選擇，身體只是意味著選擇body元素
適用於下列屬性。
好了，財產是完全一樣的。
良好的措施，我添加了一個分號結束，
這往往是慣例，我已經包裝全部財產
在大括號中，因為我其實可以有不同的東西在這裡。
我其實可以說的東西喜歡的顏色：藍色;
>> 現在，這也不會是一步步走向任何事情都漂亮，
但如果我現在回去版本2我至少現在我的身體
頁的文本藍色的。
保持不變，因為這是一個輸入的按鈕。這不是純文本。
但一切是文本，像CS50搜索往上頂，其實是藍色的。
同樣，我們現在所做的是刪除從body標籤，通知，
的樣式屬性，我們已經考慮在這裡。
這是不是一個巨大的進步，但是如果我們採取這一步
注意這裡，我們可以在這第三個版本。
>> ，在search3.html的網頁幾乎是相同的
除非有什麼新的標籤，現在呢？
鏈接，所以這個人是不是很恰當地命名為
因為你不是在這個意義上的可點擊的超鏈接連接起來。
相反，你排序，這樣做相當於在C＃
其中的鏈接標籤的href屬性
rel屬性說，繼續
和複製的內容粘貼的文件名為的search3.css在這裡，基本上。
它不這樣做，但它的精神。
它說，去打開這個文件，search3.css，
和對待它，就好像用戶輸入了正確的在頁面頭部的
就像我在前面的例子。
同時，Search3.css，是非常簡單的。
它實際上只是包含正是剛才
標籤的風格，但我已經考慮它在這裡它自己的文件。
>> 即使我們沒有花太多的時間在所有的HTML或Web編程
只是憑直覺是什麼動機，也許，以剔除
這個小片段，甚至CSS到自己的文件
然後包括它這個鏈接標籤嗎？
[聽不見的學生反應]
好吧，這是在這個意義上，你有你的CSS CSS文件中的更容易閱讀。
你有你的HTML在HTML文件中，所以在這個意義上，它更具可讀性。
什麼是吸引力？是啊。
[聽不見的學生反應]
是啊，所以你就可以包括了很多次，所以現在我們正在做的這些
基本與單個文件的例子，但假設你實際上
pset的7或您的項目最終也許像你這樣的一個真正的網站，
你想有多個網頁，肯定是常見的
現實世界的資訊網絡，這將是一種跛腳
複製和粘貼相同的藍色
和相同的文本對齊的中心，每一個這些網頁。
相反，它更有意義的因素，就像我們已經在C
h文件，把它放在一個集中的地方，
在這種情況下search3.css，然後允許任何文件
在您的網站，其實這個標籤在第16行中包含該文件。
通常情況下，我們開始與版本0，哪種類型的作品
但不一定是最好的，和每一個步驟，
搜索1，搜索2，搜索我們已經採取了這些嬰兒的步驟
向設計，是一個小更清潔，更準備
更複雜的頁面，我們可以做的道路上。
>> 讓我打開最後一個例子，在這裡只是為了說明
更風格化的頁面，但首​​先讓我們來看看在HTML。
這是search4.html，並注意在結構上幾乎相同
除了引入一個新的標籤，DIV。
Div是一個標籤，引入了一個師的頁面。
你可以認為這是一種無形的矩形。
它的創建在網頁中一大片區域
您可以設置樣式的一次。
我在這裡做了如下。
內我的身體標記，它一直在那裡，一直以來，
我說在這裡創建一個分區的頁面通過線45到47，
這意味著，基本上是沿著頁面頂部給我一種無形的矩形。
然後給了我第二次​​的矩形，但無形的，下面，
，並確定它的名字的內容，最後，
給我一個第三師的頁面底部
叫ID。
我們將看到為什麼我在短短的時刻已經做到了這一點，
但在概念上，我有一個頭部門。
我有一個內容劃分，和我有一個頁腳的頁面劃分
即使這些都只是標記。
用戶不會看到3個矩形，
但形式的結構有幕後
他們是實際存在的。
>> 現在，誰在乎呢？為什麼要真正做到這一點呢？
一切在頁面上是一樣的，因為我們之前已經看到了。
這裡是我的形式。下面是我的輸入，我輸入了一個換行符等等。
不過，這裡有一個圖像，所以我們會看到這個來自一會兒就好了。
這裡有一個頁腳，這是新的，只是因為我想介紹
一些更多的內容。
如果我們向上滾動注意到，這個div的ID是頭。
這個div的ID是內容，和這一個的ID是頁腳。
而作為顧名思義，當你有一個ID屬性
在HTML中，根據定義，它必須唯一地標識
的元素之一，在您的網頁的標籤之一。
完全是你要記住，你已經有一個頭ID的負擔。
你有一個頁腳。你已經有一個內容ID。
電腦是不會找出一個可用的ID是你的，
所以，你可能會意外地給2標籤的ID的頭，
這將是錯誤的。
>> 你必須記住，你已經創建了，
但一旦你這樣做，我們可以在這裡做什麼通知。
我現在可以指定我的風格標籤的頂部
或等價的，如果我在我的CSS文件中仍然使用該版本，
我可以說＃頭，這是什麼意思的是，任何標籤
在這個網頁上有一個ID的頭
＃中，只需通過人的慣例，代表ID。
井號或井號代表ID。
頭是我給它的名稱。
這意味著應用此CSS屬性
在此頁面中的任何標記承擔ID的頭。
同樣的交易在這裡。
應用此屬性的任何元素，而這恰好是相同的，
其ID是內容，然後在這裡
請注意，我有一個小票友頁腳。
任何元素的ID是頁腳，其中可以有一個定義，
繼續前進，其字體大小較小，
其字體粗細大膽的，其保證金20像素。
>> 這是什麼意思呢？
它只是一個緣的頂部，底部，左側和右側上。
這意味著，給我一個20像素的無形的邊緣時
一切只是推離它一點點，像你可能在Word中，
Microsoft Word或頁面等。
然後文本居中對齊。
讓我們來看看最終的結果，那麼我們就回去了，這是剩下的CSS片段。
這是第4版，我們的搜索的例子，和它的多，更性感。
現在，為公平起見，我只是谷歌搜索“谷歌字體標識生成器”。
這讓我創建一個GIF圖像格式，它看起來像有。
事實上，你可以做到這一點。
我們有“谷歌字體標發生器”。
>> 讓我們來看看，如果我們能做到這一點。
好吧，我覺得這是我所使用的網站。
例如，我們可以說，EC 10，和他們自己的。
你可以玩這個整天長，然後用鼠標右鍵單擊它
然後下載實際的GIF，這是我做的這一切。
事實上，這就是為什麼在我的HTML，回想一下，在這裡
我有一個形象的標籤，這是我們上週看到的
其來源是logo.gif的。
什麼又是有這個alt屬性的動機，
這種替代屬性呢？
是啊。
[聽不見的學生反應]
好，所以有2個原因真的，如果瀏覽器不能拉的形象
因為你有一個緩慢的網絡連接或圖像已損壞
或類似的東西，至少在人類可以看到“CS50搜索”，
然後還訪問性的原因。
如果你有一個誰是盲目的，並使用屏幕閱讀器的用戶
，因此，顯然不能看到圖像，他們至少可以
如果他們的電腦說給他們聽文本。
>> 在一般情況下，這是最好的練習，當它涉及到網頁的可訪問性
所以在這種情況下，即使用戶可以聽到或看到的，可以這麼說，
它是什麼，您的網頁上。
還有一個其他的事情，我在這裡做
這是一個有點有趣，我們會看到更多關於這個問題，設置為7
通過的教學研究員領導的短褲之一。
但＃的內容是指該標記
其ID是內容，但是有一個空格字符，然後有字的輸入。
那麼，什麼是有趣的CSS，你可以
標籤頁面中的類的層次結構，
這是什麼代碼片段的CSS的手段是找到標籤
其ID是內容，然後採用下列屬性
的所有內容的後代的輸入標籤，
那就是它內部的縮進。
再次，壓痕，唯一重要的計算機，不以人的，
但按照慣例，我們縮進的事情，因為我們去深入到一個頁面，
因此，這意味著申請保證金的5個像素任何輸入元素
這是某處內部或嵌套在
元素的ID是內容。
>> 誰不適用？
好了，其實只是這兩個傢伙在這裡。
請注意，內側的形式有2個輸入，
因為可用於所有這些實施例的。
但是請注意，這2個輸入發生嵌套在
雖然有點深，一對夫婦的縮進層次，
裡面的標籤的ID是內容。
這是什麼意思呢？
如果我們去到瀏覽器，在這裡你可以看到非常輕微
讓我放大在按鈕之間，有一個填充位
之間的文本字段。
>> 讓我暫時把它們關掉。
讓我走我的CSS，並讓我繼續前進，只是
改變這種保證金從5個像素為0像素。
讓我走前面，然後保存文件，返回的搜索引擎
並重新加載，並觀看頁面中間的。
一切都壓縮在一起了，當我第一次鞭打這個例子
我想，看起來愚蠢的文本字段，然後它下面的按鈕。
我要墊那麼一點點的，所以我介紹的利潤。
我們不會做的是通過在課堂上的幾十個
CSS屬性存在，因為，有一些事情，如字體大小，
字體粗細，保證金，文字對齊，和幾十個其他，
和問題，我們將請您在7到各種在線教程
和參考，讓您選擇這些東西。
但什麼是真正重要的，在一天結束的時候
>> 了解如何應用這些東西。
同樣，如果我們有style標籤內的
可以去選擇器的標識符指定
向誰你想應用這些屬性，
然後你把鍵值對的屬性
由冒號分隔，然後用一個分號結束，
或者您可以複製出來，並把它放在一個單獨的CSS文件
你們自己。
所有的權利，任何問題的概念
或大圖片的CSS？
你會再次看到更多的內容在pset中7，
但我們會保持它通常是非常簡單的。
不是嗎？好的。
這是一個實際的編程語言，
而我們再回過頭來一點點的CSS中的一個例子。
PHP實際上是一個奇妙的易懂的語言
在於它是語法上幾乎等同於下
換句話說，如果你知道，你知道的大部分PHP，
至少在語法上，即使有一些新的特點
一些新的概念，我們將不得不看。
>> 但在大多數情況下，現在我們從C過渡到PHP
最新的東西，是真正的大畫面，
如何程序在網絡上使用的語言，而不是
在命令行或在閃爍提示，我們已經做了迄今為止。
作為參考，特別是與pset的7和最終的項目開始，
不利用這個URL，在這裡，如果你想讀的PHP手續。
它實際上是喜歡一個免費的在線教材有效，
你還會發現，什麼是真正好的關於PHP
是有數百功能，用它來，
而在C中，你並不一定有機會獲得
更多的功能比的數學函數庫，的CS50庫。
在PHP和大量的現代語言，Python和Ruby，其中，
您可以訪問那麼多的功能，這意味著你寫
少了很多的代碼，因為你可以站在別人的肩膀上
已經寫了一些你的東西。
>> 讓我們快速瀏覽PHP的語法，然後寫了幾個例子。
什麼是好的關於PHP的第一個和最重要的
有沒有沒有主函數。
如果你想在PHP編寫一個程序，你剛開始寫代碼，
你不必擔心主。
有沒有詮釋。有沒有回報。
有沒有ARGV ARGC，當你寫的程序。
相反，您就可以開始編寫代碼，這是部分
因為PHP是一種解釋型語言。
C的編譯，它被編譯在這個意義上，你開始
源代碼，運行它通過鐺，這是一個編譯器，
並最終一些數量的步驟後，您可以在對象的代碼，0s和1s。
PHP，Python和Ruby和珠江三角洲及其他
不同類型的語言，你不要把它們編譯。
你不要去從源代碼到0和1。
您只需運行的源代碼，並且運行的源代碼
寫在一個普通的文本文件，在這種情況下，PHP結束
而不是C，該程序的功能在您的計算機上
從字面上解釋是由一行行的代碼行。
>> 換句話說，而不是寫一個程序並運行程序
直接，你來寫一個程序，PHP結尾的文件。
然後運行實際的程序中，名為php.exe的，如果你使用的是Windows，
或只是PHP的，如果你在Mac OS或Linux，
您提供的輸入到PHP程序自己的源代碼，
在生活中，其目的是閱讀你的代碼從上到下，從左到右，
，做任何你已經告訴它做的事。
>> 讓我們來看看這是什麼將意味著語法。
在PHP中，我們具備的條件。
這張幻燈片是你所看到的，在第1週
因為語法的條件下，如果和其他人如果和其他PHP
看起來正是這樣。
當布爾表達式他們要去看看正是這樣的。
當涉及到安定為布爾值，它會完全一樣的東西放在一起。
開關看起來是一樣的，你會得到額外的好處在PHP
在C，交換機只能打開一個char或int。
你可以打開一個字符串值。
在PHP中，你其實可以有一個表達
這是一個變量，其內容是一個字符串，
實際上，你可以做字符串比較在現實直觀的方式，
沒有指針的比較，以決定是否做的情況下，i或j或別的東西。
不久，我們將看到潛在的。
>> 循環過奇妙的是相同的。
For循環的初始化，條件，和一定數量的更新。
while循環，也存在於PHP。
DO WHILE循環也存在於PHP，
和數組存在於PHP，但這裡的語法開始有一點不同的地方，
但其概念是相同的，和概念真的是相同的
因為他們是在第0週與劃傷。
首先是$符號。
這是一個設計決定，PHP，任何變量
在PHP的設計從$符號。
有沒有更多的X，Y，Z $ X $ Y $ Z只是因為。
這件事情要記住，現在的右手邊
這看起來類似於數組，
但我們在這裡使用方括號。
在PHP和JavaScript，因為我們最終會看到，
聲明一個數組，你做開括號和閉方括號，
那麼你有一個逗號分隔的值列表，無論是int型
或字符串或字符，你想要什麼，裡面的表達有。
>> 現在，怎麼我們做這樣的事情在C？
已知的數字靜態聲明一個數組的語法是什麼？
這是大括號，這樣微小的差別，但在PHP
並最終器的，它只是使用方括號，所以真的
唯一有趣的細節是$符號的變量名
方括號中，也有一個很奇怪的事情
被省略的，以及在左邊的等號（=）。
缺少了什麼，我們已經要求了好幾個星期呢？是啊。
[聽不見的學生反應]
的大小，所以這裡沒有提到的數組的大小。
坦率地說，這裡沒有提到的方括號的左側
等號（=），還有什麼缺少的行嗎？
是啊。>> [聽不見的學生反應]
的類型，有什麼有趣的，特別是關於PHP
是，它是不是一個強類型語言，C是
強類型的字符在這個意義上，你必須說，
你必須說int，你必須說浮動。
>> 任何時候你想要一個變量，其類型是什麼，你要告訴鐺。
PHP是一個有點懶惰。
在這個意義上它是鬆散類型的，
你可以有花車和字符和字符串
和整型等等，但語言本身
並不真正關心什麼，你把裡面的變量。
您沒有提前告知什麼樣的數據類型
在變量中。
這完全取決於你，所以這是很好的
，你不必擔心，因為很多數據輸入
和擔心你的論點是什麼，等等。
這也意味著最終PHP中的函數能夠返回
無論是一個int的時候，也許曾經在一段時間內
例如，他們將返回一個布爾值，布爾值false，表示出事了。
這給了我們一些不相上下，但它也將使我們的設計
有點懶，當涉及到數據類型。
>> 還有什麼在這裡要記住的？
變量看起來很喜歡這一點，所以$ S =“你好，世界”。
這也許能推理從前面的例子中，
我們有另一種類型的循環。
這一次，我們將真正看到曾經在一段時間內，因為它是非常方便的，
foreach構造。
在這種情況下，foreach循環需要其括號中的3個字的內側通常情況下，
美元的東西，這是你想要什麼樣的陣列遍歷成員，
然後字面上的關鍵字，然後最後，
另一個變量的名稱，你可以選擇。
它可以是富，酒吧，或元素，
這是什麼結構並
如果陣列包含10個元素
在每次迭代這個數組對不起，這個循環在每次迭代
變量稱為元素將被更新
成為第一個數組中的元素，那麼第二個數組中的元素，
然後第三個元素的數組，從而無需
做的有點惱人的方括號和
$我為了到一個數組中的索引。
PHP做所有的工作，並在每次迭代
只是手從數組中的下一個元素
沒有你不必知道或關心它的數字索引位置。
>> 最後，就目前而言，還有另外一個功能的PHP
這將是巨大的，特別是當我們在網絡上開始編程，
而這被稱為關聯數組。
因此，我們知道的陣列為20秒前
在過去8週的數字索引數組，
傳統的陣列類型的指數是整數，
0，1，2，所有的方式上升。
關聯數組功能更強大。
他們讓你有任意鍵，
任意指數和任意值。
而在傳統的陣列，它是0，1，2，
在一個關聯數組，你可以有一個指數
foo的一個關鍵，它的值是酒吧。
然後，您可以有另外一個關鍵的名字是巴茲，其值QUX的。
>> 同樣的，愚蠢的計算機科學通用的變量名，
但問題是，這個數組沒有支架0或支架1。
相反，它會，有支架foo和支架巴茲。
這是一個很大的通用性，我們將能夠聯想到的
與其他詞的話，完全任意鍵的值，
我們將是能夠得到這些值在固定的時間
因為引擎蓋下的一個關聯數組
真的是一個哈希表。
回想一下，一個哈希表，可以讓你把一些輸入
喜歡把中的單詞大衛，如果你要插入到某種字典大衛，
然後你會得到一定的價值一般。
拼寫檢查的情況下，真或假。
大衛的字在字典中沒有的。
一個關聯數組，其實只是一個哈希表，
但它是一個更加用戶友好的化身。
正如我們將要看到的，這將允許我們做一些事情
非常，非常容易。
>> 讓我們來看看一些基本的PHP
例子，看看我們能做些什麼這門語言。
讓我去進取，不斷開拓今天在我們的源代碼目錄
一個名為hello1.php。
這個文件是更多的評論比它實際的代碼，
因此，讓我真正從文件中刪除所有的評論
和現在的你也許是最簡單的PHP程序在這裡。
5條線，並且其中一些是白色的空間，
所以在這裡發現一些關鍵的差別。
該文件稱為hello1.php。
不過，第一行，<？PHP。
類似的精神，HTML，
該序列的字符告訴計算機
“嘿，計算機，來我們在PHP程序。”
它可以確保它不會混淆，它的一些其他語言。
2號線是一個有趣的空白。
printf的第3行是我們的老朋友，
這時候在PHP的背景下。
PHP有它自己的版本的printf的行為完全一樣的，
因此，這只是要打印“你好，世界”。
然後此相反的標記在這裡，>，這意味著這是我的PHP代碼。
>> 讓我們來看看如何運行。
我要回到我的終端窗口。
我要進入我的PHP目錄。
請注意，我們有一大堆的文件，其中第一個是hello.php的。
讓我繼續運行，hello1.php，進入。
權限被拒絕。好吧。
我們是如何固定的像這樣的事情在過去的？
那是什麼？>> [聽不見的學生反應]
我們需要讀取和寫入，但讓我做的ls-l。
記住這個有點神秘的輸出，此處為Hello1
似乎是可讀和可寫的我
但其他人可讀的。
事實證明，這實際上是不正確的方向前進的一個步驟。
一種解釋型語言差異，再次與
你不要直接運行程序。
你，而不是一個翻譯，把它的代碼
你寫的，所以它可以解釋一行行。
在這種情況下，解釋器或程序，其實我是想運行
是真正的PHP。
>> 這個設備的硬盤驅動器上的某個地方有一個程序
別人寫PHP，或在Windows下的php.exe。
我要在這裡做什麼是我要實際運行PHP
但將它作為命令行參數，我寫的代碼，
，然後我會放大並按下回車鍵。
對我來說，它運行我的程序，從上到下，從左到右。
讓我去進取，不斷開拓一個略有差異。
在hello2.php通知，這太
主要是註釋，所以讓我擺脫這些作為一種消遣，
什麼明顯的不同有關此文件嗎？
這種新的生產線，在頂部略帶神秘的。
在第1行是＃！/ bin中/ PHP。
斌是一個約定，Linux和Mac OS二進制文件，
/ bin中表示這是一個文件夾，其中包含了一堆二進制文件
被編程的，其中之一是PHP。
＃！綽號家當，
這是說，它的快捷方式，這是什麼意思
是，當你運行這個程序，現在有一個提示，在該文件的頂部
告訴計算機使用什麼樣的解釋。
>> 它變得有點討厭，如果你要告訴你的用戶和您​​的客戶
“嘿，我們寫了這的程序稱為hello1.php。”
所有你所要做的是永遠運行PHP，然後這個程序的名稱。
坦率地說，它只是更好的運行hello1.php，
而事實上，我們可以的，如果我們做以下。
讓我繼續做ls-l的通知hello2它仍然只是讀寫
，然後看了看了，所以我也還沒有做到這一點，hello2.php。
但是，我們推出了這款非常簡要地最後一次，chmod命令。
如果我不改變存取權限chmod a + x，這意味著所有的加可執行，
然後hello2.php，然後執行ls-l的再次注意到有什麼改變。
一，Linux是顯示我的文件名綠色傳達的理念
，它的可執行文件，但更重要的是，在左手側
注意到位代表x為可執行文件現在已經被設置。
這意味著現在是我可以運行./hello2.php的像往常一樣，
點擊進入，因為在最高層的文件的家當
這是一個提示，再次，Linux的說
使用這個解釋器來運行這個文件。
不要擔心迫使用戶輸入。
>> 什麼是好的，現在是它的一種不相關的我的客戶還是我的朋友
什麼語言，我寫了這個程序，這樣我就可以繼續使用mv
hello2，例如重命名這件事情。
現在，如果我做./hello2
放大了我的程序繼續運行。
這些文件的擴展名是一個人的約定，這是必要的
為類似鐺，尋找他們的。
但對於PHP，我可以打電話給這個文件擴展名我想要的任何東西。
我想，我真的很不錯，在紅寶石欺騙世界，
我可以寫hello2.rb，然後運行它，
瞧，現在我的Ruby版本，這是一個徹頭徹尾的謊言。
但是，文件擴展名是沒有意義的
如果該文件是可執行文件，並在該文件的頂部，有這樣的特別提示。
>> 現在，順便說一句，讓我告訴你很快第3版，
這是一個有用的技巧，知道排序。
，在hello3我做了一些錯誤
我會在線更新的源代碼。
在第3版事實證明，在大多數的Linux電腦
有一個程序叫環境對環境，
你可以在這裡做的是，如果你不知道PHP
安裝在本地硬盤驅動器，因為它的確可以在電腦上根據
有人正在使用，ENV只是說運行環境，
這是在大多數系統上，並找出其中PHP是。
只是一個普通的伎倆，以便找出其中一個方案是，你不必擔心。
但是，如果你做護理，找出程序是，你不關心迄今
你可以使用命令。
>> 讓我放大和類型，也就是PHP，
並注意到它告訴我，它實際上是在usr / bin中/ PHP。
這是一個謊言。這也是在垃圾桶。
這只是我的第一擊。
如果你想知道在Clang的是，這，這是在usr / bin中/鐺鐺，
使usr / bin中/，而這一切是什麼意思
你可能會被輸入usr / bin中/鐺鐺進入運行，
但它是一種單調乏味的做到這一點，所以一些文件夾
像usr / bin和垃圾桶都被假定為默認值
這樣，計算機就知道給你看。
寫一個超級，超級簡單的Hello World程序的任何問題
在PHP中，然後運行它呢？
因為現在我們將開始推出更具吸引力的語法。
好吧，我們開始吧。
這些計劃中，我們實際上已經看到了，所有的人前。
>> 如果我打開了，例如，讓我們做beer1.php，
我們不會去通過幾個版本的，但我做了什麼
我坐了下來澆或轉換
我的C代碼PHP代碼。
大部分的頂部的文件是留下在這裡。
原來，有一個新的功能，我們需要調用的ReadLine。
GetString的，回想一下，從0週開始，一個CS50事情。
PHP中有其自己的用戶友好的功能的ReadLine
需要1個參數，該參數指定的提示
要顯示給用戶，和什麼的readline
它返回任何用戶鍵入的
在這種情況下，我聲明了一個變量名為$ N。
我存儲在它的返回值的ReadLine
後提示用戶使用此字符串。
只要備份，以實際運行這件事情，讓我繼續前進
並運行php beer1.php。
會有多少瓶？讓我們只是做這一次。
輸入。這就是全部。
>> 從數週前的C版本的程序在功能上是相同的。
但語法讓我們來看看有什麼不同。
之後，我得到一個int從用戶的通知，我做了一些錯誤檢查，
如果n小於1，我退出，我打印出來
一個遺憾的消息給用戶，並在退出時1。
這也是有一點不同。
在C語言中我們做了什麼？在C語言中，我們返回1。
在PHP中退出，1，坦率地說，我認為一個更直觀一點
因為你從字面上退出程序。
好吧，然後在這裡討厭的歌曲是相同的語法
除了變量，這樣下來在這裡24日起
注意到我的for循環幾乎是相同的，
但我在前面的i和n，
什麼也缺少從第26行，我們已經在過去
聲明變量時我嗎？
有沒有類型。
這是不正確的PHP說詮釋。
你根本不需要做到這一點。
計算機，解釋PHP是明智地意識到
如果你把一些在我會把它
你的號。
再往下這裡我們插在我，我，我 - 1。
所有這一切都是一樣的，然後在這裡做了一個“哇，這是惱人的”printf
然後退出（0）。
>> 同樣，這裡的外賣是，即使我們要花費比較
PHP的一點時間，肯定對我們所做的對C，
這幾乎是一樣的，所以我們要做的今天和下週
超越是真正關注一些新的想法。
剛才看到另一件事情並翻譯從C，
這是一個超級簡單的程序，我們在第1週
或2的立方的值。
但是，什麼是這個程序的時間大約是有趣的，它
介紹了一個自定義的函數的概念，我們自己寫的。
PHP中的語法幾乎是相同的。
下面是我的程序往上頂。
請再次缺席是主任何概念。
我開始編寫代碼，這是要被執行的解釋。
我打印出x為2，據推測。
然後，我要求刺...
然後，我所說的多維數據集函數，並通過在$ X
的返回值分配給$ x。
然後，我要求它的立方，然後我這樣說，它希望
會說x是8。
PHP中的函數的語​​法是以往任何時候都略有不同。
再次失踪的返回類型。
再次失踪的返回類型，還缺少什麼其他類型嗎？
[聽不見的學生反應]
好吧，好吧，這是很好的。讓我們回到在第二。
>> 我們不具備的，例如int在這裡。
例如，我們不有int，又因為在這裡，在PHP
你根本就沒有必要，不應該這樣做，
而是有一個新的關鍵字調用的函數。
在PHP中，它幾乎是一個更清楚一點，因為當你想要一個函數
你從字面上說功能時，你給它一個名字，然後以逗號分隔的列表
如果它的任何參數。
不用說無效或類似的東西，然後返回是一樣的，
$ * $ * $。
什麼也沒有？森指出這一點在這裡。
在完全沒有在PHP文件的頂部是一個原型。
這也是設計。
PHP等語言和口譯更聰明比C是
像鏗鏘的編譯器。
>> 回想一下，鐺，如果你不告訴它的立方體存在，
如果你不告訴它輸出的原型存在
或使用的＃include，好了，這是要罵你的，而不是編譯你的代碼。
PHP和更現代的語言有很多聰明的，當它涉及到這一點。
他們將承擔起自己閱讀你的代碼
然後罵你的，只有當它發現立方體無處。
它並不重要，如果立方體是在底部或頂部，​​或什至在一些單獨的文件中。
PHP和類似的語言足夠聰明，現在，放眼未來
在之前的所有字句認為你犯了一個錯誤。
在什麼地方離開我們嗎？
>> 讓我們做最後一個例子，這裡的條件下，
如果我打開了conditions2.php通知
語法在這裡幾乎是相同的。
我使用readline，而不是GetString的，但該行是一樣的，
“我想請一個整數。”
然後，我有一個if條件，否則的話，然後一個else，
但在功能上，這個程序也是相同的，我們所做的幾個星期前，
所以，如果我遇到這件事情，php的conditions2，
我給它一些像23 -
我選了個正數。如果我給它-1我挑了負數。
如果我給它0我確實拿起0。
那麼，誰在乎這一切嗎？
好了，其中一個在這裡練習的樂趣排序
至少對我來說是回去看看的速度有多快，我可以實現的pset 5，
拼寫錯誤pset中。
回想一下，有這稱為speller.c的文件，
有一個名為dictionary.c。
我所做的是我種的花了幾分鐘，我的C代碼轉換
PHP代碼，我們不會花太多時間在拼寫檢查
因為就像在pset中，你也沒有真正需要
拼寫檢查器本身上花太多的時間，因為你的注意力都集中在詞典。
>> 我只想說，如果你讀通過的拼寫，
這個文件在這裡，這幾乎是等價的C代碼
我們給你的pset 5。
我只是增加了一些的地方。
我已經改變了某些函數名，如果他們不存在於PHP。
這裡還有一個額外的東西，preg_match，
這是一個小票友的做事方式，但我們會回來的，最終。
但在短期，拼寫檢查器是幾乎相同的，如果你看的最下方
它最終吐出的是，在這裡，
拼寫錯誤的詞，詞語的詞典，詞彙文本。
好了，現在有什麼有趣的是下面的。
在我的文件頂部的，我要求dictionary.php。
正如C＃PHP有一個特殊的函數調用需要
這幾乎做同樣的事情，需要一個名為dictionary.php。
我該如何去實施的pset 5？
讓我繼續前進，在這裡打開了一個文件。
讓我在這裡需要一點參考。
讓我創建一個新的文件，並開始調用此dictionary.php。
讓我把它放在另一個文件夾，所以我們可以做這個活。
我現在就放大。
我要開始我的PHP文件，開放式支架PHP關閉支架。
然後在這裡有幾個功能，我需要實現的pset 5，
所以讓我開始實施其中的一些，
功能檢查，其中有一個字作為參數。
我們將做到這一點，它在某一時刻回來。
>> 函數作為參數，負載了什麼？
字典，所以，我其實是想加載的文件。
有功能的大小，但不帶任何參數
有功能是什麼其他的嗎？
卸載，不帶任何參數。
這是4，我需要的功能，現在在PHP中實現，
我什麼都做的是繼續這樣做。
很多你使用一個哈希表中的pset 5，
所以，讓我繼續前進，在PHP中創建一個哈希表。
完成。
這給了我一個哈希表。好了，為什麼呢？
一，變量名為$表，只是想起了一個哈希表的想法。
不過，方括號，記得，代表什麼？
一個數組，但是在PHP數組不具有數字索引。
它們也可以是關聯數組，
這意味著你可以有任意鍵和值。
>> 就像在pset的，那些你誰做到了哈希表的實現
你可能插入的字，然後將其插入鍊錶鏈，
或者你存儲的價值，真正的某個地方或東西的效果。
你莫名其妙地想起了事實，這個詞是有。
就目前而言，那將是我的哈希表，
所以現在去實施檢查功能，
我只需要看看裡面的那個哈希表
如果有一個字是有。
我要的是我說的話，
讓我們使用isset，這是一個PHP函數，從字面上的意思只是說是關鍵的設置，
所以使用isset（$ [$字]
如果是的話返回true。
就是這樣。這是pset的PHP 5中。
那麼，在公平，好吧。
否則返回false，所以它不存在。
到底發生了什麼嗎？
好了，如果表或哈希表一般
是一個關聯數組，這意味著你可以索引
用一個詞像“字，”你要回去一定的價值。
>> 我們是種讓自己領先一步。
這將是一種不錯的，如果我們實際加載的文件的第一個，
所以負載是不是很簡單，但讓我繼續前進，掀起
一個真正快速實現負載。
讓我繼續前進，說的話獲取文件字典。
在PHP中打開一個文件，該文件的功能
並返回給你一個數組在該文件中的所有的話，
只是手給你。
這是一個很大的痛苦，不是嗎？
現在的foreach，這是我們的新的結構時，foreach（$美元的字的話）。
要開始這個循環遍歷數組的話
並分配給變量$字在文件中的每個字
從第一到第二至第三到第四的所有方式
所以我沒有做惱人的[]符號等。
我簡單地做了這些字
是我的表，它存儲在索引到表
，然後做真實的，因為要記住
一個字是在我的字典裡，所有我真正要做的
種翻轉了一下，說這個詞在我的哈希表是存在的，真實的。
如果它不存在，我沒有明確地把假，
否則，在宇宙中所有可能的話，我不得不把假。
>> 總之，對我來說只是設置了索引值
如果有一個字實際上是在我的哈希表。
現在，我切割的角落，在這裡，我要揮揮手，現在，
但現在負載的功能就完成了。
我到一個數組中，從文件中加載所有的話。
我遍歷超過該陣列，陣列中的每個單詞
我將它插入我的哈希表的一行代碼。
這很有趣。你知道我們現在可以實現規模嗎？
，大小總是很容易的，公平的。
在這裡，我們就可以返回計數表。
這是很容易的事情，數一數，在表中。
這實際上是一種不是最有效的。
我也許應該有一個變量的大小，因此，我們可以做到這一點
在固定的時間，但是這是很容易的。
哦，然後卸載，如果我們真正想要的是肛門
我們可以說，這就是你如何卸載的東西。
你剛才設置的變量等於一個空數組，
和擺脫一切有。
無需撥打免費。
>> 同樣，我已經削減了一些角落，和我道歉分配問題集
也許在C，但如果我們現在去繼續運行，
我要以實際運行的版本，我寫了提前
只是讓我沒有做任何任何語法錯誤。
讓我繼續運行拼寫檢查器。的使用是相同的。
這是一本字典文件，該文件只包含單詞富。
這裡是一個文本文件，其中只包含foo的酒吧。
讓我們這一點，所以拼寫檢查拼寫檢查，使用這本字典文件，這個文本文件。
有拼寫錯誤的單詞，酒吧，和瞧。
完成的pset 5。
在這裡，讓我們有5分鐘的休息時間，我們會回來更多的PHP。
好了，我們又回來了。
讓我們不恨我了一會兒。
現在讓我們來看看這是不是一個積極的
這件事在實際執行PHP。
當然，它花了45秒來實現。
>> 但是，讓我們繼續和運行的東西。
讓我繼續運行的C版本
拼寫檢查，和我們將上運行它的一個最大的文件，
這是國王詹姆斯聖經。
這裡是在讓我們進入我們的C文件夾，
國王詹姆斯第5的拼寫上。
很多拼寫錯誤的單詞。
好的，那麼你很可能得了即使有一點不同的輸出，
如果你把一切都正常工作，所以總的時間進行拼寫檢查
在國王詹姆斯聖經“是0.38秒，相當不錯的，所以使用該實現。
現在讓我到PHP版本，這是我們剛寫。
讓我跑的拼寫國王詹姆斯。
哎呀，忽略這個錯誤。我在錯誤的目錄。
國王詹姆斯第5的拼寫上。
差不多完成了。
>> 好了，精明的觀察者會意識到這是3秒以上，有。
這是真實的運行時間。
事實證明，它需要時間來吐了大量的文字
由於緩衝的問題，但長話短說，
的加工時間為3.15秒，CPU時間，
與剛才又是什麼呢？
像0.3。
我的意思是，這是一個數量級的速度較慢，所以在哪裡
可笑的放緩從哪裡來的呢？
好了，因為一直的情況下，幾乎所有的設計決定，我們已經取得了
在過去9週中的類幾乎總是權衡。
有時候之間，有時只是空間之間的空間和時間，
空間，時間和開發工作，並確實在這裡，即使
我們節省了大量的時間，可能有潛在10-20-30小時
實施拼寫檢查器的開發時間
通過鞭打，這種語言在短短45秒
我們付出的代價是，它是慢了一個數量級，
這是一般的情況下與大多數任何解釋語言，
PHP，Python和紅寶石，珍珠或其他人據此
如果你要運行它通過翻譯和閱讀你的代碼
一行行，從上到下，從左到右，
，中間人會採取一些自己的時間，
和你的感受是什麼在3秒到0.3秒，而不是
是的事實，這是中間人，從字面上理解我們的代碼
一行行，但願，如果你是內循環
一個巨大的文件，其中包含數十萬字。
>> 的開銷加起來，加起來，加起來，並添加了。
對於這樣一個工具，它可能不是最好的語言，使用的實施
如果直接是一個拼寫檢查您的用戶和你的興趣。
但我們在某一時刻的奢侈品是，如果你
使用的語言，如PHP或有很多解釋型語言
在網絡的背景下，對於這個問題，你有益處
互聯網是比大多數的電腦慢了很多。
您有在您的計算機上，2 GHz時，甚至更多，這些天GHz的CPU。
但現實情況是，在互聯網上有一個高的延遲量
由此，對於瀏覽器到服務器，即使我們看到上週
這是相當快的，一毫秒的一半左右，
也增加了，而如果你下載的東西，如圖像
或Facebook的照片或即時消息，Facebook的喋喋不休，
的Gchat或類似，所有的往返時間
之間的瀏覽器和服務器開始增加，
這使得在許多情況下，您的特定選擇的語言
不是所有的相關的，因此你使用一個稍微慢的語言
如PHP或Python或Ruby
但有巨大的積極給您和您的同事
和你的朋友，因為你可以實現的事情，所以，如此之快。
此外，你有一定的安全缺陷的風險要少得多。
在PHP中有沒有指針。
段有沒有故障，你可以很容易地誘發
以同樣的方式，你可以在C.
C，你是超級的硬件。
使用PHP和類似的語言，你是那種水平的提高，可以這麼說，
你和什麼之間有很多的防禦實際上是怎麼回事
在機器內部，它只是一個折衷。
>> 我們已經得到的地步，這些更現代化的，高層次的語言
像PHP，因為吸取的經驗教訓的語言，如PHP C.
但是，如果你不明白什麼已經持續引擎蓋下的所有時間
你肯定不能做出正確的設計決策，
當然，當它涉及到像Facebook或谷歌在一個地方工作
這些地方是越來越大的數據集
即使你回去做醫學預科，並正與一些MD
在一些大的數據集，涉及患者和醫生
如使用正確的工具是巨大的令人信服的
，否則你分析一些數據集可能需要幾秒鐘，
或者它可能從字面上需要幾個小時。
這僅僅是一個例子，而不是阻撓你多少的努力，
這是在C，但幫助您了解，當你實現的東西在C
你真的理解，或在理論上，真正了解
如何一切都應該工作，你幾乎完全控制
這是怎麼回事引擎蓋下的，並與這些高層次的語言
你必須放棄更多的控制權的人，是誰發明的
，並受到他們的設計決策比你。
但是，如果我們想當然地認為表現
是不是很重要的，因為這些問題在網絡上，
只是網絡速度比CPU的速度慢一點，無論如何，
所以我們可以排序，用得起一個稍微慢的語言
如果有利的一面是，我們可以開發的東西10倍的速度或什至更多。
>> 讓我們來看看如何，我們就可以開始使用。
讓我去到一個文件夾
在今天的例子稱為frosh.ims，
這實際上是親自動機的第一件事的事實，即
我寫的Web年前後，CS50和CS51
是一個網站的大一IMS程序，大一學生校內運動，
這在當時，這是足以年前，當時
有沒有網站的程序，即使是一個網絡，
取而代之的是一個值日生威格爾斯沃據此，如果你想
註冊排球或足球或任何你填寫一張紙。
然後，您可以步行穿過院子。
在他們的門或監考官的手，然後，你會敲他們的門​​和幻燈片
在一張紙上，你的名字就可以了，你是否想成為一個球隊的隊長，
你你想要做什麼運動，什麼宿舍英寸
這是一個老同學的做事方式，這是一個主要
自動化這個過程中有很多的機會。
你剛才去的網站。您鍵入的東西英寸
您會收到一封電子郵件，確認和繁榮，就大功告成了。
>> 這是我做的第一件事，雖然在語言，稱為珍珠，
但它是比較容易做的PHP，這是形式的代表
的問題，你就可以開始解決時，你可以表達自己的
編程和沒有依靠的東西，如谷歌網站
或Excel或工具，就交給你了。
你們現在有能力做這樣的事情。
這是一個超級醜陋的版本的一種形式，
但讓​​我們只用它的談話，這是開始
大概什麼形式看起來就像幾年前，我們
使人們在網站上註冊為大一IMS。
我們要求一個名字，一個複選框，他們是否想當隊長，
男或女的，然後他們在什麼宿舍，
然後，他們將提交本表格。
讓我們先來看看下面的罩在表示這個網頁的HTML。
讓我進入froshims0，
順便說一句，pset中7，我考慮是理所當然的
我把事情英寸的目錄和文件夾
我們將引導您完成的確切位置飄然而至，在家電，
國防部的命令，你必須運行的，所以不要擔心所有的
愚蠢的詳細信息同步，從一開始就在這裡。
>> 好吧，這裡的froshims0.php的。
讓我向下滾動，有什麼好奇的，
這是一個PHP文件，但它裡面是什麼，清楚嗎？
這是一個很多的HTML，PHP的起源
真的是一個以網絡為中心的語言。
剛才我們用它來實現啤酒的例子，
的條件，例如，你好例如，這很好。
您可以使用PHP作為一種腳本語言
腳本是真的只是一個快速和骯髒的程序給出的術語
什麼，你寫的腳本或更普遍的一種解釋型語言。
PHP是超級有用的，因為你已經看到如何迅速
比較我們可以掀起的PHP程序。
但它真正目的是用於Web，
和設計為Web在某種意義上說，注意到在這裡的文件的頂部
我開始<？PHP。
然後，我有一堆無用的意見，授予，但後來我關閉PHP模式。
但後​​來我下降到HTML模式。
>> 關於PHP有什麼有趣的是，即使文件結束。PHP
它通常意味著要與HTML混在一起，
一些PHP代碼，一些HTML。
我們最終會看到，我們就可以開始挑逗那些除了
，使我們的HTML獨立於我們的PHP完全，
但PHP的起源真的是給你這樣的靈活性，
如果你想一些HTML只寫它，將是
吐出相同的瀏覽器。
但是，如果你需要一些編程技術，
一些編程的代碼，你也可以把它變成完全相同的文件，我們很快就會看到。
這裡是我的HTML。
我有一個標題為大一IMS。
我有一個body標籤誰得到了它一些CSS中心在中間的一切，
然後在這裡我有一個形式，這顯然是將要提交
到一個新的稱為register0.php的文件，所以我們會看到，在一個時刻。
它的使用方法後，我們會回來的，以及。
然後，我有某種形式的輸入，一個所謂的名稱，其類型是文本，
他的名字是隊長，其類型是“複選框，
這一點，我們沒有看到它之前，但它到底是什麼說的。
你會得到一個複選框，而不是一個文本框。
在這裡，你有一個單選按鈕，這是那些圓形按鈕
你可以選擇這一個或那一個。
>> 請注意，這是故意的，我給了兩個單選按鈕的名稱，性別。
這是你如何相互排斥，你必須按一下
無論是這一個或那一個，並點擊
取消選中，所以你必須給他們同樣的名稱
如果你想它們是相互排斥的那樣。
然後宿舍，我不認為我們已經看到了這一點，但它是一個選擇菜單，下拉菜單中。
因為這是選擇的標籤。
然後，您可以在下拉菜單的名稱，
然後你有一大堆的這些選項。
第一個，只是為了美觀，是一個空字符串。
我只是想下拉列表中，默認情況下是空白的，
，然後有Apley，卡納迪，灰色，等等。
注意到這裡的二分法。
在下拉式菜單中的選項下有一個值，
但然後它有一個人類友好的名稱，在該示例中
是相同的，但如果我們真正想要的是肛門，我們可以有
這一下降的價值下降只是短期的版本，
灰色，但我們真的可以說，人類的灰色廳實際看到的，
但不是所有的有趣，所以我只是保持簡單和他們相同。
接著下來的底部，我們有一個提交按鈕
這是我們見過的，但是請注意我只是給它一個不同的字。
而不是我給CS50搜索標籤“註冊”。
>> 最終的結果是這樣的網頁，並再次，
這得到提交？
它被提交一些文件，這個值的action屬性，
這是register0.php。
讓我們來看看到底發生了什麼在這裡。
讓我繼續前進，填寫此表，說大衛，
男，馬修斯，然後我會說註冊。
讓我放大，然後點擊註冊。
好了，這樣一種無用的，但讓我們來看看什麼回事。
請注意，URL更改為register0.php。
奇怪的是不存在的URL，不過，即使我們只是提出的一種形式嗎？
[聽不見的學生反應]
好吧，這只是Chrome瀏覽器是用戶友好的，這些天。
這是實際存在的。他們只是將其隱藏以節省空間。
但是，好的想法，好的想法。
朝另一端的URL，雖然缺少了什麼？是啊。
[學生]的查詢字符串。
查詢字符串，所以記得從簡單的谷歌搜索的例子。
當我點擊提交按鈕時，URL
帶我去谷歌，但再有就是Q =計算機科學或什麼的，我已經輸入
這是因為我們的搜索示例使用GET方法。
>> 這一次，我們使用的是什麼方法，而不是？
發布，並立即區別之一
GET和POST之間是後並沒有把用戶的輸入的URL。
它隱藏它。它仍然將其發送。
事實上，我們所看到的在這裡在瀏覽器中，我們將揭示在某一時刻
在寄存器，我只是看到的內容
的陣列，從瀏覽器向服務器提交。
但URL沒有？，沒有任何關鍵字
或在它的值，這是為什麼呢？
好了，後允許您從形式到服務器提交數據，
但它並沒有把它的URL，所以什麼樣的信息後
特別適合於也許當你問用戶
輸入到表單中輸入？
像密碼一樣的東西，像什麼呢？
信用卡號碼。
凡是輕度敏感的你可能不希望結束的URL
如果只是因為它意味著你的室友或家庭成員都可以只是嚇嚇
您的互聯網歷史記錄，然後從字面上看您的密碼，
從字面上看您的信用卡號碼，因為大多數瀏覽器
記得在歷史上的任何網址，你已經在
因此，如果僅僅是因為這將是一個糟糕的主意。
使用後隱藏，詳細的用戶。
>> 此外，如何上傳到Facebook的照片嗎？
好了，你真的可以使用的只有2個機制，
儘管有其他一些更神秘的​​，是GET和POST。
你怎麼可能通過一個URL上傳照片嗎？
實際上，你可以做到這一點。
你可以把一個JPEG或位圖或GIF，你可以代表它在十六進制
或一些所謂的基地64。
而不是基地16使用基本64，基本上看起來像
ASCII字符，實際上，你可以通過一個URL上傳照片
後一個問號，但也有一般大小的限制。
大多數瀏覽器強制不超過1000個字符的URL，
也許2000個字符或類似的，所以你不能上傳
10 MB Facebook的照片。
對，你使用後，現在得到了參數中的URL，
這是很好的，有用的，有時，但對於任何敏感或大
後是要走的路。
什麼是寄存器實際上是在這裡做什麼？
好吧，如果我打開寄存器的注意，這是一個超級簡單的頁面，
但它證明了的事實，我可以混合，或好或壞，
HTML與PHP。
這整個文件，除了在頂部的意見，HTML
除了這傢伙在這裡。
>> 請注意，在我的PHP代碼中，
在我的HTML中，我暫時有幾分
進入PHP模式。
我調用一個特殊的稱為印記R的函數。
這意味著打印遞歸的，它的作用是遞歸打印
任何變量，你把它分號，退出PHP模式。
和PRE標記為您提供了預先格式化的文本，
單空間的文字，使每一個空間，你真正看到它。
它並沒有消失。是什麼職位？
那麼，什麼是有趣的和引人注目的PHP
是當你提交一個表單使用GET或POST
任何提交您的瀏覽器
PHP本身計算出這些鍵值對，
數字，如果有相等的符號，數字，如果有一個問號。
它為你做所有的辛勤工作，然後將它交給你一個關聯數組
含有用戶輸入到表單中的一切。
那麼，哪些領域沒有這種形式有哪些？
>> 它有4個領域。
一個是文本字段名為name的。
一個是稱為隊長的複選框。
一個是被稱為性別的單選按鈕，
，還有一個是叫宿舍的下拉菜單中，
所以注意到，當我打印遞歸
這個特殊變量的內容。
這是一個特殊的全局變量從字面上$ _POST，全部大寫。
這是一個特殊的全局變量，PHP只是為你創造
和手給你，讓你可以訪問一切
由用戶通過表單提交。
，調用print r上，你就不會這樣做在一個正常的應用程序。
我們這樣做是為了看到這個變量的內，
，什麼是它的內部，以及，4個按鍵，
4 HTTP參數，可以這麼說，
名，隊長，性別，宿舍，然後用戶的值
中鍵入一個例外。
我做了D-à-V-I-D型。
我檢查了箱子，雖然，男性，這顯然提交了一份價值
只是m為簡潔。
>> 當我選擇了馬修斯的價值，進行了選擇，
這個人是有點愚蠢，但它的慣例。
當我檢查的框，值上，“，”得到提交的複選框。
如果我沒有檢查，沒有任何價值將被送往任何責任。
這只是讓我們深入了解這個特殊的全局變量裡面有什麼，
它是如此特別，它被稱為超全局變量。
它的存在在你的代碼中到處找你，所以，你其實可以訪問它。
這是不令人滿意的，讓我們實際使用超全局
，實際嘗試註冊的人。
在froshims1我要做出一個改變。
我改變的行動是register1.php的，
和我做一件事。
我是通過我的網頁上有質量的一種尷尬。
說實話，這是非常可怕的，所以它原來
在網絡上，你可以很容易地使用
其他人的JavaScript代碼，其他人的CSS
他們編寫並開放了源代碼，並提供圖書館，
可以這麼說，例如，我在這裡使用免費提供的庫，
一堆別人寫的代碼。
>> Twitter的事寫這段代碼，這就是所謂的引導程序庫，
它只是一個CSS樣式表，一堆一堆的。css文件
別人寫的，並計算出如何讓一切都很好，漂亮
像我們這樣的人可以少擔心一點美學，重點更
在邏輯和實際的編程。
通過將包含該標籤的，這是我用相同的標記記住的styles3.css早期，
我現在有一個稱為bootstrap.min.css的文件的訪問。
只是意味著，他們已經精縮最小，他們已經擺脫所有的白色空間等等
只是，以確保他們沒有向我發送的字節數比我的實際需要。
但在有一大堆的CSS，所以如果我現在開的大一IMS版本1
請注意我的文件肯定是漂亮。
現在，它仍然只是黑色和白色，但是請注意，只是使用的樣式表
使用某些功能，這是我的形式不驚人，
但它肯定比以前清潔，並在投影機不這樣做正義。
周圍的按鈕和文本字段周圍有小灰線就在這裡，
但它肯定比以前更乾淨。
>> 現在，為公平起見，我沒有改變我的標記位。
這是第1版，請注意，我已經使用了一些新的標籤，
說實話，我不知道該怎麼辦，直到我讀的文檔
Twitter的引導庫，他們告訴我，如果你想使用我們的圖書館
使用fieldset元素在你的形式，
把你要顯示的字旁邊一個領域內的一個標籤，標籤，
然後給你輸入一個名字，就像之前，
的複選框，不僅你把它包在一個標籤元素，
你使用一類的東西，所以我們還沒有看到這之前，
但是你會看到在一個的pset中7的短褲。
CSS中的類可以讓你做的東西非常相似的ID，
但在此之前，當我們有一個ID以＃符號
這是一個只有一個元素。
什麼是一類很好多個元素具有相同的類
或相同的CSS的東西應用到它。
>> 但同樣，對那些在短期內，剩下的這僅僅是複製和粘貼
從他們的文件，我添加了一個標籤，在這裡和那裡。
在最後，因為我已​​經包含在上面的鏈接標籤，
一切看起來更漂亮自動
通過簡單的標記的方式，在我的網頁
Twitter的預期，有這麼多不同的方式
做到這一點，這確實是非常合適的。
在本學期在這一點上，你會看到在pset中7的規格，
谷歌搜索，閱讀庫，用別人的CSS
和JavaScript來解決配套問題
組本身的問題，肯定是鼓勵和方式
網絡是建立這些天來，站在別人的肩膀上
所以，你可以真正著眼於新的和有趣的問題。
但是，讓我們現在的重點，再次，邏輯。
>> 這是一個快速迂迴美學只是為了顯示你的方向，你可以去。
我要恢復的醜陋，現在僅僅是因為
有與Twitter的東西，心無雜念，讓我去進取，不斷開拓
froshims2，再強調一下，只有在不同的動作，register2.php，
讓我們來看看什麼樣的影響是在這裡。
讓我繼續前進，輸入大衛。
我不會隊長這個時候。
我會說男性，馬修斯，寄存器。
該死的。好吧，這是一個搞砸了我的一部分。
待機。
寄存器2，第22行，如果為空或遺憾。
讓我們重新加載。
好了，在提交這種形式剛剛發生了什麼？
我在大衛的輸入，檢查男馬修斯，註冊，點擊。
您的註冊。 （當然，不是真的。）
這顯然是一個超越剛剛打印出來的一些變量的內容，
但是這是什麼文件，實際上是在做什麼？
在register2.php
請注意，我有一些新的代碼。
我的身體標記內，我基本上是一個if else結構，
但是，因為我共同交融與一些HTML
我來回的進入和退出PHP模式，讓我們看看我在做什麼。
>> 在這裡的第一線，我說如果是的情況下
後超全局的關鍵名稱是空的，
換句話說，如果用戶沒有給我一個值名稱的形式，
然後空返回true，因為值是空的。
或注意到的豎線如果性別是空的，
內部的這個特殊的超全局，其中，再次，表示內容的形式，
或在宿舍裡是空的，然後我會繼續前進，大聲嚷嚷的用戶。
怎麼樣？那麼，請注意，我說，你必須提供您的姓名，性別，和宿舍。
讓實際導致這樣的錯誤。
讓我回到我的形式。讓我重新加載，以清除它。
，我只是給他們大衛，他們並不需要知道我住的地方。
註冊。很顯然，我需要告訴他們我住的地方。
您必須提供您的姓名，性別和宿舍。回去。
>> 我可以點擊回到這種形式，但是這是為什麼呢？
那麼，在這種情況下，名稱是空的，但性別的，和宿舍，
所以整個表達式的計算結果為true，即使是一點點新的語法，
再次，我們進入PHP if語句模式，熟悉，
但新的部分是冒號，我搞砸了，省略了括號
偶然的，而是注意冒號，這意味著
即使我們退出PHP模式一切
應吐出一字不漏的瀏覽器
直到你看到一個else塊中，因為我們在這裡做的，
在這種情況下，你應該吐了這一點
直到你看到的ENDIF，所以微微有些新的語法
，讓我HTML和PHP之間的切換。
最終，我們可以清理它，但現在，
它是一種形式的錯誤檢查一個令人信服的方式。
>> 現在，我說你不是真的，因為很明顯，我們什麼也沒做，但數據註冊，
讓我們真正嘗試做一些很酷的東西。
在froshims3唯一的區別是，我會向寄存器3，
所以HTML是相同的。
在寄存器3注意到這一點。
這是一種性感。
我頂使用require語句中的，所以這是如＃include。
這一次，它不是stdio.h中或類似的東西。
這是一個PHP庫，以及一個被稱為PHPMailer的。
我怎麼知道正是這包括引號的字符串？
我讀了它在文件中，所以當他們告訴我把這個頂部的文件
如果你想使用一個特殊的庫稱為PHPMailer的，做什麼，它說。
它可以讓你通過發送電子郵件的PHP。
現在，讓我們繼續向下滾動。
>> 請注意，開始我在PHP模式，
所以，現在發現在這裡導入該庫後，
可以這麼說，我做了一些合理性檢查。
如果它是這個名字不為空的情況下，
和性別是不為空，注意感嘆號
宿舍是不是空的，那麼用戶已在邏輯上填寫的表格，至少要有足夠。
我不在乎，如果他們的隊長或沒有。我只需要他們的姓名，性別，和宿舍。
如果他們填補這些了，沒有這些字段是空的
這是稍微新的語法。
順便說一句，PHP，是一個面向對象的編程語言
你們可能還記得從APCS或類似。
現在，如果不熟悉，只知道使用這個庫
你必須寫一行代碼，像這樣使用一個新的關鍵字，
從字面上一個新的關鍵字稱為新的。
但除此之外，我們有一些熟悉的語法。
這是一個箭頭操作符，我們使用的指針的上下文中的結構是類似的。
今天，PHP沒有指針，
但現在知道這裡面的郵件變量
本質上是善良的指針一個特殊的庫
別人說，如果我想訪問特定的功能
該庫裡面我做什麼，和C一樣，使用箭頭操作符，
即使這些實際上不是指針。
這是PHP自己的版本。
這意味著，去圖書館，和調用的IsSMTP的功能。
從我們的戰士的淨SMTP，召回，是指到電子郵件，
這只是意味著使用這個大一IMS註冊的電子郵件服務器。
>> 我要使用什麼主機？
那麼，哈佛，如果你谷歌周圍，有的郵件服務器smtp.fas.harvard.edu。
如果你在家裡打你住在一個Comcast網絡
它可能類似smtp.comcast.net。
這完全取決於你住在哪裡，你的ISP。
之後，我要我的地址任意jharvard@cs50.net。
然後，我打算設置解決jharvard@cs50.net的。
只有這樣，我知道，這些功能被稱為SetFrom和AddAddress
是，我再次閱讀文檔。
這是不樣的神奇的所有程序員。
然後，我定下了一個主題為“登記”。
現在有點難看，因為這條線是什麼點運算符的意思是在PHP？
任何人都知道嗎？
串聯。
在C語言中，這是一個痛苦在脖子上連接兩個字符串。
你必須處理malloc或realloc或所有的東西
只是延長其長度的字符串。
在PHP，JavaScript和其他語言
通常，你可以做一個單一的字符。
在這種情況下，點是指字符串
並追加到這個字符串。
>> 哦，順便說一下，追加到該字符串，
這恰好是，超全局變量裡面的。
然後附加到一個新的生產線，因此所有的這些點僅僅意味著
繼續作出越來越大，大字符串，
你不必關心在所有的malloc或類似這樣的語言，
有其他的方法來做到這一點，但是這是一個最快的
的方式展示出來。
這是什麼做的嗎？
它創建一個電子郵件正文中，要說出名字：船長：性別：宿舍：
在單獨的行，然後最後，
一行代碼，而我現在將忽略此。
如果== FALSE意味著，如果出事了，
但魔術在這裡發生的。
郵件發送方式發送這封電子郵件。
讓我們來看看最終的結果是什麼。
在該文件的底部，發現它會說你真的是註冊
如果我走到這一步。
不過，如果用戶螺絲，請注意，我們開始了這個
如果條件在這裡，如果它不是空的，而不是空
，而不是空的，我們發送的郵件。
否則，我們將發送下面這行代碼，
這是有效果，你會看到在pset中7，將用戶重定向
回到他們原來的地方，froshims3.php。
>> 手指交叉，否則，這將是今天最令人失望的演示。
在這裡，我們走了。
讓我打開我的郵箱在Gmail的收件箱jharvard。
現在沒有電子郵件。好的。
現在讓我開了froshims3，這是第三個也是最後一個例子，我們來看看在這裡。
好了，在這裡，我們走了。
內特，他會是隊長，男，說，Apley。
註冊。好吧，你真的註冊。
如果我現在滾動到我的郵箱，哦，我的上帝。
我剛才動態在網絡上發送了一封電子郵件。
>> 讓我們留在那筆記。
一個視頻是即將到來的演講中，我們錯過了。下週見。
[CS50.TV]