PHP - part IEnsky / 林宏昱
Client – Server Recall       HTTP Request      HTTP Response      + BODY(HTML)
Server Implement1. 建立連線(socket),等client進來2. Client進來 -> 分析HTTP Request,   找出URL、Host、Cookie等等資訊3. 根據上述資訊開始產生所需資料4. 將產出的資料丟...
Server Implement1. 建立連線(socket),等client進來2. Client進來 -> 分析HTTP Request,   拆出來!   找出URL、Host、Cookie等等資訊3. 根據上述資訊開始產生所需資料4. ...
Server Implement1. 建立連線(socket),等client進來2. Client進來 -> 分析HTTP Request,   Web   找出URL、Host、Cookie等等資訊         Server3. 根據上...
Server Implement             HTTP RequestHTTP         Web server     stdin + envResponse+ BODY               stdout       ...
CGI Implementinclude <iostream>using namespace std;int main () {    cout “<!doctype html>”;    cout “<html>”;    cout “   ...
Any better choice?
We Save Your Time!
我今天要講的是…
HELLO WORLD!<?php  echo “hello world!”;?>ORhello world!
PHP is a programming languagePHP是某個人用C寫CGI寫到快吐血,憤而寫出的程式語言既然是程式語言,所有C++、JAVA、Python、…,他們能做到的事情,PHP基本上都辦得到你可以用它來寫Web server、...
PHP is a Interpreted languageNo need to compile, PHP will compile thenexecute.不用compile的意思是他會在「每次」request進來的時候compile,無論你有...
PHP 的型態• 基本型態如下 – Boolean ( True / False ) – Integer – Float – String (“abc” ‘cde’)• 複雜型態如下 – Array – Object
PHP 是個寬鬆型態的語言• 變數在使用前不需宣告他的型態 $a = “this is a string”• 變數會自動轉換型態 $a = “1”; //String $b = $a + 1; //Integer
PHP 是個寬鬆型態的語言• 自動轉型好規好,有他的問題在 var_dump(“” == 0); // bool(true) var_dump(“0” == 0); // bool(true) var_dump(“0” == “”); // b...
Variable Scope in PHPC++裡面的scopefor ( int i = 1; i <= 5; i++ ) { do something… }cout << i << endl;//這裡會錯,他會說i在這個scope裡面
Variable Scope in PHPPHP裡面的scope• in Global  最外面的變數都是global 變數• In function  在function內的變數都是local變數,沒有內  層scope。
Variable Scope in PHP要取用global變數有兩種方法,假設現在有$a, $b在global裡面function I_want_to_use_global_var (){    global $a;    $a = ‘x’;...
Operator in PHP• 大家都會的  +, -, *, /, %, ++, --  <, <=, >, >=, ==, ===, !=, !==  &&, ||  其中,&&也可以寫成AND, ||也可以寫成OR• 字串連接用「.」 ...
Operator in PHP• 變數和字串的連接有幾種方式  $a = 123;  $b = “this is a number: ” . $a;  $b = “this is a number: {$a}”;• 我個人比較偏好前一種,因為可...
String in PHPPHP中,字串可以用單引號或雙引號包起來,但兩者在PHP中意義不同• 單引號包起來的字串,寫什麼就是什麼$a = 123;echo ‘ $a is 123n haha ’;// $a is 123n haha• 雙引號...
Function in PHP• PHP的function很直覺使用 function is_even ($n) {    return $n % 2 == 0; } echo is_even(1); // 0• PHP的function也可以...
Function in PHP• PHP function 的參數可以有預設值function print_something ($str=‘a’){     echo $str;}print_something(‘123’); // 123p...
Take a break
Array in PHP• 可以像你平常用的array$scores = [60, 59, 70];print_r($scores);/*Array(    [0] => 60    [1] => 59    [2] => 70)*/echo ...
Array in PHP• 可以當queue或stack來用,超爽$scores = [60, 100];$scores[] = 71; // or, use array_push()// $scores = [60, 100, 71]arra...
Array in PHP• 也可以當hash table來用,超爽  (dictionary in python)$stu = [      “name” => “ensky”,      “height” => “180”,      “we...
Array in PHP有超多好用的function可以使用• array_rand – 從array中隨機挑一個元素出來• array_slice – 切割陣列• array_unique – 把陣列中重複的元素去掉• shuffle – 把...
foreach in PHP• PHP其他的流程控制都跟c++很像,在此不  多提(for, while, do…while, switch, if, else …)。• 介紹一個比較特別的operator                for...
foreach in PHP$scores = [60, 59, 58];foreach ($scores as $score) {    echo $score . “ ”;}// will output 60 59 58但我想知道他是第幾個...
foreach in PHP$scores = [60, 59, 58];foreach ($scores as $index => $score) {    echo $index . “:” . $score . “ ”;}// will ...
foreach in PHP同理,可以適用在dictionary的情況下$person = [     “name” => “ensky”,     “height” => 180]foreach ( $person as $key => $v...
include / require in PHP在C++的時代,我們會把一份code拆成*.h檔和*.cpp檔案,其中*.h每次compile都會一起compile進去。而*.cpp則是預先compile完畢,再用linker將他們連結在一起。...
include / require in PHP而PHP呢,因為變數、class不需要先編譯才會執行,因此我們就不需要拆成header file和source file,直接全部include進來即可。<?phpinclude “funcs.p...
include / require in PHP然而,有幾個issue要注意1. PHP的include有分兩種,一種是include,   另一種是require,差別在於,若該檔案找   不到,include不會噴error,而requir...
include / require in PHP2. 目錄問題:   一般在include的時候,你很難確定到底你是   從哪裡開始include的,比方說:// index.php<?phprequire “func/func.php”;//...
include / require in PHP__DIR__ 是個神奇常數(Magic constants)他會指向檔案本身的目錄,例如說我的檔案放在/var/www/data/func/func.php那麼__DIR__的值就是/var/w...
include / require in PHP因此我可以將剛剛的code改寫成<?phprequire __DIR__ . “/haha.php”;如此一來,即使是PATH是在index.php執行的,也不會找不到檔案。
include / require in PHP3. 重複定義問題如果PHP先宣告了某個function,之後再宣告一次,就會出現重複定義錯誤而使用require的話也是一樣,如果已經require過一個檔案,之後再require一次,則會有重...
include / require in PHP此時,我們會用require_once來解決<?phprequire_once “funcs.php”;// 第二次不會作用,PHP會自己判斷是否require過了require_once “fu...
Homework• 到http://www.php.net/manual/en/langref.php  自修完class之前我沒講的部份• 到 http://www.php.net/manual/en/book.array.php  去看看a...
Homework• 實作題 II:計算機  算出postfix運算式的結果  ex: 345*+67*+89*+1+ = 138Requirement:• 題目存在$str變數裡• 答案直接echo出來• 每個數字只有1位數參考function...
Upcoming SlideShare
Loading in …5
×

OpenWebSchool - 02 - PHP Part I

1,236 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,236
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

OpenWebSchool - 02 - PHP Part I

  1. 1. PHP - part IEnsky / 林宏昱
  2. 2. Client – Server Recall HTTP Request HTTP Response + BODY(HTML)
  3. 3. Server Implement1. 建立連線(socket),等client進來2. Client進來 -> 分析HTTP Request, 找出URL、Host、Cookie等等資訊3. 根據上述資訊開始產生所需資料4. 將產出的資料丟回Client
  4. 4. Server Implement1. 建立連線(socket),等client進來2. Client進來 -> 分析HTTP Request, 拆出來! 找出URL、Host、Cookie等等資訊3. 根據上述資訊開始產生所需資料4. 將產出的資料丟回Client
  5. 5. Server Implement1. 建立連線(socket),等client進來2. Client進來 -> 分析HTTP Request, Web 找出URL、Host、Cookie等等資訊 Server3. 根據上述資訊開始產生所需資料 CGI4. 將產出的資料丟回Client
  6. 6. Server Implement HTTP RequestHTTP Web server stdin + envResponse+ BODY stdout CGI
  7. 7. CGI Implementinclude <iostream>using namespace std;int main () { cout “<!doctype html>”; cout “<html>”; cout “ <head>”; ...以下略}
  8. 8. Any better choice?
  9. 9. We Save Your Time!
  10. 10. 我今天要講的是…
  11. 11. HELLO WORLD!<?php echo “hello world!”;?>ORhello world!
  12. 12. PHP is a programming languagePHP是某個人用C寫CGI寫到快吐血,憤而寫出的程式語言既然是程式語言,所有C++、JAVA、Python、…,他們能做到的事情,PHP基本上都辦得到你可以用它來寫Web server、BBS抓魚機器人、Hadoop程式、NP作業…XD
  13. 13. PHP is a Interpreted languageNo need to compile, PHP will compile thenexecute.不用compile的意思是他會在「每次」request進來的時候compile,無論你有沒有改過那個檔案。 – 很慢所以我們通常會安裝一些快取OP code的外掛
  14. 14. PHP 的型態• 基本型態如下 – Boolean ( True / False ) – Integer – Float – String (“abc” ‘cde’)• 複雜型態如下 – Array – Object
  15. 15. PHP 是個寬鬆型態的語言• 變數在使用前不需宣告他的型態 $a = “this is a string”• 變數會自動轉換型態 $a = “1”; //String $b = $a + 1; //Integer
  16. 16. PHP 是個寬鬆型態的語言• 自動轉型好規好,有他的問題在 var_dump(“” == 0); // bool(true) var_dump(“0” == 0); // bool(true) var_dump(“0” == “”); // bool(false)• 因此很多的時候我們會需要 「連型態一起判斷」的判斷式 === – var_dump(“” === 0); // bool(false)• 強制轉型的方法和c++一樣,在此不多提
  17. 17. Variable Scope in PHPC++裡面的scopefor ( int i = 1; i <= 5; i++ ) { do something… }cout << i << endl;//這裡會錯,他會說i在這個scope裡面
  18. 18. Variable Scope in PHPPHP裡面的scope• in Global 最外面的變數都是global 變數• In function 在function內的變數都是local變數,沒有內 層scope。
  19. 19. Variable Scope in PHP要取用global變數有兩種方法,假設現在有$a, $b在global裡面function I_want_to_use_global_var (){ global $a; $a = ‘x’; $GLOBALS[‘b’] = ‘y’;}
  20. 20. Operator in PHP• 大家都會的 +, -, *, /, %, ++, -- <, <=, >, >=, ==, ===, !=, !== &&, || 其中,&&也可以寫成AND, ||也可以寫成OR• 字串連接用「.」 “this is a “ . “string”
  21. 21. Operator in PHP• 變數和字串的連接有幾種方式 $a = 123; $b = “this is a number: ” . $a; $b = “this is a number: {$a}”;• 我個人比較偏好前一種,因為可以放運算 式。
  22. 22. String in PHPPHP中,字串可以用單引號或雙引號包起來,但兩者在PHP中意義不同• 單引號包起來的字串,寫什麼就是什麼$a = 123;echo ‘ $a is 123n haha ’;// $a is 123n haha• 雙引號包起來的字串,會幫你轉換變數、換行符號 等等echo “ $a is 123n haha ”// 123 is 123// haha
  23. 23. Function in PHP• PHP的function很直覺使用 function is_even ($n) { return $n % 2 == 0; } echo is_even(1); // 0• PHP的function也可以是個值 $is_even = function ($n) { return $n % 2 == 0; } echo $is_even(2); // 1
  24. 24. Function in PHP• PHP function 的參數可以有預設值function print_something ($str=‘a’){ echo $str;}print_something(‘123’); // 123print_something(); // a
  25. 25. Take a break
  26. 26. Array in PHP• 可以像你平常用的array$scores = [60, 59, 70];print_r($scores);/*Array( [0] => 60 [1] => 59 [2] => 70)*/echo $scores[1]; // 59
  27. 27. Array in PHP• 可以當queue或stack來用,超爽$scores = [60, 100];$scores[] = 71; // or, use array_push()// $scores = [60, 100, 71]array_unshift($scores, 80);// $scores = [80, 60, 100, 71]$first = array_shift($scores);// $first = 80, $scores = [60, 100, 71]
  28. 28. Array in PHP• 也可以當hash table來用,超爽 (dictionary in python)$stu = [ “name” => “ensky”, “height” => “180”, “weight” => “65”];echo $stu[“name”]; // ensky
  29. 29. Array in PHP有超多好用的function可以使用• array_rand – 從array中隨機挑一個元素出來• array_slice – 切割陣列• array_unique – 把陣列中重複的元素去掉• shuffle – 把陣列隨機排序還有好多排序function,穩定排序、照key排序、照value排序等等等…..• http://www.php.net/manual/en/ref.array.php
  30. 30. foreach in PHP• PHP其他的流程控制都跟c++很像,在此不 多提(for, while, do…while, switch, if, else …)。• 介紹一個比較特別的operator foreach• 簡單來說,就是從一個陣列中, 把東西一個一個依序拿出來
  31. 31. foreach in PHP$scores = [60, 59, 58];foreach ($scores as $score) { echo $score . “ ”;}// will output 60 59 58但我想知道他是第幾個元素,怎麼辦哩?
  32. 32. foreach in PHP$scores = [60, 59, 58];foreach ($scores as $index => $score) { echo $index . “:” . $score . “ ”;}// will output 0:60 1:59 2:58
  33. 33. foreach in PHP同理,可以適用在dictionary的情況下$person = [ “name” => “ensky”, “height” => 180]foreach ( $person as $key => $val ) { echo “{$key} => {$val}n”;}// name => ensky// height => 180
  34. 34. include / require in PHP在C++的時代,我們會把一份code拆成*.h檔和*.cpp檔案,其中*.h每次compile都會一起compile進去。而*.cpp則是預先compile完畢,再用linker將他們連結在一起。Header file裡面只包含「定義」。Source file裡面是程式碼本身。
  35. 35. include / require in PHP而PHP呢,因為變數、class不需要先編譯才會執行,因此我們就不需要拆成header file和source file,直接全部include進來即可。<?phpinclude “funcs.php”;// ORrequire “funcs.php”;
  36. 36. include / require in PHP然而,有幾個issue要注意1. PHP的include有分兩種,一種是include, 另一種是require,差別在於,若該檔案找 不到,include不會噴error,而require會。 一般情況下,你不會期待include一個檔案, 然後他找不到之後還繼續跑吧,所以我們 一般情況下會用require。
  37. 37. include / require in PHP2. 目錄問題: 一般在include的時候,你很難確定到底你是 從哪裡開始include的,比方說:// index.php<?phprequire “func/func.php”;// in func/func.phprequire “haha.php”; // include func/haha.php但此時你的路徑是index.php那層不是func資料夾內,因此haha.php會找不到
  38. 38. include / require in PHP__DIR__ 是個神奇常數(Magic constants)他會指向檔案本身的目錄,例如說我的檔案放在/var/www/data/func/func.php那麼__DIR__的值就是/var/www/data/funcref:http://php.net/manual/en/language.constants.predefined.php
  39. 39. include / require in PHP因此我可以將剛剛的code改寫成<?phprequire __DIR__ . “/haha.php”;如此一來,即使是PATH是在index.php執行的,也不會找不到檔案。
  40. 40. include / require in PHP3. 重複定義問題如果PHP先宣告了某個function,之後再宣告一次,就會出現重複定義錯誤而使用require的話也是一樣,如果已經require過一個檔案,之後再require一次,則會有重複定義問題。
  41. 41. include / require in PHP此時,我們會用require_once來解決<?phprequire_once “funcs.php”;// 第二次不會作用,PHP會自己判斷是否require過了require_once “funcs.php”;所以我其實最常用require_once。
  42. 42. Homework• 到http://www.php.net/manual/en/langref.php 自修完class之前我沒講的部份• 到 http://www.php.net/manual/en/book.array.php 去看看array有哪些function可以用
  43. 43. Homework• 實作題 II:計算機 算出postfix運算式的結果 ex: 345*+67*+89*+1+ = 138Requirement:• 題目存在$str變數裡• 答案直接echo出來• 每個數字只有1位數參考function:• str_split• is_numeric• array_pop

×