[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,然後說我