[Powered by Google Translate] [第8條] [舒適]
內特 - 哈迪森] [哈佛大學]
這是CS50。[CS50.TV]
>> 歡迎來到我們的第二個到最後一節。
在這一周中，我們將談論PHP，然後下週
我們會做一個小小的回顧測驗1。
我們要開始第3頁的問題設置包，
我們將繼續努力通過部分的問題相當迅速。
第3頁，我們開始談論C和PHP之間的這種差別
在這個意義上，PHP是一種動態類型的語言，
而C是靜態類型的，
有沒有人真的很快做任​​何編碼的東西像PHP
或Python或Ruby之前，JavaScript的？
全新的嗎？好吧。
>> 我剛才提到的所有這些語言
有很大的不同的語言，如C和C + +和Java
在這個意義上，當你聲明一個變量時，你沒有申報
它是什麼類型的變量，所以在C我們不得不總是說
這將是一個int變量，這將是一個char *變量，
而與PHP，Python和Ruby的，
這些更現代的語言有很多，你沒有這樣做，在所有。
你只申報的變量，而在PHP的情況下，
你聲明一個變量前面加上一個$符號，
然後變量的類型確定的由持有任何值，
這是一種很酷。
要玩這個一點點，我們在這裡有PHP代碼示例
之間的開始和結束標記。
我們使用的是在這個意義上，這有點像HTML
我們已經得到了這些尖括號這裡打開和關閉。
你會看到這一點HTML。
你會看到相同的語法與XML。
>> 這表明一個PHP代碼塊的開始。
這PHP是特定的PHP。
我們關閉了？以及一切。
讓我們打開一個文件可以使用任何你想在我們的設備。
在這個包中，它說叫dynamic.php的。
事實上，你可以把它無論你想要什麼，但文件名會
是重要的，所以後來只記得無論你怎麼稱呼它。
我要切換的設備，
我要創建一個目錄
第9條，我相信我們在現在。
我們將進入第9，
我將用gedit。
讓我們來看看，gedit的，我現在就打電話給我的dynamic.php。
轟。
在dynamic.php內，因為這是一個PHP文件
我想通過PHP解釋器來運行這個
我需要一切重新開始關閉與打開的標籤，
所以我要馬上啟動這些，
給自己一點空間在標籤之​​間的，
這個練習是玩弄
這個函數調用的getType，這樣的getType，這個功能在這裡。
>> 請注意，有沒有下劃線或空格或連字符或類似的東西
分離的2個字，然後鍵入，只有一個詞完全。
但是，這是什麼做的是，如果我通過在一個變量中的getType，
說是$ var $ X，
這會告訴我在調試格式
該類型的名稱是什麼。
我們將在這裡進行試驗。
特別是，如果你回頭看看在pset規範
我們這裡有幾個不同的代碼行。
我們在第一行代碼初始化這個變量，$ var的，
等於7，然後我們有這個printf線
說哎，printf的變種是空白。
printf是一個在許多方面我們可以打印的東西在PHP。
通常，你會看到的迴聲代替了printf函數，
但輸出，我們都熟悉的已編碼在C一段時間。
你其實可以做的是，讓我們來看看，如果複製和粘貼工程。
我要試試這個。
我們會回去的設備。
好了，我們走吧。
間距是有點古怪，但在這裡，我們走了。
在這裡，我們已經得到這個代碼。
>> [學生]：它沒有良好的作風選項卡中嗎？
你說什麼？
[學生]：常規選項卡中嗎？
對，所以山姆問，如果是公約的選項卡或不。
通常情況下是肯定的。
在這種情況下，我選擇了不。
老實說，你會看到不同的東西，不同的程序員。
通常經常使用的PHP與HTML相結合
和其他語言，所以有時印刷看起來有點時髦
如果你在PHP開始和結束標記的縮進。
這真的視情況而定。
在這種情況下，複製和粘貼沒貼的標籤，對我來說，
但它絕對不會像你說的，使更清晰。
好吧，如果你這段代碼保存在dynamic.php
然後你可以做什麼，回落到終端窗口，我就在這裡
在gedit中，相當於做編譯
使用make，然後運行你的代碼，在C
所有你必須做的PHP文件是啟動PHP解釋器，
這是一個小程序調用PHP，
你給的解釋，爭論的焦點是你想要的文件解釋。
在這種情況下，dynamic.php。
哎呀，我把它放在了嗎？
哦，我把它在第9，和我在這裡。這就是為什麼。
>> 如果我現在，再次運行
我們看到，在我的第一個GetType函數調用
var是一個整數。
在接下來的一個var是一個字符串，然後在第三個變種是一個布爾值。
有趣的是，如果我們向上卷動，我們看到，
這些都是類似的，我們已經在C.類型
我們有整數在C
我們有字符串在C，
所以字符串是不是在這個意義上的完全合法的類型
我們的CS50的字符串是真的什麼？
你說什麼？大小姐嗎？
[大小姐] CHAR *。
是啊，是我們的char *。
在學期開始的時候，我們使用的字符串類型，
但這確實是一個char *引擎蓋下。
我們剛剛定義的類型，而在PHP中，這些字符串是一個實際的類型。
有沒有更多的這char *類型的東西。
>> 你會看到，我們可以做更多的事情與字符串
更容易在PHP比我們在C，
然後終於，我們有這樣的布爾類型，與這裡最大的區別是，
如果我們滾動回落，我們看到，這些類型的名稱
是整數，字符串和布爾值的，而不是整型和bool
你拿起不同的編程語言，
假設在一些點在你的生命中，你會接觸到
不同的人，你會發現像這樣的小怪癖
其中，C調用整數int類型。
有人稱之為整數。
還有其他的條件，你會碰到。
大整數，我們今天看到的SQL。
也有號碼，然後布爾型，布爾型，
所有各種差異有。
>> 這是非常有趣的，但是現在，我去給你一點點的時間，
如果我們放大的工作，通過這個練習在第3頁的底部
在要求什麼類型對應於這些值在底部。
我們有3.50。
我們有這樣的事情就在這裡，這是有趣的。
我們還沒有看到過，但如果你一直跟著在講座
你可能已經知道那是什麼。
然後，我們有這樣的，這是一種時髦的。
您承認這一點。
在C這是什麼嗎？
山姆？這讓你在C？
這將打開一個稱為dynamic.php的文件，並使其可讀。
是啊，會是什麼類型的變量，我們將分配？明星>>文件。
沒錯，我們會分配到一個文件中的明星。
這是合法的PHP。
運行。看看會發生什麼時，其傳遞到的getType。
然後還要檢查null是什麼，是什麼可能是在PHP。
我給你一兩分鐘。
你可以從字面上複製和粘貼這些值，
然後我們會做一個小的隨機呼叫您
看你得到了什麼。
>> [學生]：我有一個問題。“是啊。
在一次演講的大衛說有什麼東西，你可以把你的文件的頂部
所以，你不必每次輸入PHP。
那是什麼？
他可能是在談論磅砰，哈希爆炸。
這是一個指令，如果你標記你的文件，可執行文件
那麼它的作用是當你執行該文件時，
它會告訴shell程序
使用PHP解釋器來解釋該文件的內容。
問題是，這個特殊的線是什麼
我們可以納入我們的PHP文件的頂部沒有包括
這個PHP線或本的PHP命令時，我們要執行的文件嗎？
實際上，你可以做到這一點了一堆不同的文件。
我認為這取決於PHP二進制文件存儲在哪裡，
但往往usr / bin中/ PHP是一個良好的開端。
您可以明白這一點正是由會回落到您的設備
輸入PHP。
哪個命令時，你正在執行的二進制
相應的文件或命令。
這告訴我，PHP是真的走樣二進制文件
是存儲在usr / bin中，這是那裡有很多的系統的二進制文件的安裝。
例如，如果我滾動到頂部，現在我已經把這個＃！在這裡
我可以向下滾動，我可以嘗試運行
的dynamic.php，但我得到這個錯誤被拒絕的權限，
是什麼意思的是，該文件目前尚未提供可執行權限。
它未標記為一個文件，有人可以運行。
>> 當你運行make或鏗鏘，你有一個可執行文件
編譯器足夠聰明，知道，嘿，我建立一個可執行文件。
您可能要執行的，所以它會自動配置
你的權限。
雖然，這是沒有的情況下，當你從頭開始創建一個正常的文件，
原因通常你不希望有任何文件在您的系統上的可執行文件，
所以你確實有去和手動做到這一點。
做到這一點最簡單的方法是使用chmod命令，
使用chmod + x表示添加的可執行位
因為有讀位，寫入位的可執行位，
R，w，和x，
並說使用chmod + x打開的可執行位
為然後文件我們指定在這種情況下，這將是dynamic.php。
>> [學生]：是，轉身就為大家嗎？
讓我們檢查了這一點，因此，如何將我檢查的權限嗎？
你知不知道我怎麼會檢查，以查看權限的文件嗎？
[聽不見的學生反應]
你說什麼？>> [學生]：XSD。
XSD為我們提供了黑客中的文件。
列出所有的文件，L，會告訴我我的目錄中的所有文件
種在長期，詳細列表，所以在這裡我們可以看到，
這dynamic.php文件
11月5日的最後修訂在4:21 PM。
這個文件的所有者是jharvard。
這是用戶登錄
這是我工作的用戶，
如果你在家電，你也工作用戶jharvard。
你在學生群體中，
這些事情，你會經常看到。
>> 我們可以在這裡投入了大量的細節，
但在大多數情況下，你想看看什麼當你想看看
不是一個文件是否是可執行的主要是
誰擁有該文件的用戶，所有者，
所以這的jharvard，然後我們有
在這裡在左邊的權限位，
的方式來閱讀，這是最後一位
通常被用於標記是否未至少在這種情況下
這最後一點往往會被設置為廣告顯示
該文件是一個目錄，而不是只是一個普通的文件。
以下3位在這裡
確定該文件的所有者的權限，
所以在這種情況jharvard，作為該文件的所有者，可以讀取和寫入這個文件，
但有一個破折號說，jharvard無法執行此文件。
接下來的3位組，所以這是學生群體，
因此，如果有多個用戶我的產品，
我們有多個用戶的學生組的一部分，
他們都可以讀取這個文件，但不能寫，
同樣，任何人都，世界
只能讀取這個文件。
關於這是一個良好的，長期的書面記錄，
這樣你就可以在線閱讀。
問題集規格，我們進入更詳細。
>> [學生] 218指的是世界嗎？
218，我忘了，離我的頭頂部
但沒有。
讓我們來看看。我消隱上是正確的。
回到我們做這個使用chmod + x
在這裡我們想，給dynamic.php的可執行權限，
問題是，這是否會給可執行文件的權限，每個人都
或只是jharvard，我們可以看到這一點
執行上面的命令，並輸入ls-l，
現在我們看到它標記為可執行。
你可以看到，有顏色的變化。
現在dynamic.php被列為綠色，
它看起來像這個問題的答案是什麼，夏洛特？
夏洛特] jharvard。>> jharvard，是的。
>> 如果我們想為大家打開可執行位
我們是如何做到這一點呢？
有什麼想法？>> A + X？
是的，沒錯。
夏洛特說，我們所能做的屬性A + X的dynamic.php，
現在如果我們運行ls-l我們可以看到，可執行位
確實就為大家打開。
實際上，你可以做反向，所以你可以把它關掉為大家
使用負。
現在，它的關閉，現在我們可以把它為jharvard
所以，我們實際上可以運行它，現在，
現在你看到的，當我們運行這個特殊的代碼＃！的頂行，
＃！線，告訴外殼，
告訴我們的終端哎，這個文件運行時，
使用/ usr / bin中/ PHP來解釋這個文件
然後打印輸出。
[聽不見的學生問題]
當然，讓我向後滾動。就這樣。
你會看到所有的這些指令開始的這一磅，然後驚嘆號，
有時也被稱為一個家當，哈希爆炸。
>> [學生]：我們可以運行它與PHP dynamic.php前，我們把它變成可執行？
問題是我們如何可以運行使用PHP二進制
，而dynamic.php是不可執行文件？
這是超級重要的，因為這正是
它在工作的時候你寫的習題集7。
大部分的時間PHP文件不是直接執行的。
可行的方式，是因為它是PHP二進制文件的可執行文件。
翻譯是正在執行的東西，
所以它在做什麼是真正的slurping是在整個內容
我們dynamic.php文件，一行行
執行這些命令，所以它的使用我們的PHP文件
作為指令的列表。
它不直接執行它。
這就是我們說，這些文件在運行時解釋。
這是一個運行時的語言，而不是在編譯時確定的東西是，
不是編譯性語言比如C。
>> 是否有一種方式來獲得運行時語言，行動，如果它是一個編譯時語言，
就像如果你把所有的運行在服務器上完成
，而不是你知道我的意思嗎？
是的，所以問題是，
有一種方式來獲得運行時的語言更像編譯時類型的語言嗎？
還有，我的意思是，這是一個活躍的研究領域進行了大量的這些公司。
我相信，Facebook已經做了很多工作，PHP
並編譯它，使其速度更快，優化
因為他們的網站是建立在PHP。
如果你已經node.js的一切，
這是一種一個JavaScript解釋器
能夠運行JavaScript的瀏覽器之外，您的Web瀏覽器之外，
因為傳統JavaScript的只是內部運行的Firefox或Chrome瀏覽器，
，而且將被用來使很酷的動畫在網頁上發生
使你的網頁動態。
這是建立在谷歌做了很多工作，
讓JavaScript和C + +
結合在一起，所以有很多活躍的研究領域，以
這些語言交互，並對其進行優化，
主要是因為這麼多的人可以在PHP和JavaScript代碼
因為它是一個非常容易。
這是一個非常和藹。你沒有指針。
您不必四處飄蕩的類型。
他們希望獲得的好處，這些編譯時語言
與所有類型檢查的速度和更低的內存使用率和所有的
同時仍然保持使用這些新的靈活性和易用性。
>> 回到我們原來的計劃的攻擊。
我們已經獲得了一些對這些問題，在這裡我們的問題集規格。
讓我們通過他們真的很快，我們會在房間裡。
夏洛特，是什麼類型的3.50？
[夏洛特]這是一個雙重的。>>這是一個雙。
吉米，什麼是下一個嗎？>>陣列。
一個數組，真棒，和Jared的fopen是什麼？
[賈里德這是一個資源。>>這是一個資源。
這是一種新的，而不是一個文件明星，而不是一個文件。
這是一個資源類型是在PHP，
對不起，ELLA，最後空是什麼？
空。
空，它是如何拼寫的PHP？>>用同樣的方法。
用同樣的方法，資金嗎？>>呀。
是啊，所有的權利。
在這裡，我們走了，我們已經得到了一個雙重的，我們已經有了一個陣列，
我們已經有了一個資源，然後我們已經得到了空。
現在讓我們來看看你見過
讓我們來看看，所以現在我想，我也希望做的是拉
此網頁在這裡，php.net /手動，
所以，如果你們複製，打開Web瀏覽器。
我要拉了Chrome瀏覽器，，在。
我想告訴你這不僅僅是因為
我們可以談論所有天左右，類型和所有有趣的東西
而是因為這是PHP手冊，
有很多PHP程序員在那裡。
在那裡有很多的PHP網站，
，因此，有大量的文檔，PHP，
和手冊，這php.net，是一個很好的地方去
只要你有問題，什麼是最好的方式做X在PHP
什麼是一個功能是什麼樣子？
只是一種熟悉，這看起來像什麼，因為
你會來到這裡的時候，一個位問題7。
>> 如果你最終做最後的項目，使用PHP
這將是一個地方，你會變得非常熟悉。
通常情況下，人們能做到這一點的是，他們使用谷歌搜索的網站，
他們不使用的搜索框，在這裡的右上角，這是一種微小的。
如果你在谷歌搜索周圍用PHP做的東西，你會看到
本手冊的鏈接彈出，通常可以依靠
作為一個相當不錯的資源。
真棒，做出來的這些類型，只是出於好奇，
哪些我們沒有見過？
我們還沒有看到這裡的內容嗎？
[學生]：資源。我們看到了資源與fopen的調用。
[學生]：對象。對象是肯定的，我們還沒有看到。
回調我們還沒有看到。
有一些這些偽類型。
我們確實只看到了整數和雙。
我們沒有看到一些其他的，所以如果我們點擊整數
我們可以看到的是，他們在這裡有任何其他的整數？
難道他們全都是這樣的整數，整數，整數。
有些語言有更大的整數類型，
就像我們今天在MySQL中看到的是int，然後大整數。
酷。
>> 所以，PHP手冊。
讓我們回到我們的問題的一套規範，我們現在將向下滾動到第4頁。
發生的事情，當你收到這些語言之一
沒有這個靜態類型的語言，所以這些，你必須聲明
類型的一個變量了前面
你的情況下，你可能會開始有不同類型的變量
彼此相互作用，
和PHP做這件事情的，它試圖做
它認為是最明智的事情
當你有2種不同類型彼此交互的。
例如，如果我們看一下這幾行代碼在這裡
你看，我們已經得到了時會發生什麼
我們嘗試添加串1的整數2。
會發生什麼，如果我們嘗試添加一個字符串，它是不是一個數值
而是實際的字符數50，CS嗎？
然後我們會看到有不同的情況出現
而不是添加一個字符串到數字，我們要添加一個數字到字符串，
等等等等的地步，我們要
某種奇怪的東西，在這裡我們已經得到了7 +真實。
這到底是什麼意思呢？
>> 如果你們去一些代碼並粘貼到您的設備。
您保持在dynamic.php。
我們將看看會發生什麼。
[學生]：只要使用打印，不是printf？
是啊，所以你會發現，也是一個有效的打印功能打印PHP。
有許多不同的方法做這件事。
以後，一旦我們開始談論我們會看到一對夫婦的例子
唯一的問題是我們要編寫的
然後將濃度問題，我們要編寫
即使我們有FOPEN和fclose
往往不讀取一個文件的內容的最簡單的方法。
PHP有很多這些C-遺留下來的。
[學生]：當我把所有的那些東西，我只得到一個數字作為輸出。
內特H.]當你把所有這些東西。
讓我們來看看它，因為它可能
有一件事是在新的生產線，這些打印調用不會終止。
有沒有新的生產線分離每個這些打印電話，
所以，也許你得到一個大的數量，
它實際上只是汞合金的新行字符。
[學生]：好了，怎麼我確保
那麼，有一堆不同的方式。
你可以手動將在一個新行字符打印，
新行字符的迴聲，
打印新的生產線。
[學生]：所以迴聲如printf是一樣的東西嗎？
>> printf是像C的printf
您要打印的格式化字符串。
你提供的格式字符串，然後所有的佔位符變量。
這是經常不使用的東西，
讓我們來看看，作為一個聲明，
我不太熟悉PHP比我其他的網絡語言，
當我在PHP編程，我通常不使用printf
因為我發現它使用的字符串插值功能，它有更快，
我們將去，我會告訴你，在短短一秒鐘，
而在C中，我們有做到這一點哈克的事情，得到它的正確打印。
實際上，你可以直接把變量轉換成字符串在PHP。
printf是過於長，我通常做的那種。是的，艾拉。
[雲裳]一般來說，如果你得到分析錯誤是什麼意思
像在C，它不會告訴你確切的錯誤是什麼，它是，
這是否意味著看看通過整個代碼和數字呢？
這是典型的比這更有針對性。
在這種情況下，我認為這是一個有點偏離，
所以，我認為，在這種情況下，我們缺少一個分號。
它試圖讓一切的感覺，
這樣的解釋型語言，解釋是要嘗試
盡最大努力使一切工作適當。
>> 你會看到，例如，在JavaScript中
你會經常行語句結尾的分號，就像他們在PHP中，
就像他們在C.
在JavaScript中的JavaScript解釋器
在很多的瀏覽器會把你在分號
如果你碰巧缺少。
他們會嘗試和適應上的一些疏漏。
這可能嘗試和努力，並試圖把事情的工作，
，然後最後會得到一個點，它說沒關係，
我不能讓工作想逃，這就是你會得到一個行號
這可能似乎有點偏離的確切地點。
好吧，讓我們通過這個真的很快。
我們與Ella，讓我們去大小姐，
大小姐，是什麼打印字符串1加2給你嗎？
[大小姐] 3。>> 3。
這是否有意義嗎？排序的？
它給你一個數字？它給你一個字符串？
[大小姐]一個數字。這是一個數字。
但它的印刷，所以它給你一些字符串排序。
>> 有一件事我們可以做檢查了這一點
如果我們這樣做是$ var = 1 + 2
然後我們說的getType的迴聲，
因此，我們使用的是第三類印刷在這裡。
現在，我們可以看到這裡發生的一切。
在這裡，我們得到的是我們得到了整數。
即使我們添加字符串到數字，
我們沒有得到一個字符串，它就像大小姐說。
我們得到一個整數。
好吧，讓我們來看看，第二天起來，凱文。
CS + 50？>> [凱文] 50。
[內特H.] 50。這是否有意義嗎？
[凱文]是啊。
[內特H.]為什麼呢？為什麼對你有意義嗎？
[凱文，因為它只是字符串的數值為零。
是啊，太好了。
這種模棱兩可的情況下，但它的好，知道會發生什麼。
斯特拉，1 +字符串2號接下來會發生什麼？
[斯特拉] 3。>> 3。
在這種情況下，我們得到了一個字符串或數字？
>> 讓我們試試這個。
任何人比我更快得到答案？夏洛特？
哦，我沒說好了，讓我們來看看，我們將做同樣的事情
在這裡我們已經得到了一個號碼加一個字符串，並且我們要響應的類型，
看看我們。
我們還得到一個整數。
不要緊，哪一個是，哪一個是數量的字符串。
我們仍然要得到一個整數。
它仍然會做什麼，我們所期望的。
所有的權利，所以Sam，90 + 9瓶啤酒在牆壁上？
[三] 99。>> 99。
沒有啤酒瓶在牆上，雖然。
它為我們提供了一些信息發生了什麼事。
[三]如果你寫的信中
那麼你將有90吧？
[內特H.]是啊。
現在的問題是，如果我們寫N-I-N-E
我們已經獲得了99或90？
我們會得到90。
它實際上只是尋找數字字符。
這是不足夠的智慧認識數目字的東西。是。
>> [學生]：是有這樣的事情在PHP中類型強制轉換？
目前，它是完全相同的方式，你會做的C.
約10/7，夏洛特？
[夏洛特1.4285。
內特H.]是啊，所以可能是什麼奇怪呢？
會發生什麼，如果你這樣做同樣的事情，在C，
如果你做了10/7在C？
夏洛特]只會給你，取決於你如何typecasted我想
它會給你只有有限數量的小數點後的位數。
是啊，所以數量有限的小數點後的位數。
還有什麼可能將它給你任何小數點後的數字嗎？
通常，如此反复，這取決於你如何映射
它可能會或可能不會將它轉換到一個浮點數。
在這裡，它是一種不錯的，它沒有。
如果我們你回來的時候我們就開始做這種東西在C
它可能會作出一些更有意義
它不只是去1。
最後，傑米，然後約7 +真實嗎？
[傑米] 8。>> 8。
這是什麼意思呢？
我猜它只是提供了真正的值為1。
是啊。如果我們改變為false，會發生什麼情況呢？
[學生]：7。
是啊，所以請記住，我們談論這些二進制值，
1，0是關閉？
現在我們有真正的值為1，0是假的，
，你可能沒有看到這在C的例子，我們已經做到了這一點過去的學期，
bool類型在C，但在歷史上，還沒有一個真正的類型，
所以人們用0和1的真假。
這是一個體現的是。
>> 好了，所以這一切的一個重要組成部分
是，我們有這些不同的類型。
它們可以彼此交互。
他們往往可以互相交流的方式很不錯的，因為我們在這裡看到。
真的很高興能有串1和2號，加在一起，得到3。
這是有道理的。
然而，當你寫的網站，尤其是當你正在處理
用戶輸入的，所以說你寫了一個Web表單
收集來自用戶的信息，然後進入處理它
在後端，在你的PHP代碼在服務器端
如果你期待值，用戶輸入並提交
形式是一個整數或浮點數的或類似的東西
你需要明確地將它轉換
，然後做一些類型檢查。
>> 你不想僅僅依靠這種類型戲法的系統，以使事情成功，
尤其是出於安全考慮，只為您的網站的魯棒性。
只是要記住，只要你處理表單數據，
任何東西來後或GET和superglobals
請確保您始​​終驗證它，並把它轉換和強制轉換。
就像我們談論了一會兒前，類型轉換
在PHP是完全一樣的，在C，你必須在括號
然後該類型。
記住這一點。
一個功能，將派上用場，當你這樣做
我們已經使用，這是​​一種順便說一句，
我們一直在使用這個GetType函數在這裡
找出一個變量的類型，
，而這是非常方便的進行調試，並看到一個變量的類型是什麼
你不希望使用這一點，例如，在一個條件
你檢查，看是否是$ var =整數的getType的做一些事情。
這是一個壞，壞，壞。
取而代之的是這些調用的函數是整數，字符串，
是數組，你要使用，所以在這種情況下，
我想這樣做，而不是這傢伙在這裡
是使用的是整數的變種。
他們通常被稱為是IS_ *在這個意義上，你可以更換*整數，
字符串，等等，只是非常快的，以確保
這是詮釋PHP。
看起來像你可以做的是int或有整數以及？
是的，別名，所以int整數的別名。
酷。
>> 我們要怎麼做呢？
讓我們加快腳步一點點。
現在，我們要談談數組，所以你可以看到
在我們談論如何在PHP數組的下一個部分的規範
略有不同，它們是在C
事實上，他們的汞合金
你已經認識到，愛在C的陣列
這裡的一切是相同的類型的
連續和連續存儲在內存中，
你有這些數字指標。
您有索引，索引1，索引2 0，
存儲在這些指標的值。
您還可以在C，你寫的拼寫時，有不少人
做了哈希表的做法，你看到我們在那裡有
不同類型的存儲，我們映射
一個鍵的值，所以當你試圖存儲在哈希表中的東西
你必須指定你想存儲與特定鍵，
和確定該鍵的位置的值，並在將被存儲。
您已經種了這些概念都發生在同一時間在一個PHP數組，
，因此，我們常說這些關聯數組
當我們一個鍵關聯的值。
在接下來的部分，我們講一個簡單的PHP數組
在那裡我們有鍵a，b，和c，
所有字符串，映射到整數1，2，和3。
你可以有不同類型的鍵。
>> 你可以有一些鍵是字符串，有些鍵是整數。
你可以有不同類型的值。
你可以有一個值，該值是一個字符串，這是一個整數的值，
值，這個值是一個對象或另一個數組，例如，
在相同的數組對象，這是一種奇怪的。
您不必有一個數組，只是得到了一個類型的元素。
你可以有許多不同的東西在那裡。
另外要注意的是，當你看到這樣的事情在你的代碼，
這是合法的PHP宣布就這樣，陣列0，1，2，3，4，5，
將宣布這個數組的初始化改編。
但你實際上得到的引擎蓋下是這種隱
鍵，我們已經得到了0至0，1對1，2 2，3 3代。
而事實證明，即使你做了這樣的傢伙在這裡有一個數組
在那裡你有A，B和C的鑰匙
然後你開始使用數組push方法開始使用這個數組就像一個堆棧，
所以你可以看到這個數組，這個數組對象，實在是過載。
我們可以使用它作為一個數組。我們可以使用它作為一個哈希表。
我們可以使用它作為一個堆棧。
當你開始推動的事情到這個陣列
你的第一件事情推到這個索引為0，然後索引1索引2。
你可以得到這樣的隱式密鑰的生成的
除非你明確指定。
你明確指定鍵的方式，當然，使用這種支架符號，
這是類似於數組除外，而不是只允許
在這裡的整數索引，現在我們允許任何東西。
如果你想你的關鍵，是一個字符串，你會像這樣指定。
如果你希望它是一個int，您指定的詮釋您要使用的。
>> 的問題上，迄今為止嗎？
關於這個想法的好東西之一
是，你永遠只能有一個值存儲與特定的關鍵。
如果我們回到我們的設備讓我刪除了一些這方面的東西。
比方說，我初始化為0，1，2，做一個陣列。
如果我現在知道，例如，如果我echo $到達[0]
我要打印出來的值為0，
因為永遠只能是一個值存儲為一個特定的鍵
如果我儲存的東西在$改編[0]，說，
後來我才知道，當我echo $改編[0]再次
我不打算打印出來前得到0。
我只是要得到一個。
因此，這基本上是說，我可以沒有到達[0]存儲2個不同的值。
它不能存儲0和字符串a，像這樣從字面上取代
什麼是在$ ARR [0]以前。
我之所以提起這件事時，它會看看會發生什麼。
看到這裡，我得到了0打印出來，然後在這裡。
有沒有新的生產線，因為我是個懶人，並沒有把它英寸
什麼是酷的是，我們可以用這樣的一種方式
捕捉到了這個念頭一組
我們不能在一個陣列中有多個密鑰。
我們不能有相同的鍵，在一個陣列。
我不能讓鍵0和值1和0鍵和值一
或0鍵和值true。
這些鍵都只有1數組中的鍵。
即使你可以有相同的值存儲
陣列中的不同的密鑰下多次
在你的PHP數組具有相同的鍵多次，這是不可能的。
>> 如果我們看一下在這個未來的問題，unique.php，
我們要打開一個PHP文件
包含一個字符串列表，每行一個字符串，
我們要在該文件中找到的唯一的字符串
我們要做的是使用這些PHP數組
和在文件中使用的字符串到這個數組中的鍵
並不斷更新我們的數組，因為我們這些新的密鑰存儲。
當我們讀出來的文件的每一行，我們可以將其存儲在數組中，
並在年底，我們將有我們的鑰匙在我們的數組
所有在文件中唯一的字符串。
這是否有意義嗎？
讓我們來看看它是如何工作的。
我們去開拓，根據該規範，創建一個新文件unique.php。
打開。哎呀，對不起，新的文件。
我們要開始了相同的開始和結束標記。
我們將它保存在第9，和我們要調用它unique.php的。
好了，現在放大。
這裡的想法是打開一個文件，
讀取文件中的行由行。
對於文件中的每一行
我們將有一個數組，其中有
作為我們的主要線路。
然後，當我們到這裡就結束了
$改編的鍵是獨特的線條
從文件，因為我們知道，如果我把這個數組的行
多次將只保留覆蓋舊值，
我們實際上可以把陣列產品線本身就像這一點。
>> 這是一種奇怪的。
我們存儲相同的鍵值對一遍又一遍，一遍，
但是因為我們保證將只有1鍵稱為行
因此，如果我們有一個文件說，動物的聲音的文件，汪，汪，
喵，喵，哞，哞，每一次我們讀到的動物噪音出來
像緯，我們將其存儲在數組中，我們得到緯，然後第二次
我們存儲緯它會覆蓋第一次，我們把它保存。
最後，我們將只有一個數組中的條目
在我們的動物的聲音文件中的每個動物的聲音。
你們是否有信心，你可以解決的開幕PHP中的文件嗎？
做到這一點的方法之一，讓我們在這個快速的一種方式做到這一點
是用fopen，就像我們在前面看到的。
您可以的FOPEN some_file.txt。
您可以在讀模式下打開它，就像在C
這是一個非常好的辦法做到這一點。
您還可以讀取文件中的行由行
有相同的功能，他們中的很多，你在C.
你有FGETS。
你有FEOF，雖然我們不喜歡使用，
因為，要記住，這不是很大的C.
你可以做同樣的方式，
但這裡是一個非常酷的事情。
對不起，我不希望做文件，但有一個函數在PHP調用文件，
此功能在這裡是冷靜，因為它的全部內容讀
您指定的文件，所以some_file.txt的，
到一個數組中讀出的文件的整個內容
然後讓你遍歷它，這是非常漂亮的。
>> 如果我們走了，例如，我們的Web瀏覽器
我們來看看谷歌的PHP文件
在這裡你可以看到，我們的手冊說，文件讀取整個文件到一個數組，
我們可以file_get_contents返回一個文件的內容作為一個字符串，
但通常只是作為一個數組是非常好的，因為它做什麼
它打破它，以便每個元素
在陣列中的文件是一行，
因此，如果我們看一下文件0，這是該文件的第一行。
文件1，第二行，文件2，第三行，等等，等等。
那豈不是很好，如果這是你必須做在C？
相當漂亮的。
大衛表明這在演講中，他表現出的成語是
在除了環PHP我們的標準，我們有這樣的
（$ I = 0; I <10; i + +），
你可以做到這一點太，在PHP同樣的事情，
我們也有這個很酷的結構，名為foreach的。
foreach是非常方便的遍歷數組或數據結構時，
因為它可以讓你拉出來的每個元素的數組
而無需手動做自己的索引，
而不必手動創建一個索引變量，增加它，
拉出值在數組中的這一點，因為這是一個非常普遍的事情。
>> 您可能已經做了的時候，你在做C語言的噸
在這學期，所以這個foreach
我們可以在這個文件數組循環，
和語法的是，我們想現在這一大堆的循環
並指定該變量，我們將用它來存儲
此數組元素的局部，局部的範圍，這個foreach循環，
我們把它稱為線。
如果它是一個文件，只是有一個字行
我們可以把它稱為字為好，其實只是你給這個名稱，
無論你怎麼稱呼它，
內循環，然後，你可以做任何你想做的這個變線。
如果沒有足夠的得到的值的數組，你也希望得到
隨著它的索引，你可以指定一個名稱的索引
以及價值，現在你有2個變量的訪問。
你有$ i和行
其中，$ i是索引數組中，
線是從文件中檢索的行。
例如，如果我們想打印出來的文件，因為這迴聲線0，
就這樣，我們能做到這一點，“行我的文件$行”
這裡是我們也沒有見過的東西
我只是完全跳過了整個％S％D業務
我們不得不處理在C，相反，我已經走了直
寫在我的字符串中的變量線。
>> 這就是所謂的變量插值，串插
您在何處餡的變量，和PHP解釋器
是足夠聰明，當它通過一個字符串，用雙引號開始閱讀
而不是單引號，單引號字符串，你不能做到這一點，
但雙引號字符串，因為它通過讀取它的變量。
它的狩獵下來，如果它認為變量將變量的值
並把它的字符串，如果它可以將其轉換成一個字符串表示，
這是非常漂亮的。
現在，讓我們註釋掉其餘的一切，
保存這一點，我們現在可以做的是，我們可以打開一個文件
我們可以稱之為some_file.txt讓我們創建一個新的文件
我們可以把一堆廢話的東西，在這裡只是為了測試所有的東西，
保存它，把它some_file.txt，我做在頂部，
現在，如果我縮小只是為了確保一切都在同一個目錄
它看起來像我有unique.php some_file.txt在同一個目錄。
如果我運行PHP unique.php的
如何打印我的文件中的每一行和該行是什麼呢​​？
>> 這是非常強大的，對不對？
瞧，這花了3行代碼就可以打開一個文件。
好了，4行代碼。我不能指望今天，清楚。
但真的只有2有趣的代碼行，因為其他的花括號，
但在這麼多的代碼中，我們可以打開一個文件，遍歷它，
拉出來的行號和該行本身
並打印出來。
很酷的東西。夏洛特。
[夏洛特]我有一個問題關於語法。
所以你打開的文件的每一行的foreach處理，
然後當你想要做的事情的每一行，你只是做它作為
然後關聯的值。
[內特H.]你可以做什麼在這裡的問題是
在fo​​reach做的陣列，所以foreach語法
真的是foreach和通知，有沒有空間
之間的和每一個或任何東西。
他們去旁邊對方，
然後它在一個數組中，
然後你有這被稱為是有其他的關鍵字，
，然後後，作為你可以把一個變量名，
在這種情況下，你會被拉出數組元素的值，
不是索引，或者如果你這樣做，因為我們已經寫在下面
你得到的鍵和值。
您有forEach元素的數組或對數組的鍵價值
或為正義價值。
根據你所需要的，如果你不需要的鑰匙，
那麼你可以去的值。
如果你想要的鍵，你可以和他們一起去了。
>> [夏洛特]我也意識到，我們從未宣布過我或線。
它是如何知道它們是什麼？
內特H.]你是什麼意思的聲明？
[夏洛特]我們從來沒有告訴他們我還是行的手段。
[內特H.]我們從來沒有告訴計算機什麼，我行表示在
[夏洛特，他們是索引，噹噹
[內特H.]我們從來沒有告訴它，這是應該的索引或鍵和值，
這是因為這是PHP解釋器。
作為聲明說，沒關係，關鍵是要
一個變量叫我存儲在一個名為i的變量。
該值將被存儲在一個變量稱為線
所以作為這些變量的聲明
說$我是一個關鍵，$線的值。
是啊，艾拉。
[雲裳]如果沒有這樣做的關鍵數字
它是如何決定什麼樣的順序要打印的一切嗎？
這是不是就是它被輸入的順序嗎？
[內特H.]讓我們給它一個嘗試。
讓我們創建一個變量稱為改編，
我們可以做一個“7。
比方說，0到另一個陣列，1，2，或蘋果。
比方說，7變為1，B 2，
和3〜4。
這是一個瘋狂的尋找例子，因為我們是混合
字符串和整數的地方。
這個數組有沒有真正的訂單。
我的意思是，我們可以責令一切都在按字母順序排列的按鍵。
我們可以責令一切按字母順序排列的值。
>> 我們可以嘗試，並考慮到有些字符串，有些是整數，
，我們可以嘗試將它們轉換為相同的類型，看看會發生什麼，
或者我們可以認為他們的價值，我們已經進入他們
我們把這個傢伙在第一，第二，這傢伙這傢伙在第三，
這傢伙在第四位，等等。
讓我們來看看運行此代碼時會發生什麼。
如果我們向下滾動，並做了同樣的事情，
這裡沒有打印出新的生產線。
當它讀出來的文件，它的價值觀，包括新的生產線，
這就是為什麼它打印出來很好，而這裡沒有，
所以這就是為什麼的一切都smushed一起。
讓我們添加新的行只是為了讓這件事情。
讓我們重新運行它，所以在這裡
看看發生了什麼事。
打印中，我們把它放入數組中的順序。
它保持秩序，在這個意義上。
>> 讓我們回到這個問題的唯一
我們希望能夠遍歷一個文件，
我們會給它some_file.txt，
我們要遍歷這樣的。
我們說，我們要使用一個數組，以確保我們得到了所有的
獨特的線，我們能做到這一點真的很容易
僅通過存儲在一個數組，我們當然聲明一個循環的範圍之外，
和我們說，如果我們使用的是文件中的行的鑰匙在我們的數組
如果我們輸入了重複的行，我們會覆蓋掉原來的值。
這是以往任何時候都可能有2個按鍵在同一陣列中是相同的。
我們可以做到這一點。
我們可以擺脫這個echo語句就在這裡。
在這裡，我們文件中的行存儲在數組中
使用的關鍵。
沒有它，事實證明，我們並不需要這個關鍵。
我們不需要變量i。
在這一點上，如果我們做的另一個foreach循環
我們循環在每個改編
和線路，如果現在我們ECHO-哎呀，對不起。
我們不能用逗號。我們必須使用此關鍵字。
現在，如果我們迴聲線，我們應該得到所有在該文件中的唯一的話。
如果我們去了到some_file.txt，
讓我們說，我們做的蘋果，香蕉，蘋果，蘋果，香蕉，
如果我們打印出所有的獨特的話，在這個文件中，我們應該只得到
蘋果和香蕉打印出來。
如果我們現在在這裡，我們將放大，
PHP unique.php，和ta-DA。
我們已經成功地uniqued的文件。
>> 這個問題的最後一部分是問你這個數組進行排序，然後再打印出來
因為在這個簡單的例子中，我們剛剛做
在這個意義上，我們很幸運的文件
我們這樣做是人為的例子，蘋果和香蕉。
它已經排序。
但是，使用簡單的排序功能，您可以排序的數組，這是相當漂亮的。
最後一點我想談談你們真的很快
是這樣的PHP是一切都很好，這是超級方便
知道該怎麼辦，如果你需要編程做小，見效快的事情。
例如，如果我需要寫一個程序，說，
使大家我不打算去，並把它寫在C段
這將是長期的。
這將是一種痛苦，特別是如果有涉及的文件，
正如你們所看到的。
它是如此漂亮，只是這麼多的代碼，在這裡
我們能夠通過的文件中抓取音軌，使出渾身的獨特價值
和打印他們退了出去。
>> 然而，對於分配給你的，你的項目，
如果你建立的網站，PHP的力量是
我們正在運行的PHP文件，通過這個解釋，
解釋器處理的PHP標籤內的所有內容，
一切原封未動，吐出的結果。
建立HTML編程方式，我們可以做到這一點。
現在，如果我們回去的規範，最後一個問題，在規範中
談到這個想法的濃度
並創建一個下拉菜單，
您可能會或可能不希望這樣做，這取決於您的最終項目正在做什麼，
，它允許用戶選擇從一個列表中的所有可能的濃度
他們的濃度。
現在，這是一種痛苦的鍵入此
做這一切手動，特別是當你以確保
你有所有的尖括號在正確的地方，所有的報價在正確的地方，
與PHP中，你可以做到這一點編程，你可以做到這一點真的很快。
>> 讓我們來看看如何做到這一點。
我們要去打開一個新的文件。
我們打算把我們的PHP標籤。
我們將把它稱為concentrations.php，
，現在當你這樣做的一件好事種思考
當你想你的PHP和HTML混合和匹配
搞清楚，什麼是好了，我想以編程方式生成的部分嗎？
的一部分，我可以通過編程生成是什麼？
這是真的，你可以做你的HTML
裡面的PHP塊。
您可以重複所有的HTML作為字符串。
例如，如果我要開始做選擇的PHP標籤裡面
我能說的迴聲，說選擇名字濃度，
然後向下跌破，我可以有另一種迴聲標籤
或其他迴聲稱為近的選擇。
這是一個辦法做到這一點，因為這是真正的做
打印出該字符串通過PHP解釋器時，它的運行，
這樣的結果將是HTML。
如果我保存這個文件，因為它是現在
和運行PHP concentrations.php的
看看我得到了什麼。
我得到這個開放的關閉選擇標籤。
>> 如果我要做到這一點，我是這樣的結果保存到一個文件中，
說，等待concentrations.html，它看起來像已經到另一側的L-
現在，如果我在這裡開了concentrations.html你看，我有一個有效的HTML文件。
那是一種奇怪的呢？
我們正在使用PHP創建HTML，創建有效的HTML。
我們正在做的是，我們的PHP打印
我們希望它打印的HTML。
這簡直是PHP網站如何工作的。
當你訪問一個網站，把你喜歡的東西
什麼，什麼，什麼點com斜線的index.php
該計算機是真正的調用index.php文件，
通過PHP解釋器運行它，任何垃圾出來
它發回給瀏覽器，說哎，瀏覽器，將此解釋為HTML。
這種做法的好處是，它可以是一個痛苦的不斷譜寫迴聲，迴聲，迴聲，迴聲
在這樣的引號括一切，所以如果你想要寫
HTML，將是靜態的，你可以像這樣做，
把它放到外面，關閉它，
然後在這裡你只把裡面的PHP標籤，你知道
你想以編程方式生成，在這種情況下，這些選項標籤
是一個痛苦的產生。
>> 例如，我們可以產生一千個選項標籤
做這樣的事情，我<1000，+ +
說echo參數值= $哎呦，我不能這樣做。
好了，讓我們給它一個嘗試，看看會發生什麼。
$ i，然後說我</選項。
而不是輸入該選項標籤，一千個不同的時代
我使用的PHP代碼，它會自動生成，通過編程。
一種漂亮。是啊。
我記得這個被提到的講座或演練，
但在雙引號之間的區別是什麼，
正常的，這些單一的東西嗎？
這是實際的東西，我已經做了不正確的，在這裡，我要告訴你。
單引號不允許任何特殊字符，
所以一切都在一個單引號的字符串是字面上的解釋。
如果我有一個\ n裡面的單引號和保存，例如，
現在我走在這裡，運行
哎呀，我要去哪裡？
哦，那是因為我忘了$。
>> 現在，如果我打開了，其實，在這裡，我們將擺脫的輸入到一個文件中。
我們只需要讀它。
在這裡，你看，我有這個文字\ n字符串中的一樣，而不是實際的新的生產線，
同樣地，而不是實際內插這個變量的值
它給我的$ i本身，這是一種痛苦。
解決這個問題的方法是使用雙引號，
然後當你使用雙引號，它實際上會
正確插值所有這些變量的值，在這裡
也認識到這一點的\ n是新的生產線，這是
\ n。
使用單一的很好，當你有
因為可能被解釋為特殊字符的字符，那麼你不有
他們不斷地逃避。
事情可以變得凌亂，通常我做的方式，
只是為了讓事情變得簡單，就是如果我有什麼
HTML喜歡在我的代碼，我會包括編輯單引號內
然後使用這個連接操作符
要連接的變量中。
這是這樣做的另一種方式
我們已經有了要連接的點，這是一個字符串
與此與此與此，
現在我沒有逃避這些雙引號。
我沒有使用這個傢伙逃脫。
他們會從字面上可以打印出來作為雙引號括起來，然後這傢伙就在這裡。
這是另一種方式混合起來。
>> [學生]：另外，當你呼應的getType有沒有引號。
對，所以迴聲是一種特殊的，在這個意義上，你不需要括號。
您不需要有一定的引號周圍的變量，
說迴聲$我喜歡它的有效，它要解釋這是一個字符串。
做演員，這是怎麼回事，所以我們可以這樣做，而且是有效的，但我們並不需要它。
它是可選的。
在本週的問題集中尋找出了很多這樣的東西
你混合並匹配HTML與PHP
就這樣，現在如果我們向後滾動，我們運行這個
我們可以看到，我們有一大堆的選項值
剛打印出來。
我們有這一切都得到了生成的HTML，我們真的很快。
我會離開它作為一個練習。
這是非常類似的文件閱讀我們先前做的。
>> 是一個concentrations.txt的文件，你可以拉下來的CDN，
你可以打開它的foreach使用相同的伎倆，我們先前做的，
和foreach，你只需要呼應的選項和插件
適當的值，相應的鍵和索引，
然後你就滴下來，從字面上創建
你在哈佛的所有不同濃度的編程。
有一個方便的事情。
這個任務有很多配置的東西。
如果你沒有這樣做，它已經採取接下來的半小時，一小時，
一段時間今晚肯定是肯定的，
穿行問題集規格，
看看是怎麼回事設立的虛擬主機，本地主機，所有的東西。
有一點需要指出的是，
在大多數問題集，我們已經進入你的Dropbox文件夾
問題集zip文件，然後下載並解壓縮。
對於這個問題集，你不想。
你想進入這個虛擬主機目錄。
您將要進入的虛擬主機，並進入本地主機目錄內，
這是你要拉下來的zip文件，
解壓縮，然後準備好去。
你必須遵循的步驟密切。
>> 如果您有任何疑問，請發送電子郵件，將它張貼在討論，來辦公時間。
謝謝你們。下週，我們將有一個審查會議測驗。
享受你的最後一個問題集。我希望這一切都非常好。
[CS50.TV]