道格·勞埃德:所以我們 在C中做了很多工作, C是一個非常酷 語言,因為它給你 潛水真正的能力 低電平到你的程序。 我們可以做的事情為 真分鐘為操縱 內存單個字節。 回想一下,真正的指針 讓我們的靈活性。 但是,我們總是需要有 這細粒度的詳細程度 在我們的計劃? 或許不會,對不對? 如果我們將有 作為之間的權衡 能夠做到真的,真的 分鐘的事情,真的,真的 我們沒有想到大事情 約,我們沒有實現 這些真正的大想法,如果 他們已經內置了對我們來說, 通常用於構建大 方案或大項目, 我們可能會犯錯就在身邊 具有多語言的東西建 對於我們,而不是有 低層次的東西。 而這也正是PHP真正的用武之地。 現在,其原因之一 我們教CS50 PHP 是它所轄嚴重的啟發 C.而事實上,在我看來, 這裡實際有 祖種語言, 是非常普遍的今天。 C和LISP。 而且他們祖先的語言 因為所有其他現代編程 已經開發語言 自那時以來,受到啟發 由一個或其他語法上。 PHP是非常相似的語法 到C,而像Scheme語言, 例如,其 你可能聽說過, 在很大程度上受語言的啟發 叫LISP,這是一個較舊的語言。 因此,我們當教師的原因 PHP在CS50的是, 通過了解c以從根本上 因為你在這一點上, 拿起PHP,它給你的 有能力做更高層次的東西 比C呢,是不是 這麼多的一道坎的, 因為你已經有了 的語法的基本思想。 C'S出現了將近 45年在這一點上。 PHP的存在了大約20年。 而在這25年 在程序員之間 確定,他們將多 而有更高層次的能力, 和錯誤和鬥爭 在20年間的 導致PHP和其他現代語言。 PHP的一個很好的選擇 軟件語言 這allow--的 軟件that--在那裡你 需要做的事情,在 C是實際上是複雜的。 因此,例如,工作 在C字符串 是非常複雜的,因為 因為我們知道,在C字符串 真的字符只是陣列。 這不是一個內建的數據類型。 或許更重要的是, 這是我們甚至沒有覆蓋C, 如果你需要做什麼 一些計算機網絡? 好吧? C有這樣做的能力,但它是如此 晦澀難懂,因此很難真正做到。 那豈不是很好,如果 語言有一個內置的,簡單的方法 實現聯網? 和PHP是一種語言,使的是, 或便利的是,相當多的。 正如我所說的,PHP是非常沉重的啟發 由C.語法是非常相似的。 所以它應該有希望使 過渡從一個到另一個 比一些稍微有點軟 其他語言可能。 開始寫PHP,只需打開 文件以.php文件擴展名。 從技術上講,這不是 實際需要, 但如果你想要像語法 突出了IDE,因此該類型 名,或變量名,函數, 你知道,語言的關鍵字 在突出顯示 特定的顏色,你一般 要使用命名您的文件 一個特定的文件擴展名。 因此,我們已經命名我們的文件以.php 擴展名,但後來也用PHP, 所有我們寫的PHP代碼 文件必須包含在這些PHP 分隔符,我們看到 這裡在屏幕上。 尖括號?PHP的開始。 然後我們寫我們所有的PHP 我們要在兩者之間的代碼。 接著 ? 尖括號關閉。 如果我們不這樣做,那麼 什麼會發生? 它不會崩潰。 它不會 真的毀了我們的計劃。 但它不會有 我們想要的效果。 這是怎麼回事發生,真的, 當我們嘗試並運行這個程序, 一切不是那些分隔符之間 將要被逐字打印出來。 它不會 實際執行的代碼, 這將只 逐字打印出來。 現在為什麼是這樣? 所以C是什麼知 作為一種編譯語言。 你可能熟悉 使你的程序的步驟, 打開.c文件和.h文件 與使一個單一的可執行文件, 特別是使用 鐺為我們的編譯器。 PHP,不過,不 有此等價的。 PHP是所謂的 解釋語言。 什麼意思呢? 嗯,這意味著我們不必轉換 我們的源代碼,以零和一 預先。 相反,有一個程序, 其也被稱為 PHP是一種理解PHP和 那種可以把它的飛行。 這並不是真正的完全準確, 但是這是一個非常好的比喻 發生的事情。 它解釋這些 零和一的飛行。 因此,如果它不知道 如何處理事情, 如果它不知道如何 過程PHP,你可能 希望把該文本在那裡,對不對? 你可能希望把代碼 還有,即使它不是PHP--之間 PHP的分隔符。 但是 - 所以它不會 要刪除帳戶, 它只是將基本放棄它。 因此,這將打印 它輸出到屏幕。 這似乎是這是一個壞 的事情,但實際上它是 要成為一個真正的 一件好事,因為我們將 看看當我們談論 PHP網站開發, 因為這意味著我們可以 點綴PHP和HTML。 我們可以共同使用這些技術 創建一個更加動態的Web頁面。 但更多的,在 視頻PHP的Web開發。 那麼,什麼是PHP語法? 這就是這部影片的全部意義所在。 讓我們來談談吧。 所以,展開,取出,變量。 PHP變量存在。 只是有兩個大 從C差異 第一是,有 沒有類型說明符。 我們沒有說INT, char和float,所有的東西。 我們沒有做到這一點了。 PHP是一種現代語言。 它可以計算出你在做什麼 試圖做或做一個最好的 想為你想要做的事。 所以,這是相當不錯的。 另一件事是,所有變量 名稱必須以一個美元符號。 這只是一些習慣。 這是一個有點古怪,因為 它使PHP可以理解 什麼是可變的,什麼不是。 所以,每一個變量名 始於一個美元符號。 因此,在C中,我們可能會說 這樣,INT X = 54。 我們不必這樣做了在PHP。 我們只能說$ X = 54。 我們可以說,例如,在C, 如果我們磅包括CS50 .H 頭文件中,我們可以說 串詞=“這是CS50。” 我們沒有做,在PHP中,雖然。 我們只能說$短語 =“這是CS50。” 而事實上,串現 在PHP一個內置數據類型, 或者更確切地說,PHP懂得 什麼是字符串。 它是獨立於陣列 字符的像它是在C 所有您最喜愛的 從C條件語句 仍然可以供您使用。 所以沒有什麼大的轉變存在。 我們可以say--我們可以有 如果這樣的語句。 如果$ Y 43,或$ Z = 15。 所以這是非常簡單的。 我們可以有,如果和其他人。 我們可以有if和else if。 而發現一些 相當不錯的位置,而這 是那種那些之一 PHP的優勢與C,通知 我們沒有使用什麼功能嗎? 我們使用==來比較 變量$名稱,為字符串。 我們不能這樣做,在C,對不對? 我們不得不使用調用的函數 STRCOMP或StrEndComp或任何 其相關的表兄弟。 所以,我們已經看到這些優勢。 我們並沒有做什麼 愚蠢或者不直觀 作為調用一個調用的函數 STRCOMP如果我只是想測試 是否一個值等於一個字符串。 我可以只使用等於等號, 就像我可以做任何事情。 因此,有一個優勢。 有時,順便說一句,你可能 看到否則,如果為一個字,ELSEIF。 而這在PHP中確定為好。 所以,有時你可能會看到這一點。 這不是一個錯字。 PHP實際上理解ELSEIF。 我不知道他們為什麼 決定實施的, 但正如我們已經見過很多次 在我們的影片到目前為止, 我們程序員喜歡它,如果 我們可以做的事情迅速, 因此擺脫了空間 顯然是一個很大的優勢。 這就是,如果和ELSEIF。 我們也有三元運算符, 召回問號冒號, 對於非常短的形式,如果其他人 或有條件的分支。 而且顯然,在此, 我們想在這裡做什麼 被分配變量 $信真或假, 這取決於是否是$ var 為英文字母。 因此,這是非常相似,因而isalpha 我們很熟悉的C. 這有點相當於在PHP中。 的功能是很明顯 叫而ctype_alpha, 但是這就是我們如何做到這一點在PHP。 所以,這一切都將是是,如果 $ var是一個字母,$封信是真實的。 如果是$ var是不是一個字母, $信是假的。 我們也仍然有switch語句。 我們還記得由C為好。 在最高層那裡,那我們怎麼辦 像GET int或得到字符串。 因此,PHP有一個內置的。 我們不需要CS50庫了。 我們可以只使用該功能的ReadLine。 什麼是會做的是打印 出消息,“你的狀態, 請“,然後閃爍提示 等待用戶輸入 一些信息。 現在注意什麼 我們可以用開關做。 如果你以前使用過它, 你可能還記得,開關 僅限幾乎為整數,並 人物,但現在我們可以使用字符串。 而事實上,switch語句 在PHP是相當多的靈活 比C.其表弟 循環。 就像條件句,所有的 你的老歌依然存在。 我們有while循環的計算 從1到在這種情況下,100。 我們已經做while循環 表示,計數從1到100, 我們有for循環 表示,計數從1到100。 所以沒有什麼大的飛躍那裡。 語法是相當 多完全一樣, 除了現在我們使用 美元符號變量,而不是 聲明整數變量或 這樣的事情對我們的專櫃。 這就是事情得到一個 很多優於C,雖然。 陣列。 所以,記得當時我們 談到C,以 為我們成長和收縮 信息集, 我們需要進行排序默認 這一想法的一個鍊錶, 因為C數組是固定大小。 我們不能縮小它們。 我們不能生長他們。 我們不得不重新分配內存 做這一切瘋狂 或使用鍊錶,這 佔用相當多的空間。 但在PHP中,陣列 大小不是固定的了。 他們可以成長,他們可以收縮。 如此反复,這20年間所存在 C的第一個版本之間 並首次發布PHP, 我們決定,你知道, 這將是非常巨大的 如果我們能做到這一點。 因此,我們實現這一點。 所以PHP數組是不固定的 大小,因為PHP並沒有真正 有程序員朝前 類型的概念, 我們可以混合數據類型 在我們的陣列了。 因此,我們甚至沒有使用所有 整數或全部飄點, 我們可以擁有所有的混合 不同種在一個陣列。 聲明數組是 很簡單。 這就像任何其他變量。 $ NUMS =陣列(1,2,3, 4),陣列是一個功能 這是內置到PHP的 將創建一個數組為您服務。 這產生四個值的陣列, 在這種情況下的數字,稱為$ NUMS。 而且也做一個以上的方式。 而且我們要 看到這個有很多,在PHP。 PHP已經開發了許多不同的 人的發展和增長和增長。 有平時不只是兩個或 三種方式做一些事情在PHP中, 通常有像10或20。 這只是另一種常見的 方法來聲明數組。 $ NUMS =正方形支架1,2,3,4。 因此,這是有點類似C的角度 br--大括號標記,而。 $ - 否則會是int NUMS方 括號等於大括號1,2,3,4。 在PHP是$ NUMS =方 支架1,2,3,4。 但是,這兩個例子在這裡給我 四個在這種情況下,整數的數組。 如果我想釘東西呢? 嗯,我只能說$ NUMS 4,這 再次,我們仍然從0這裡計數 在PHP中,將第五 數組的元素。 我只能這麼說。 我不會遭受SEG 故障,因為我的數組只是 要增長以容納。 這是相當不錯的,對不對? 而事實上,我甚至都不需要 指定我想要把它。 我只能說這個,只是 釘正確堅持到最後, 或者,我可以甚至只是 說$ NUMS 20或1000。 這其實並不重要。 它仍然只是去 對上釘到年底。 因此,我可以成長,as--我們 不會掩蓋它在這裡, 但我可以拼接或條狀 元素從數組中為好, 和數組將收縮以適應 現在缺失或空白區域。 還有另一種方式來釘 東西上的陣列, 這是一種稱為array_push函數。 如此反复,只是這種想法是 能夠做到的事情很多不同的方式。 因此,我們已經看到了三種不同的方式,現在 到粘性另一元件上的陣列。 因此,這又增加了一個元素 到$ NUMS數組的末尾。 我們可以混淆了我們的數據類型。 所以,我有不是一個數組 1,2,3,4,但1,真實,3,4, 其中true是一個布爾值,然後 如果我想釘在另一個元素 該陣列,也許是一個字符串, 字符串“五,”我能做到這一點。 現在我的數組會 是1,真實的,3,4,5。 這個詞五,而不是整數5。 因此,具有很大的靈活性存在。 靈活性得到 更妙的是,雖然, 因為PHP擁有的東西支持 稱為關聯數組。 而我們那種隱約談到 在C中有關關聯數組 在哈希表的情況下,因為 有什麼關聯數組是真正的所有 關於正在關鍵 值對映射。 而且在這種情況下,如果keys-- 我們熟悉的C數組, 鍵是索引編號。 0,1,2,3。 和值是什麼,我們發現, 陣列0,陣列1,陣列2,依此類推。 所以,鍵是索引, 和的值是 什麼是該數組中的位置, 通過該索引指定。 但在PHP中,我們沒有做到這一點 概念陣列0,陣列1,陣列2 了。 我們現在可以用實際的話 以鍵映射到值。 所以我可以說這樣的事情。 我可以用創建數組 方括號的語法如下。 $比薩餅=括號 “奶酪”,然後 這種雙箭頭符號, 8.99,“辣”,箭頭10.99-- 9.99, 等等。 所以,這是怎麼回事嗎? 什麼是我真正在做什麼? 我創建鍵值對映射。 因此,而不是說,例如, 比薩餅0,1片,比薩餅2, 我現在可以說的比薩餅 奶酪,香腸比薩餅, 並參考值 與之相關聯。 因此,這裡有我們的鑰匙為綠色。 奶酪,香腸, 蔬菜,水牛雞。 這裡是使箭頭 該鍵值對的映射。 然後這裡的值 在該陣列的位置。 因此,這等於是說陣列0等於8.99。 最關鍵的是0。 該值是8.99。 我現在可以說陣列奶酪,或在此 案例比薩奶酪,奶酪是關鍵, 而且我發現在 比薩奶酪是8.99。 這就是我發現那裡的價值。 因此,我可以說這樣的話。 $比薩奶酪= 7.99。 說我有一個轉讓。 我想dis--我要降 奶酪比薩餅的價格。 或者,我可以用蔬菜 比薩餅的條件的一部分, 或者我可以添加新的元素,我 陣列,就像我可以做以前。 我可以添加新的元素,這 關聯數組鍵“臘肉” 和值13.49。 但這種引入了一個問題, 如果你想想看一秒鐘。 我們如何在這個數組中循環? 對? 在C語言中,我們只是有一個 for循環,典型地,該 在從0運行至 減1的陣列的大小。 陣列具有在n個元件,所述 有效的索引是0到n減去​​1。 因此,我們可以使用一個for循環 逐步完成每一個元素。 但是,這不是真的 一樣了,對不對? 現在,我們有鍵值對 映射,其中鍵是的話, 我們如何遍歷所有的話嗎? 好了,幸運的是,PHP有 一個方法來處理這件事, 所以我們會跳回 以循環為第二 引入第四種循環的 存在於PHP稱為foreach循環。 什麼foreach循環的作用是 它基本上是同樣的想法。 你可以用它為任何類型的數組。 但它基本上是 同樣的想法作為一個for循環, 只是,而不是使用 索引號,你只要 有這樣的語法怪異在哪裡 你叫的每一個元素 一個名稱這個循環的目的。 因此,在這種情況下, 的foreach($數組$鍵)。 基本上,該評論指出, 這foreach循環內, 它會走了過來每一個 $陣列,其通常的元件 將是一個關聯數組, 但真正能成為任何類型的數組 要在PHP。 而每一次,在 一個for循環你可能 說$數組方括號 $我,你可以只說$鍵。 這樣$鍵變成一個別名為每 你的PHP關聯數組的索引, 所以你可以使用它這樣。 因此,例如,我們已經 現在得到我們的比薩餅陣列。 那種我塞到 到角落裡有 所以我們可以用它做一個簡單的例子。 如果我說的foreach($比薩餅 $比薩餅),好了,發生了什麼? 好吧,我會遍歷每個 數組$比薩餅的單個元素, 並在這樣做,我會打電話給 每一個元素,當我裡面 對身體的循環,$​​比薩餅。 所以這是形式的 替身,回憶,那$比薩餅 是替身的說法 $比薩餅方括號$ I 如果我們用一個for循環,在那裡我們 可以去從$ i = 0到,在這種情況下, $ I = 3。 如果我們沒有鍵值對 這裡,這將是元件0,1,2,3, 我們會用一個for循環去 $比薩餅0,$比薩餅1,$比薩餅2, $比薩餅3。 所以,現在只需$比薩餅代 該專用密鑰。 那麼,這是怎麼回事打印出來? 我打印出$比薩餅。 我該怎麼找at-- 如果我打印出$比薩餅,$ I? 對? 如果我要打印出來 比薩餅的第i個元素, 我該怎麼打印? 我要打印出來的 在該位置值,對不對? 就像如果我們這樣做 這在C的範圍內, 我們通常不會使用我們的迭代器 變量,INT I = 0,i為小於3, 我+ +,打印出0,1,2,3。 我們打印出數組0, 陣列1,陣列2,陣列3。 所以這是什麼打印出來是這樣的。 它的價格列表。 8.99,9.99,10.99,11.99。 現在,快速注意到這裡。 foreach循環並不一定 為了打印出的東西。 它不能保證。 它通常不會。 它通常設在順序 該元素被添加到陣列中, 因此只需牢記這一點。 它可能不是為了。 但foreach循環將遍歷 橫跨每一個元件 所討論的陣列。 在這種情況下,再次, 該數組是$比薩餅。 如果我可以改變語法,不過, 我想同時得到鍵和值。 與其說$比薩餅 為$比薩餅,我可以這樣說。 如果你看一下我所 這裡以綠色突出顯示, 它看起來像一個鍵值對映射。 所以,如果你 - 即使你是不是 完全知道它要幹什麼, 你可能已經猜到 即$餡料是怎麼回事 要在這種情況下,鍵和 $價格將是價值。 所以我現在替換的每一個元素 的$比薩作為一個鍵值對, 現在我可以參考的關鍵和 值,這可能會派上用場, 例如,如下所述。 “一個整體” - 這是一個很大的 印刷回事這裡 - “一個整體” 一流“比薩餅成本$”的價格,然後 我打印出一個句點和一個反斜杠ñ。 所以,現在,通知我再一次有機會獲得 一個鍵,$摘心,和一個值,$價格。 所以,你能猜出這是什麼 將要打印出來? 有很多打印報表, 但只有一個反斜杠N, 所以它要打印的東西 在一個單一的代碼行的entire--。 如果我可以參閱鍵 和的值,則現在, 而不是僅僅能夠 打印出來的價格, 我可以打印出這樣的事情。 “整整一個奶酪比薩售價$ 8,99。” 而現在,我使用所有的keys--的 奶酪,香腸,蔬菜, 水牛chicken--和的值。 8.99,9.99,10.99,11.99於是 這只是一種不同的方式 做一個foreach循環,而不是 只是給你訪問到的值, 它只是給你 - 它給你 訪問的鍵和值。 因此打印出的信息。 我已經做了幾個 不同的方式,你可能已經注意到。 這兩個函數,我們已經主要 看到的都是打印和迴聲。 而對於幾乎所有意圖和 目的,他們是完全一樣的。 They're--有一個非常微妙 區別這不值得 進入,但基本上無處不在 您可以使用打印你大概可以使用 迴聲也是如此。 而這還不是只有兩個。 PHP有很多不同 方法來打印東西出來, 它也有方法來整合 變量到字符串中間。 因此,從C回想一下,你 記得有什麼功能 我們可以用它來替代變量 成的事情,我們要打印出來? 你可能使用此 功能相當多。 printf的,對不對? 因此,這是我們以前裡面有 我們foreach循環的上下文中。 我們有這五個 單獨的打印報表, 因為這是唯一的 這樣,我真的知道的時候 如何打印出消息。 我不知道如何整合 變量$摘心到我的PHP代碼。 好吧,如果我只是採取了胡亂猜測, printf的,它實際上會起作用。 printf的是,我可以用一個函數 在PHP中,就像我可以在C使用 所以這樣的事情,printf的, 再次,我們很熟悉。 第一個%s被替換 與$摘心的價值。 第二個%s被替換 與$價格的價值。 所以我interpellating, 這僅僅是一個奇特的方式 對他說,我堅持了 變量到該位置。 所以我堵在$摘心地方 紅色%s是和$的價格,其中藍色%S 是,然後我就得到消息, “整整一個奶酪比薩售價$ 8,99。” 不是我能做到這一點,但唯一的辦法。 也許我會想使用此方法。 其實,這是什麼是最常見的 所謂可變質詢。 我可以用一個回音。 我可以使用打印也一樣,我們拭目以待。 但是,這裡發生了什麼? 首先,我要 逃離美元符號。 因為還記得,當我們實際上 打印出的比薩餅的價格, 實際上,我是他們的格式為 貨幣數字與一個美元符號。 但是,我們使用的是美元符號也 代表在PHP中的變量名, 特別是當我 使用捲曲的這種方法 梅開二度變 質詢方法,我需要 逃離我的美元符號,因此不 以為我說的是一個變量。 這將實際上, 從字面上打印一個美元符號。 排序所以類推到 你的盡頭有看到。 它實際上並不 打印反斜杠N,對不對? 它打印出一個新行字符。 這is--它不會 打印反斜線美元符號, 它會打印出剛 一個美元符號字符。 同樣的想法。 轉義序列是什麼 這些東西被調用。 但是請注意,我沒有做 任何形式的%s的替換, 我只是從字面上堵漏 在這些變量。 所以在this--什麼會發生在這裡 是,$ topping--的價值再次, 只是符合我們一直 談論這樣far--奶酪會得到 插在那裡。 而$價格將是任何值 在比薩,方括號,奶酪, 這是8.99。 因此,這也將打印出 “整整一個奶酪比薩售價$ 8,99。” 就像我說的,我可以用 打印取代echo這裡, 和功能是 幾乎完全一樣。 它將打印出同樣的事情。 還有另一種方式來做到這一點, 這是另一個優點 PHP工作與字符串。 我們可以做字符串連接。 我們能做到這一點的C,也是如此, 使用稱為strcat的函數, 但同樣,我們不得不 調用獨立的功能。 這是這整個亂七八糟的事情。 我們不得不磅 - 包括string.h中。 這是一家集生產,對不對? 但現在我可以只用這個點運算符 連接字符串在一起。 所以我串聯“一個整體”和 那麼無論$摘心的價值, 然後又是 字符串,“比薩餅成本$” 然後連接任何 $價格的價值, 然後在最後我 套結上期反斜杠ñ。 所以,這也 打印出“一個整體” - 再次, 如果我們談論的第一個 這比薩餅array--元素 “整整一個奶酪比薩售價$ 8,99。” 期間,反斜杠N,再次用 在$摘心和$的價格代 對於我們在我們的foreach已明確 環路的鍵值對映射。 PHP能夠處理的功能。 功能進行了排序 整體為C,正如我們所看到的。 像變量,我們並不需要 指定函數的返回類型, 因為它其實並不重要。 我們不指定 的任何參數的數據類型, 因為他們並不真正 的事情,就像我們已經看到了PHP。 每個功能介紹 用函數關鍵字。 這就是我們指示PHP中 我們正在談論的是一個函數。 我們不必 應對主所有, 因為解釋器,PHP 解釋器,工作從上到下, 而不管。 如果它認為你可以 一個函數調用,它會 去尋找函數調用, 即使是後話。 但它會從頂部讀 底部,所以我們並不需要指定, 這裡就是你開始。 你開始對1號線的 PHP和從那裡工作了。 因此,這裡是我們如何創造 一個函數調用hard_square。 這顯然需要一個 參數,我打電話$ X。 此功能是複雜的剛 說明各種東西。 我們仍然有返回值。 我使用一個for循環在這裡。 但它基本上只是,這是什麼 達只是$ x次$ X。 什麼我實際上做的是剛剛加入 x可0 x次或$ X為零$ x次。 但它有效地正是 同乘$ x次$ X。 我仍然可以返回一個值, 在這種情況下$結果, 我已經取得了PHP函數。 下面是如何使用它的上下文中。 所以,也許我的一些PHP文件裡。 藍色有該通知 我用我的PHP的分隔符, 尖括號問號PHP。 在這些之間的所有 我想寫的PHP。 所以我顯然要get-- 我要提示用戶 給我一個數字,商店 變量,存儲在變量$ X, 不管他們給了我。 然後,我要呼應 hard_square該值的, 顯然打算 要釘在一個新行 還有,再後來我就 定義hard_square因此函數 當我做了 來電hard_square, 它知道我在說什麼。 現在,我也可以做 這樣的事情。 此略有不同。 這幾乎完全 同我們以前看到的, 但不是說只是$ X 有作為參數傳遞給hard_square, 我說的$ X = 10。 因此,這是一個例子 防禦性編程, 守著你的程序 防範惡意用戶。 這是做一些錯誤的一種方式 檢查我們並沒有真的 有在C.一個選項,我們永遠無法 指定的東西的默認值。 我們總是不得不檢查 是否,例如, 如果我們打了一個電話給GetString,它是 最合適的,如果立即之後我們 經檢查發現,我們檢查 是否字符串 用戶給了我們 不等於空, 因為我們不希望啟動 使用的是空字符串。 這裡,這是一種 警惕這一點。 如果用戶沒有為我們提供什麼 不知怎麼的,什麼是我們該怎麼辦? 好了,我們只想說什麼 他們沒有向我們提供, 我們只是在10堵塞代替。 所以,如果他們不給我們一個值, 只需使用10默認情況下。所以在這裡, 請注意,我在做 打電話給hard_square, 但沒有提示 給用戶的,對不對? 我只是做一個空的電話。 但我的功能hard_square 期望的參數。 這是什麼打算打印出來? 這將打印出100,對不對? 因為用戶沒有 給我任何東西。 所以,我只是要承擔 即10-- 10是默認值。 所以這將打印 出100在自己的行。 PHP文件不必 只是一個單一的文件。 您可以將多個文件合併在一起, 就像你可以在C.方式 我們這樣做,在C是典型的做 #包括讓頭文件拉到研究。 我們不這樣做,在PHP。 我們做一些所謂的require_once。 再有就是這整個 首先,這是什麼__DIR__? 這只是一個特殊的 變量或特殊常量, 真的,指定什麼 當前目錄。 所以它要看看 在當前目錄 對於一個名為cs50.php 這裡在本例中, 而且它要堅持該文件 在你的PHP程序的頂部, 假設你把需要 一旦在你的PHP文件的第一行。 因此,PHP主要使用, 但不排他使用, 作為基於網絡的編程語言。 那它到底是如何走過來的。 但它是一個完整的 語言,因為我們已經看到了。 我們已經看到了幾乎所有的東西 它可以做類似於C, 它可以做赫克 很多不止於此。 但由於它是一個完整的語言,我們 可以在裡面做的命令行程序。 我們可以運行命令行程序。 所有這一切需要運行一個命令 這是寫在PHP行程序 是你有一個PHP解釋器。 所以,這有點類似於 有一個編譯器在系統上 如果你想編譯C代碼 把它變成可執行文件。 你需要有一個PHP解釋器 存在你的系統上 這樣就可以解釋PHP文件。 假設你做什麼,通常 這個解釋被稱為PHP, 並且它通常捆綁在最 下載或PHP的安裝 你可以上網,而且肯定 PHP解釋器的名稱 我們在CS50,IDE。 你要做的就是類型的PHP文件。 而你的程序的 要做的是它的 經過運行 解釋器,它的 將忽略一切的 沒有問題mark--之間 或者,尖括號問號PHP的, PHP的分隔符,並打印出來, 它會解釋和執行的 你的PHP定界符內部代碼。 因此,讓我們跳出交給CS50 IDE和 看看一對夫婦的PHP文件, 跑了幾個PHP文件,在 命令行CS50的IDE接口。 所以在這裡我們是在CS50的IDE, 我已經採取了自由 中打開一個名為hello1.php文件。 此,顯然,其內容 文件只是PHP的分隔符有, 而在,迴聲之間(“你好,世界”)。 這是一個非常簡單的PHP程序。 我只是要向下滾動 我的終端窗口在這裡, 我要去鍵入PHP hello1.php,按下回車鍵。 你好,世界。 這大概就是我們 希望它做的,對不對? 讓我們去,並採取 另外看一個節目。 hello2.php。 幾乎是同樣的事情, 不是有很多事情在這裡。 這一次,雖然,我要提示 用戶給我自己的名字。 我再次使用了readline的功能。 $名稱= readline的。 這提示,“你叫什麼名字?” 顯然,我打印 它在自己的行。 然後,下面這樣的線 這將是提示 用戶可以在其中輸入他們的名字。 然後,我使用了一點點 可變置疑這裡第3行 打印出“你好”和 無論用戶類型。 因此,這是在說,你好, 逗號,%S如果我們在C.用printf 因此,讓我們去解釋這個計劃。 所以,再一次,我會向下滾動 我的終端窗口。 PHP hello2.php。 你叫什麼? 道格。 您好,道格。 我也有另一種 所謂的文件hello3.php。 我要清楚我 屏幕控制L, 我要去執行的。 你叫什麼? 道格。 您好,道格。 所以該行為是相同 hello2.php,但為什麼它hello3.php? 那麼,這裡的區別。 在這種情況下,通知 上這裡1號線, 我有東西是不是 在PHP分隔符之間。 我只是打印out--還是我 剛鍵入,“你叫什麼名字?” 當PHP解釋器看到這一點, 已經不知道該怎麼解釋為PHP, 等等,而不是失敗, 它只是要吐了出來。 因此,第3行注意到,現在,我的呼籲 readline的,沒有任何提示了。 我只是真的要用於:當 PHP解釋器看到這一點, 它會打印出 “你叫什麼?” 然後,它認為,哦,好吧,here's-- 一切將是 解釋為PHP的,所以 這就是為什麼這個工程。 我不必一定提示 的readline內的用戶用於:, 我可以把它外面 PHP的分隔符 並允許解釋器 剛剛打印出來給我。 所以,你實際上並不只 有一組PHP的分隔符 在你的程序。 實際上,你可以有幾個人, 開,並根據需要關閉它們。 因此,讓我們一起來看看 在幾個方案 在CS50 IDE我們 說明這個道理具有 多組分隔的PHP。 好了,我已經打開的文件 這裡所謂的add1.php。 同時注意這裡發生了什麼。 與以前一樣,我有一個 單一的PHP設置分隔符。 我要打印出來的 消息,“請給我一個數字。” 然後我會讀線 其存儲在變量$ NUM1。 然後,我要打印出來了。 給我第二個數字。 閱讀從用戶,存儲一行 無論他們輸入在$ NUM2。 添加在一起並存儲 導致一個名為$總和變量, 然後打印出“的 這兩個數字的總和 是“,然後interpellate 有變量$總和。 因此,讓我們只需要運行這個 通過翻譯 要確認這是我們所期望的。 PHP add1.php。 請給我一個數字,3。 請給我第二個數字,4。 這兩個數字的總和是7。 這就是3加4。 好不好? 所以沒有什麼可怕看中那裡。 現在,讓我們打開了add2.php。 在這裡,我有一對夫婦的PHP 分隔套在那裡,對不對? 線路1,3--線1和 3沒有PHP的分隔符。 所以當翻譯 看到他們,這只是 要吐了出來正好 我所輸入那裡。 所以這就是我 做所有我的提示。 上線2和4中,我們看到了非常 熟悉的$?的PHP類分隔符, 所以這兩個行是 將作為PHP執行。 然後在第5行,我有這樣的 奇怪的事情就在這裡,對不對? 這個角度支架 問號等號。 我甚至會放大得遠一點。 你可以看到這就是我 說起在那裡,這$?=。 事實證明,這是很常見的, 我們開闢了一套PHP的原因 定界符是打印出的值。 這就是我們要做的。 但是,甚至還有速記的。 $?=是PHP簡寫說 類似$?PHP的echo總和 的NUM1與NUM2。 因此,這只是另一種 速記的。 所以,如果我運行這個程序,PHP add2.php。 我會放大下跌一點點。 請給我一個數字,4。 請給我第二個數字。 而且因為我真的不關心 在PHP中的數據類型,我可以說4.8。 這兩個數字的總和是8.8。 這個函數的行為非常 就如我們所期望的一樣, 為好。 我有一個更加開放 在這裡所謂的dice.php。 再試試這個。 我有一個更這裡所說的 dice1.php,這也見, 有一個尖括號問題 在那裡慶祝等號符號, 但是請注意,在這種情況下,我 調用函數蘭特,你這 可能期望產生一個隨機數。 “你滾了,”並且這將 計算一些隨機數,模6 + 1。 所以這會給我一些 為1〜6的範圍內。 請記住,國防部6會給我 一個數為0〜5的範圍內, 但如果我在模擬擲骰, 這就是我在這裡做, 我不希望這些骰子從0去 至5,我想骰子從1至6。 所以這是一種方式來獲得 我在1至6的範圍內。 我這樣做兩次。 因此很明顯,我壓延 兩個骰子此計劃。 所以,我清楚我的屏幕, 我會做的PHP dice1.php。 您擲出4和2。 如果我運行的程序 再次,你滾5和5。 所以,我每次運行程序時, 我得到不同的號碼, 因為每次我這樣做 所以,它開始了。 這將生成一個新的 設置隨機數我的。 因此,如果我們已經習慣了 從C運行的程序, 我們已經習慣了打字./的 一個程序的名字吧? 這就是我們如何做的一切 我們在C程序為止。 我們可以在PHP中做到這一點,以及 通過添加一種叫 一個家當我們的PHP文件的頂部。 我知道這是一種愚蠢的詞。 這是短期的哈希爆炸。 這是前兩個字符出現。 還記得我們稱之為感嘆號 經常一聲巨響計算機科學。 這也可能是尖銳的爆炸。 有一對夫婦的方式來解釋它。 但它基本上是一種特殊的 命令的PHP解釋器 理解為,哦,我想 您可以執行該程序, 這顯然是/用戶/斌/ PHP的,這 實際上,其中的PHP解釋器 特別是住在我們的系統。 所以it's--這裡發生的事情是 解釋明白,哦, 我顯然應該使用 這一計劃運行此文件。 所以,它可以讓你 跳過步驟 不必去說PHP something.php。 還有另一個抓 在這裡,這是,如果我們 希望我們的節目 達到預期效果,我們 需要做一些所謂的 文件權限的改變。 我們將go--和我們談一點 更多的有關文件權限更改 在我們的視頻MVC的,但我只想 說這就是你需要做的 為了使您的 .php文件的可執行文件。 因此,讓我們來看看本作 我們在CS50 IDE最後的例子了。 所以在這裡的IDE我在這兩個文件 這似乎不是PHP目錄 所謂的.php。 我有一個稱為函數add-- 我有一個名為ADD3 並要求文件dice2。 因此,讓我們快速瀏覽 外觀和開拓ADD3。 正如你所看到的,在開始 我的文件我有這個家當,對不對? 該散列標記感嘆號。 現在,你也可能 注意到,由於某種原因, 我沒有任何語法 突出了, 這就是我前面提到, 這是說,如果我沒有名字我的文件 .PHP,我沒有好處 語法高亮了。 這個文件就被稱為ADD3。 所以,我可以在以後運行 以./ ADD3,而不是./ add3.php。 所以reason--它仍然 很好,它仍然是有效的PHP, 但它沒有語法高亮,因為 該文件不叫something.php。 這是唯一的真正的區別 這裡,加上家當。 因此,讓我們看看會發生什麼時, 我嘗試運行此程序。 ./ ADD3,就像我會與C猛砸。 ./ ADD3權限被拒絕。 這是你將成為怎樣 就看你忘了 使用chmod命令更改 該文件的權限。 事實證明,常規PHP 文件不能只是執行。 他們可以理解,但我們 做的東西在這裡有點不同。 我們正在執行它。 所以我需要添加權限 執行,文件模式一+ X到ADD3。 那麼我可以說./ ADD3。 請給我一個號碼。 5,6。 這兩個數字的總和為11。 同樣的,我已經chmoded dice2,這樣我就可以只輸入./ dice2, 你推出一個1和一個1,你 軋製一個5和4,等等。 所以這是相當多的 一個PHP語法的想法,對吧? 有很多打通,我知道了。 但希望你現在已經看到PHP 是不是真的那麼從C不同 真是給了我們的能力 拿東西了一個或兩個檔次。 我們真的不擔心 太多about--我們真的不 不得不過分擔心 低級別的細節,我們 不用擔心用C,對不對? 我們可以專注於更高 級別的東西,PHP 使我們能夠做的,並採取了 想當然地認為它會為我們工作。 所以,它給了我們的能力,現在, 從C過渡到PHP, 使該是多了很多方案 複雜,或許很多更穩健。 所以,我希望你有樂趣的工作 用PHP,我是道格·勞埃德。 這是CS50。