PHP編程與應用
來源:文萃谷 6.49K
剛入門PHP學員對於PHP的各個方面都還不是很瞭解,以下本站小編整理的PHP編程與應用的介紹,希望對大家有所幫助,更多信息請關注應屆畢業生網! 第一章 PHP3簡介 PHP 是一種服務器內置式的script 語言,它的出現使得在unix上快速地開發動態web成為現實。 PHP是Rasmus Lerdorf在1994年秋天構思出來的。最早的未發行版本是他在自己的主頁上來用來和觀看他的在線簡歷的人保持聯繫的。第一個交付用户使用的版本是在1995年初發行的,它只是被當作一個個人主頁製作工具。當時它僅包括一個只能懂得很少幾條宏指令的非常簡單的分析引擎和一組用於主頁信息反饋的工具(一個留言簿,一個計數器和一些其他的東西)。1995年年中,Rasmus重寫了整個解析器,並取名為PHP/FI 2。FI來源於他寫的另外一個html表單集成數據的軟件包。他把個人主頁工具,表單集成工具合併在一起,並加入了mSQL數據庫的支持,這樣就有了PHP/FI。此後PHP/FI便以一種令人驚奇的速度傳播開來,人們開始大量使用它編寫程序。 我們無法確切的統計它的使用範圍,但是根據估計到1996年底,世界上已經有至少15,000個站點在使用PHP/FIl。到了1997年年中這個數字已經增長到超過50,000個站點。 1997年年中我們也發現了PHP發展過程中一個重大的轉折。這就是PHP的開發從Rasmus個人的愛好升級到一羣程序員們有組織的工作。 再後來,這個解析器被Zeev Suraski和Andi Gutmans重寫,通過這次全面的重寫,大量PHP/FI的功能被移植到PHP3中,並且成為了PHP3的基本雛形。 到1998年年中時,已經有大量的商業化產品,例如 C2的 StrongHold web server和RedHat Linux捆綁了PHP/FI解析器或PHP3解析器,根據NetCraft估計的保守數據,PHP已經被世界上150,000個站點所採用。通過進一步分析,我們知道其使用數量遠比使用Netscape公司旗艦產品--企業級WEB服務器的站點多。 PHP3大量採用了C, Java和Perl語言的語法,並加入了各種PHP自己的特徵。它與javascript等語言的一個區別就是PHP3是在服務器執行,客户機所看到的是其在服務器上運行的結果,這意味着您若想採用PHP3 scrpit,必須得有 WEB SERVER 支持。 PHP3支持HTTP的身份認證、cookie、GIF圖象創建,它的一個最有代表性的特點是它的數據庫層,它使得編寫基於數據庫的網頁變得非常簡單。下列出了目前所支持的數據庫: Oracle ,Sybase , mSQL ,MySQL ,Informix ,Solid dBase ,ODBC, Unix dbm, PostgreSQL ,Adabas D,FilePro Velocis。 PHP3也支持與採用POP3、HTTP、SNMP、NNTP、IMAP等協議的服務進行網絡編程。 PHP3的程序模式 有三種方法從HTML進入"PHP程序模式": 第一種方法: 如: 第二種方法: 如: 第一種方法: <script language="php"> PHP3語句; </script> 如: <script language="php"> echo("some editors (like FrontPage) don't like processing instructions");</script> 第二章 變 量 PHP3支持下面類型的變量: (一)、內部變量 主要有整數(interger),浮點數(float-point numbers),字符串(string),數組(array),對象(object)。 1 初始化變量 要在PHP中初始化變量, 你只要簡單的給它賦值即可。對於大多數類型,這是最直接的。對於數組和對象,可以使用其它方法。 2 初始化數組 數組可以使用這兩種方法之一來賦值: 使用一系列連續數值,或使用array()函數構造 (見 Array functions 部分)。 要將連續的數值加進數組,你只需將要賦值賦給不帶下標的數組變量。該值會作為數組的最後元素加進數組中。 例: $names[] = "Jill"; // $names[0] = "Jill" $names[] = "Jack"; // $names[1] = "Jack" 與c、perl相似,數組下標也是從0開始。 3 初始化對象 要初始化一個對象,需用new語句建立該類型的變量。 class foo { function do_foo() { echo "Doing foo."; } } $bar = new foo; $bar->do_foo(); 4 變量作用域 變量的作用域就是它的有效範圍。對於大多數PHP的變量只有一個作用域。在用户自定義函數裏採用局部變量作用域。函數內使用的變量被缺省設置為局部變量。例如: $a=1; /* global scope */ Function Test() { echo $a; /* reference to local scope variable */} Test(); 這段程序不會輸出任何的東西,因為echo語句要輸出局部變量 $a ,而函數內的' $a 從未被賦過值。你可能注意到這和C語言有點小小的區別,C中全局變量可以直接在函數內引用,除非它被一個局部變量所覆蓋。而這使得人們可能不注意修改了全局變量的值。在PHP中要在函數內部使用全局變量必須顯式的説明。例如: $a=1; $b=2; Function Sum() { global $a,$b; $b = $a + $b; } Sum(); echo $b; 上面程序將輸出"3"。通過在函數內部聲明$a和$b是全局變量,所要變量都參考全局。一個函數可以操縱的全局變量的數量沒有限制。 作用域的另外一個值得注意的地方是static 變量。一個 static變量存在於局部函數中,但當程序離開這個函數時它的值不會丟失。考慮下面的例子: Function Test() { $a=0; echo $a; $a++; } 這個函數是沒用的,因為每次調用時它都先把$a賦為 0 然後打出"0"。 對$a++的自加沒有任何效果因為函數調用結束後變量$a 就被釋放了。要使記數程序有效記數而不丟掉當前的記數結果,$a 要聲名為static變量: Function Test() { static $a=0; echo $a; $a++; } 現在,每次調用Test()函數它都會打出$a的值並把增加它的值。 當使用遞歸函數時靜態變量是必不可少的。遞歸函數就是調用自己的函數。寫遞歸函數時一定要十分小心,因為它的循環次數不確定。你必須確保有足夠的條件結束遞歸過程。下面是一個簡單的遞歸函數記數到10: Function Test() { static $count=0; $count++; echo $count; if($count < 10) { Test(); } } (二) 動態變量 有時使用可變的變量名比較方便。就是説,一個能夠被動態賦值和使用的變量名。一個普通變量的賦值語句如: $a = "hello"; 一個動態變量引用該變量的值作為一個新變量的名字。在上面例中, hello,可以通過雙$用做變量名。例: $$a = "world"; 至此,兩個變量被定義並存貯在PHP符號樹中: $a 的內容是"hello",$hello 的內容是 "world"。 因此,語句: echo "$a ${$a}"; 的顯示結果完全等同於: echo "$a $hello";(三)PHP外部變量1、HTML表單(GET和POST) 當一個表單提交給PHP3 script時,PHP會自動得到表單中的變量。例如: Name: 提交 當按下”submit”後,PHP3會自動產生變量:$name,其中包含了用户輸入的所有內容。 2、IMAGE SUBMIT 變量名 當提交一個表單時,可以通過下面標記用一副圖代替標準的提交按鈕: 提交 提交 當用户點擊該圖時,兩個附加變量sub_x和sub_y就會伴隨表單一起送到server上。其中包含了用户在圖上點擊處的座標。有經驗的人可能注意到瀏覽器實際送出的名字包含一個句號而不是下劃線,但PHP自動將句號轉換成了下劃線。 3、HTTP Cookies PHP支持HTTP cookies。Cookies在客户端瀏覽器存儲數據,以此和用户保持聯絡或驗證用户身份。你可以使用setcookie() 函數來設置cookies。 Cookies是HTTP請求頭的一部分,所以必須在任何輸出數據返回給用户瀏覽器前調用SetCookie()函數。它類似於 Header() 函數的限制。任何用户端返回的cookies都將被自動轉換為標準的PHP變量,就象GET和POST方法的數據。 如果要在一個 cookie中設置多個值,要給這個cookie的名字加上 [] ,例如: SetCookie("MyCookie[]","Testing", time()+3600);注意:新的cookie將覆蓋掉你的瀏覽器中已有的同名cookie,除非它們具有不同的路徑或域。 4、環境變量 PHP自動將環境變量轉換為普通的變量。 echo $HOME; /* Shows the HOME environment variable, if set. */儘管來自GET,POST 及 Cookie結構的信息也會被自動轉化為PHP的變量, 但最好明確的從環境變量中讀取它們以確保獲得正確的值。為此可使用 getenv() 函數。也可以通過 putenv() 函數設置變量。 變量類型轉換 PHP中不需要(也不支持)在變量定義時做顯式的類型聲明;一個變量的類型取決於它的值的類型。也就是説,如果你給變量var 賦了一個字符串值,var 就成為字符串變量。如果你又賦了一個整型值給var, 它就變成了一個整型變量。 一個PHP自動類型轉換的例子是加法操作符 '+'。如果任何一個操作數是double型,則所有的操作數按 double類型來計算, 結果也是double型的。否則,所有的操作數按integer類型來計算, 結果也是integer型的。注意:操作數本身的類型不發生變化;類型變換僅在計算時做$foo = "0"; // $foo is a string (ASCII 48)$foo++; // $foo is the string "1" (ASCII 49)$foo += 1; // $foo is now an integer (2)$foo = $foo + 1.3; // $foo is now a double (3.3)$foo = 5 + "10 Little Piggies"; // $foo is a double (15)$foo = 5 + "10 Small Pigs"; // $foo is an integer (15)要改變變量的類型,也可用settype() 函數。 1、強制類型轉換 PHP中的強制類型轉換和C中一樣: 在需要進行類型強制轉換的變量前的括號中寫出想要的類型名。 $foo = 10; // $foo is an integer $bar = (double) $foo; // $bar is a double允許的強制轉換是: (int), (integer) - cast to integer (real), (double), (float) - cast to double(string) - cast to string(array) - cast to array (object) - cast to object 注意:括號中可以含有tab或空格,下面的函數將被計算: $foo = (int) $bar; $foo = ( int ) $bar; 2、字符串轉換 當字符串作為數值類型計算時,結果的值和類型按以下方式決定。 如果字符串中包含任何'.', 'e',及'E'字符,則被作為double類型計算。否則,就作為integer類型計算。 該值從字符串最開始算起。如果字符串是合法的數字,則使用該值,否則值為 0 。合法的數字是一個符號位(可選),後跟一位或幾位數字(也可含有一個十進制的小數點), 後跟一位可選的指數。指數是一個 'e' 或 'E'後跟一個或幾個數字。 $foo = 1 + "10.5"; // $foo is a double (11.5)$foo = 1 + "-1.3e3"; // $foo is a double (-1299)$foo = 1 + "bob-1.3e3"; // $foo is a double (1)$foo = 1 + "bob3"; // $foo is an integer (1)$foo = 1 + "10 Small Pigs"; // $foo is an integer (11)$foo = 1 + "10 Little Piggies"; // $foo is a double (11); the string contains 'e' 第三章 運算符 下面我分別看一下PHP3的算術、字符串、邏輯與比較等運算符。 1、算術運算符 +: $a + $b 加 $a加上$b -: $a - $b 減 $a減去$b *: $a * $b 乘 $a乘以$b /: $a / $b 除 $a除以$b %: $a % $b 取模 $a除以$b的餘數 如果兩個操作數都是整型值(字符串將被轉換為整型值),除號("/") 返回整型值(整除的值)。如果任一個操作數是浮點值,則做浮點除法。 2 字符串運算符 字符串操作符只有字符串連接符 (".")。 $a = "Hello "; $b = $a . "World!"; // now $b = "Hello World!"3、賦值運算符基本的賦值運算符是 "="。 一個賦值表達式的值就是所賦給的值。例如, 表達式 $a = 3 的值是3。 這允許你這樣做一些複雜的事情: $a = ($b = 4) + 5; // 現在 $a 等於 9, $b為4 。 除了基本賦值符外,還有"複合運算符"。對於所有的二進制數和字符串,允許你做變量自我複合運算。例如: =: $a = 3; +=:$a += 5; // 把$a 設成 8, 也就是: $a = $a + 5;$b = "Hello ";. :$b .= "There!"; // 把 $b 設成 "Hello There!", 就象 $b = $b . "There!";4、 位運算符位運算允許你對指定的數據置位或復位。 &:與運算,$a & $b 與 $a和$b都被置位則結果被置位|:或運算,$a | $b 或 $a或$b有一個被置位則結果被置位~:非運算,~ $a 非 $a沒有被置位則結果被置位5、 邏輯運算符and: $a and $b 與 $a和$b同時為真則結果為真or : $a or $b 或 $a或$b有一個為真則結果為真xor: $a xor $b 異或 $a和$b不同時為真則結果為真! : ! $a 非 $a為假則結果為真&&: $a && $b 與 $a和$b同時為真則結果為真||: $a || $b 或 $a或$b有一個為真則結果為真比較兩個變量時,"與"和"或"運算有兩種運算符這是以為兩種運算符有不同的優先級6、 比較運算符比較運算符,就象名字一樣,允許你比較兩個值。 ==: $a == $b 等於 $a等於$b結果為真 !=: $a != $b 不等於 $a不等於$b結果為真 < : $a < $b 小於 $a小於$結果為真 > : $a > $b 大於 $a大於$b結果為真 <=: $a <= $b 小於等於 $a小於或等於$b結果為真>=: $a >= $b 大於等於 $a大於或等於$b結果為真第四章 表達式表達式是PHP最重要的組成元素。在PHP 3.0中,幾乎你所寫的任何東西都是表達式。表達式的最簡單但精確的定義是"有一個值的任何東西"。 一個簡單的例子是常量和變量。當你寫 "$a = 5"時, 你給 $a 賦了值 '5' 。 (在這種情況下, '5' 是一個整形常量)。 在此,你是希望把 $a 賦值成 5。所以寫 $b = $a 時,你希望的結果就是 $b = 5 。即 $a 是一個值為 5 的表達式。 複雜表達式的簡單例子是函數。比如説,考慮以下函數: function foo() { return 5; } 如果你認為寫$c = foo()實際上和寫 $c = 5是一樣的,那麼你是對的。函數是值為其返回值的表達式。因為foo() 返回5, 所以表達式 'foo()'的值是 5 。 PHP的值當然不限於整形,且通常都不是。PHP支持三類值的類型: 整形值,浮點值和字符串值。PHP 支持兩種混合類型(non-scalar): 數組和對象。這兩種類型的值可以賦給變量或從函數中返回。 PHP 3是一種面向表達式的語言, 所以幾乎所有東西都是表達式。考慮我們已經討論的例子, '$a = 5'。很容易看出這裏有兩個值,整形常量 '5'的值,和也被賦為 5 的變量 $a 的值。但是這裏實際上還有一個附加的值,就是賦值語句本身的值。賦值語句本身的值就是被賦給的值,本例中是 5. 事實上,它意味着不考慮 '$a = 5'要做什麼,它是一個值為 5 的表達式。這樣,寫諸如 '$b = ($a = 5)'的語句,就象 '$a = 5; $b = 5;' (每條語句末尾有一個分號)。因為賦值的順序是從右向左的你也可以寫成 '$b = $a = 5'。 表達式計算方向的另一個好例子是先加、後加及先減、後減。PHP/FI和多數其他語言的用户可能很熟悉 variable++ 和 variable--。這是自加和自減操作。在 PHP/FI 2 中,語句 '$a++' 沒有值(它不是表達式), 這樣你就既不能賦值給它也不能通過任何辦法使用它。PHP 3 把它們變成了和 C 中一樣的表達式從而增強了自加和自減運算的能力。和 C 中類似,PHP 3中也有兩種類型的自加----先加和後加。先加和後加的本質都是變量自加,對於變量本身的作用是一樣的。不同點是自加表達式的值。形如 '++$variable'的先加, 計算變量自加後的值(PHP先做變量自加,再讀取它的值,也就叫做 '先加').形如'$variable++'的後加, 則先計算原始變量$variable的值,然後才進行自加 (PHP在讀取變量的值後再做自加,因此叫做'後加'). 最常見的表達式是比較表達式。這種表達式計算結果是 0 或 1,分別意味着 FALSE 或是 TRUE。 PHP 支持 > (大於), >= (大於等於), == (等於), < (小於) 及 <= (小於等於)。這種表達式通常用在條件執行裏 , 例如 IF 語句。 在這裏我們最後要討論的表達式是混合賦值表達式。你已經知道如果要使 $a 加一,你可以簡單的寫一句 '$a++' 或者 '++$a'。但是如果要增加的值比1大怎麼辦呢,例如使它加 3 ? 你可以多寫幾次'$a++' ,但這 顯然不是一種高效或令人樂於接受的辦法。另外一個通常的辦法是寫 '$a = $a + 3'。先計算'$a + 3' 的值,在賦回到 $a, 這樣 $a 就加上 3 了。在PHP 3 中,你可以象在其他幾種語言(例如 C)一樣把它簡寫,這樣更清晰、快潔易懂。 把當前變量 $a 加 3 可以寫成 '$a += 3'。這句話的意思是 "取出 $a 的值, 把它加 3 , 在賦給 $a"。這除了使得語句簡短、清晰,還使它執行的更快。表達式 '$a += 3'的值,和一個嚴格的賦值語句一樣,是所賦的值。注意:不是 3, 而是 $a 加 3 的值(這才是賦給$a 的)。任何的雙操作符 可以被用於這種賦值操作模式,例如 '$a -= 5' (變量 $a 減去 5 ), '$b *= 7' ( 變量 $b 乘以 7),等等。 最後值得提到的是表達式的真值。很多時候(主要是在條件執行和循環時),你並不關心表達式的特定值 , 而只是注意它代表TRUE 還是 FALSE (PHP 沒有專用的布爾類型)。PHP中使用類似perl的方法計算表達式的真值。任何非零的值為 TRUE,零為 FALSE 。請一定注意負零的值是非零值,並被視為 TRUE ! 空字符串可 字符串 "0" 為 FALSE; 所其他的字符串為 TRUE 。對於非數量值(數組和對象) - 如果它的值不含任何元素為 FALSE, 否則為 TRUE。