PHP基本語法大全

世上所有美好的感情加在一起,也抵不上一樁高尚的行動。以下是小編爲大家搜索整理了PHP基本語法大全,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!

PHP基本語法大全

PHP標記

在之前的的例子中的PHP代碼是以“”爲結束,這類似於所有的HTML標記,因爲它們都是以小於號爲開始,以大於號爲結束的。這些符號就叫做PHP標記。 PHP標記中有4中不同的風格供我們使用

*XML風格

這是我們以後將使用的標記風格。他是PHP推薦使用的標記風格,服務器管理員不能禁用這種風格的標記,因此可以保證正在所有的服務器上使用這種風格的標記,特別是編寫用於不同服務器環境的應用程序時,這種標記風格尤爲重要。這種風格的標記可以在XML(可擴展置標語言)文檔中使用,如果打算在站點中使用XML,就必須使用這種風格的標記。

*簡短風格

這種標記風格是最簡單的,但要使用這種標記字符,必須在配置文件中啓用short_open_tag選項,或者啓用短標記選項編譯PHP.我們不推薦使用這種標記,因爲雖然該標記風格是當前默認啓用的,但是系統管理員偶爾會禁用它,它會干擾XML文檔的聲明。

*SCRIPT風格

這種標記風格是最長的,使用過javascript或vbscript的人就會熟悉這種風格

*ASP風格

這種標記風格和ASP或的標記風格相同。如果在配置文件中啓用了asp_tags選項就可以使用它

PHP輸出語句

有兩種通過 PHP 來輸出文本的基礎指令:echo 和 print。在上面的例子中,我們使用了 echo 語句來輸出文本 "Hello World"。

PHP註釋

對於閱讀代碼的人來說,註釋其實就相當於代碼的解釋和說明。註釋可以用來解釋腳本的用途,腳本編寫人,爲什麼要按如此的方法編寫代碼,上一次的修改時間等等,PHP支持C,C++和SHELL腳本風格的註釋。

單行註釋 # 或 //

多行註釋 /* */

注意 : 單行註釋可以嵌套在多行註釋裏使用的 但是多行註釋是無法在嵌套的

echo "這是第一種例子。n"; // 本例是 C++ 語法的註釋 /* 本例採用多行的

註釋方式 */

echo "這是第兩種例子。n";

?>

C 風格的註釋在碰到第一個 */ 時結束。小心不要嵌套 C 風格的註釋,當註釋大量代碼時,可能犯該錯誤。

/*

echo "This is a test"; /* This comment will cause a problem */

*/

?> echo "這是第三種例子。n"; # 本例使用 UNIX Shell 語法註釋

PHP數據類型

數據類型

四種標量類型:

? boolean(布爾型):表達了真值,可以爲 TRUE 或 FALSE。

要指定一個布爾值,使用關鍵字 TRUE 或 FALSE。兩個都不區分大小寫。

$foo = True; // assign the value TRUE to $foo

?>

當轉換爲 boolean 時,以下值被認爲是 FALSE:

?

?

?

?

?

? 布爾值 FALSE 整型值 0(零) 浮點型值 0.0(零) 空白字符串和字符串 "0" 沒有成員變量的數組 特殊類型 NULL(包括尚未設定的變量)

注意:-1 和其它非零值(不論正負)一樣,被認爲是 TRUE!

? integer(整型)

integer 爲整數型別。在 32 位的操作系統中,它的有效範圍是 -2,147,483,648 到 +2,147,483,647 (2^31+符號位)。要使用 16 進位整數可以在面加 0x。 整型值可以用十進制,十六進制或八進制符號指定,前面可以加上可選的符號(- 或者 +)。

如果用八進制符號,數字前必須加上 0(零),用十六進制符號數字前必須加上 0x。

$a = 1234; // 十進制數

$a = -123; // 一個負數

$a = 0123; // 八進制數(等於十進制的 83)

$a = 0x1A; // 十六進制數(等於十進制的 26)

?>

? float(也叫浮點數,雙精度數或實數)

浮點數爲浮點數型別。在 32 位的操作系統中,它的有效範圍是 1.7E-308 到

1.7E+308。(自然底數e=2.71828183)

$a = 1.234;

$a = 1.2e3;

$a = 7E-10;

?>

? string(字符串)

即爲字符串變量,無論是單一字符或數千字的字符串都是使用這個變量類型。值得注意的是要指定字符串給字符串變量,要在頭尾加上雙引號 (例如: "這是字符串")。在要讓字符串換行時,可使用溢出字符,也就是反斜線加上指定的

xFE 即表十六進位字符,詳見下表: 定義字符串時,只有一種引號被視爲定義符,即單引號或雙引號。於是,如果一個字符串由雙引號開始,那麼只有雙引號被分析器解析。這樣,你就可以在雙引號串中包含任何其他字符,甚至單引號。下面的引號串都是合法的: $s = "I' m a student";

$s = ' I am a “student” ';

當PHP遇到與串的開頭相對應的引號時,便認爲已經到了字符串尾部,於是:

"Why doesn't "this" work?"

實際上被PHP語法分析器分成三個部分:

"Why doesn't "——包含一個單引號的雙引號串

this——多餘的字符,分析器無法處理

" work?" ——普通字符串

上面的這個例子企圖在雙引號串中包含雙引號,而分析器在遇到第二個雙引號時便認爲字符串結束了。要達到包含引號的目的, 必須分析器在遇到串內

普通引號的時候忽略它的原意,我們在引號的 前面加上一個反斜槓來告訴PHP:這個引號是字符串的一部分,正確的表示方法是這樣:

"Why doesn't "that" work?"

字串可以使用字串連接符(.)來連接,如:

$first_name = 'A';

$last_name = 'B';

$full_name = $first_name . ' ' . $last_name;

注意:

echo $aa. ‘test

’;

echo "$aa test

";//在雙引號中,變量名稱被變量值替代

echo ’$aa test

’;;?>//在單引號中,變量名稱或其他的文

本都會不經修改而發送給瀏覽器

複合類型:array object

? array(數組)

array 爲數組變量,可以是二維、三維或者多維數組,其中的元素也很自由,可以是 string、integer 或者 double,甚至是 array。

可以用 array() 語言結構來新建一個 array。它接受一定數量用逗號分隔的 key => value 參數對。

key 只能是整數和字符串

$a = array( 1 => 'one', 2 => 'two', 3 => 'three' );

$a = array( 'one', 'two', 'three' );默認下標是從0開始

$MyArray1 = array("a", "b", "c", "d");//一維數組

$MyArray2 = array(

"地支" => array("子", "醜", "寅", "卯"),

"生肖" => array("鼠", "牛", "虎", "兔"),

"數字" => array(1, 2, 3, 4)

); //二維數組

$arr = array(12 => true,"foo" => "bar", false);

echo $arr["foo"]; // bar

echo $arr[12]; // 1

?>

結果:bar1

$MyArray1 = array("a", "b", "c", "d");

echo $MyArray1[1];

print_r($MyArray1);

?>

結果:b(索引值從0開始)

數據類型強制轉換:

$foo = 10; // $foo is an integer

$bar = (bool) $foo; // $bar is a boolean

?>

允許的強制轉換有:

?

?

?

?

?

? (int),(integer) - 轉換成整型 (bool),(boolean) - 轉換成布爾型 (float),(double),(real) - 轉換成浮點型 (string) - 轉換成字符串 (array) - 轉換成數組 (object) - 轉換成對象

強制類型強制轉換 (參考:PHP手冊)

PHP 中的類型強制轉換和 C 中的非常像:在要轉換的變量之前加上用括號括起來的目標類型。 允許的強制轉換有:

? (int),(integer) - 轉換成整型

? (bool),(boolean) - 轉換成布爾型

? (float),(double),(real) - 轉換成浮點型

? (string) - 轉換成字符串

? (array) - 轉換成數組

? (object) - 轉換成對象

注意在括號內允許有空格和製表符

還可以用settype ( mixed var, string type )進行強制轉換.

1.強制轉換爲布爾值 (bool)|(boolean)

要明示地將一個值轉換成 boolean,用 (bool) 或者 (boolean) 來強制轉換。但是很多情況下不需要用強制轉換,因爲當運算符,函數或者流程控制需要一個 boolean 參數時,該值會被自動轉換。

當轉換爲 boolean 時,以下值被認爲是 FALSE:

布爾值 FALSE

整型值 0(零)

浮點型值 0.0(零)

空白字符串和字符串 "0"

沒有成員變量的數組

沒有單元的對象(僅適用於 PHP 4)

特殊類型 NULL(包括尚未設定的變量)

所有其它值都被認爲是 TRUE(包括任何資源)。

要明示地將一個值轉換爲 integer,用 (int) 或 (integer) 強制轉換。不過大多數情況下都不需要強制轉換,因爲當運算符,函數或流程控制需要一個 integer 參數時,值會自動轉換。還可以通過函數 intval() 來將一個值轉換成整型。

a.從bool轉換

b.從浮點數轉換 取整,超出範圍,結果不定

c.從字符串轉換 參看字符串轉換爲數值

d.從其它類型轉換 先換成 bool值,再轉換

決不要將未知的分數強制轉換爲 integer,這樣有時會導致意外的結果。

echo (int) ( (0.1+0.7) * 10 ); // 顯示 7

?>

$str = "123.456abc7"; // (int)123

echo (int)$str;

$str = "abc123.456"; // (int)0

$str = true; // (int)1

$str = false; // (int)0

3.強制轉換爲浮點型 (int)|(double)|(real)|doubleval()|floatval()|intval()

精度: 0.12345678901234 // double,real都一樣

數據的丟失參 字符串轉換爲數值

4.強制換爲字符串 (string) |strval()

可以用 (string) 標記或者 strval() 函數將一個值轉換爲字符串。當某表達式需要字符串時,字符串的轉換會在表達式範圍內自動完成。例如當使用 echo() 或者 print() 函數時,或者將一個變量值與一個字符串進行比較的時候。

? 布爾值 TRUE 將被轉換爲字符串 "1",而值 FALSE 將被表示爲 ""(即空字符串)。這樣就可

以隨意地在布爾值和字符串之間進行比較。

? 整數或浮點數數值在轉換成字符串時,字符串由表示這些數值的數字字符組成(浮點數還包含有

指數部分)。

? 數組將被轉換成字符串 "Array",因此無法通過 echo() 或者 print() 函數來輸出數組的內容。

請參考下文以獲取更多提示。

? 對象將被轉換成字符串 "Object"。如果因爲調試需要,需要將對象的成員變量打印出來,請閱

讀下文。如果希望得到該對象所依附的類的名稱,請使用函數 get_class()。自 PHP 5 起,如果合適可以用 __toString() 方法。

? 資源類型總是以 "Resource id #1" 的格式被轉換成字符串,其中 1 是 PHP 在運行時給資源

指定的唯一標識。如果希望獲取資源的類型,請使用函數 get_resource_type()。

? NULL 將被轉換成空字符串。

正如以上所示,將數組、對象或者資源打印出來,並不能提供任何關於這些值本身的有用的信息。請參閱函數 print_r() 和 var_dump(),對於調試來說,這些是更好的打印值的方法。

可以將 PHP 的值轉換爲字符串以永久地儲存它們。這種方法被稱爲序列化,可以用函數 serialize() 來完成該操作。如果在安裝 PHP 時建立了 WDDX 支持,還可以將 PHP 的值序列化爲 XML 結構。

4. 強制轉換爲數組 (array)

? 對於任何的類型:整型、浮點、字符串、布爾和資源,如果將一個值轉換爲數組,將得到一個僅

有一個元素的數組(其下標爲 0),該元素即爲此標量的值。

? 如果將一個對象轉換成一個數組,所得到的數組的元素爲該對象的屬性(成員變量),其鍵名爲

成員變量名。

? 如果將一個 NULL 值轉換成數組,將得到一個空數組。

5. 轉換爲對象 (object)

如果將一個對象轉換成對象,它將不會有任何變化。如果其它任何類型的值被轉換成對象,內置類

stdClass 的一個實例將被建立。如果該值爲 NULL,則新的實例爲空。數組轉換成對象將使鍵名成爲屬性名並具有相對應的值。對於任何其它的值,名爲 scalar 的成員變量將包含該值

6. 轉換爲資源 (無法轉換)

由於資源類型變量保存有爲打開文件、數據庫連接、圖形畫布區域等的特殊句柄,因此無法將其它類型的值轉換爲資源。

■PHP 類型比較表(看手冊附錄P)

以下的表格顯示了 PHP 類型和比較運算符在鬆散和嚴格比較時的作用。該補充材料還和類型戲法的相關章節內容有關。

? 注意

?

? HTML 表單並不傳遞整數、浮點數或者布爾值,它們只傳遞字符串。要想檢測一個字符串是不是數字,可以使用 is_numeric() 函數。 在沒有定義變量 $x 的時候,諸如 if ($x) 的用法會導致一個 E_NOTICE 級別的錯

誤。所以,可以考慮用 empty() 或者 isset() 函數來初始化變量。

PHP常量

常量:

合法的常量名以字母(由大寫字母組成和C語言一樣)或下劃線開始,後面跟着任何字母,數字或下劃線。

常量和變量不同:

常量前面沒有美元符號($);

? 常量只能用 define() 函數定義,而不能通過賦值語句;

? 常量可以不用理會變量範圍的規則而在任何地方定義和訪問;

? 常量一旦定義就不能被重新定義或者取消定義; ?

常量只能包含標量數據(boolean,integer,float 和 string)。 常量的範圍是全局的。不用管作用域就可以在腳本的任何地方訪問常量 define() 的功能可以讓我們自行定義所需要的常量。見下例

define("CONSTANT", "Hello world.");

echo CONSTANT; // outputs "Hello world."

echo Constant; // outputs "Constant" and issues a notice.

?>

PHP變量

變量:

變量用一個美元符號($)後面跟變量名來表示。變量名是區分大小寫的。 一個有效的變量名由字母或者下劃線開頭,後面跟上任意數量的字母,數字或

下劃線。

PHP 是一門鬆散類型的語言(Loosely Typed Language)

在 PHP 中,不需要在設置變量之前聲明該變量。

在上面的`例子中,您看到了,不必向 PHP 聲明該變量的數據類型。

根據變量被設置的方式,PHP 會自動地把變量轉換爲正確的數據類型。

在強類型的編程語言中,您必須在使用前聲明變量的類型和名稱。

在 PHP 中,變量會在使用時被自動聲明。

可變變量(variable variable):

$$a = '張三';?>

這個代碼等價於:$name = 張三;

$a = "Hello"; $$a = "world";

echo "$a, $hello"; // Hello, world echo "$a, {$a}"; // 也是 Hello, world ?>

變量範圍(作用域):

作用域是指在一個腳本中某個變量在哪些地方可以使用或可見。 全局變量(global variable):

$a = 1;$b = 2;

function Sum(){

global $a, $b; $b = $a + $b; } Sum(); echo $b; ?> 輸出是’3’

局部變量(local variable):任何用於函數內部的變量將被限制在局部函數範圍內。

$a = 1; /* global scope */ function Test(){

($a = 2 ;)

echo $a; /* reference to local scope variable */ } Test(); ?> 什麼也不輸出

靜態變量(static variable):在函數退出時, 這個變量始終存在,不被銷燬, 但不能被其它函數使用, 當再次進入該函數時, 將保存上次的結果。

// 靜態變量的例子 function myfunc() { static $mystr; $mystr.="哈"; echo $mystr."

n"; }

myfunc(); // 哈 myfunc(); // 哈哈 myfunc(); // 哈哈哈 ?>

PHP運算符

使用操作符:操作符是用來對數值和變量進行某種操作運算的符號。 學過的兩個操作符:賦值操作符(=)和字符串連接操作符(.)。 算數操作符:

(“/”)總是返回浮點數,即使兩個運算數是整數(或由字符串轉換成的整數)也是這樣。

注: 取模 $a % $b 在 $a 爲負值時的結果也是負值。

echo $a+$b."

n"; echo $a-$b."

n"; echo $a*$b."

n"; echo $a/$b."

n"; echo $a%$c."

n"; ?>

注意:(*)作爲乘法操作符,而不是常規的乘法符號。除法操作符同理。

字符串運算符:

有兩個字符串運算符。第一個是連接運算符(“.”),它返回其左右參數連接後的字符串。第二個是連接賦值運算符(“.=”),它將右邊參數附加到左邊的參數後。

$a = "Hello ";

$b = $a . "World!"; // now $b contains "Hello World!"

$a = "Hello ";

$a .= "World!"; // now $a contains "Hello World!" ?>

賦值運算符:

基本的賦值運算符是“=”。一開始可能會以爲它是“等於”,其實不是的。它實際上意味着把右邊表達式的值賦給左邊的運算數。

賦值運算表達式的值也就是所賦的值。也就是說,“$a = 3”的值是 3。

$a = ($b = 4) + 5; // $a 現在成了 9,而 $b 成了 4。 ?>

括號提高子表達式的優先級

複合賦值操作符:

增加程序的執行效率。

$a += 2; // 即 $a = $a + 2; echo $a."

n"; $b = "哇";

$b .= "哈"; // $b = "哇哈"; $b .= "哈"; // $b = "哇哈哈"; echo "$b

n"; ?>

遞增/遞減運算符:

注: 遞增/遞減運算符不影響布爾值。遞減 NULL 值也沒有效果,但是遞增 NULL 的結果是 1。注意字符變量只能遞增,不能遞減。

比較運算符: 比較兩個值。根據比較結果返回: false。 比較運算符: 比較兩個值。根據比較結果返回:true 或 false。例子名稱結果 TRUE,如果 $a 等於 $b。 TRUE TRUE,如果 $a 不等於 $b。 TRUE TRUE,如果 $a 不等於 $b。 TRUE TRUE,如果 $a 嚴格小於 $b。 TRUE- 16 -$a == $b 等於 $a != $b 不等 $a <> $b 不等 $a < $b 小與

例子名稱結果 TRUE,如果 $a 嚴格 $b。 TRUE$a > $b 大於$a <= $b 小於等於 TRUE TRUE,如果 $a 小於或者等於 $b。 $a >= $b 大於等於 TRUE,如果 $a 大於或者等於 $b。 TRUE邏輯運算符: 邏輯運算符:例子名稱結果 TRUE,如果 $a 與 $b 都爲 TRUE TRUE。 TRUE TRUE,如果 $a 或 $b 任一爲 TRUE TRUE。 TRUE$a and $b And(邏輯與) $a or $b Or(邏輯或)$a xor $b Xor(邏輯異或) TRUE TRUE,如果 $a 或 $b 任一爲 TRUE TRUE,但不同時是。 ! $a Not(邏輯非) TRUE,如果 $a 不爲 TRUE TRUE。 TRUE TRUE,如果 $a 與 $b 都爲 TRUE TRUE。 TRUE TRUE,如果 $a 或 $b 任一爲 TRUE TRUE。 TRUE$a && $b And(邏輯與) $a || $b Or(邏輯或)“與”和“或”有兩種不同形式運算符的原因是它們運算的優先級不同 - 17 -

PHP 語句條件判斷語句: 條件判斷語句: 第一種是隻有用到 if 條件, 當作單純的判斷。 解釋成 "若發生了某事則怎樣 處理"。 if (expr) { statement } 其中的 expr 爲判斷的條件,通常都是用邏輯運算符號 (logical operators) 當判斷 的條件。而 statement 爲符合條件的執行部分程序,若程序只有一行,可以省略大括 號 {}。 範例:本例省略大括號。 範例:本例的執行部分有三行,不可省略大括號。 第兩種是除了 if 之外,加上了 else 的條件,可解釋成 "若發生了某事則怎樣處理, 否則該如何解決"。範例:上面的例子來修改成更完整的處理。其中的 else 由於只有一行執行的指令,因 此不用加上大括號。

} ?>如果當前日期是週五,下面的代碼將輸出 "週末愉快!",否則會輸出 "美好的一天!": 如果需要在條件成立或不成立時執行多行代碼,應該把這些代碼行包括在花括號中: 3

第三種就是遞歸的 循環,通常用在多種決策判斷時。它將數個 拿 來合併運用處理。 直接看下面的例子 $b) { echo "a 比 b 大"; } elseif ($a == $b) { echo "a 等於 b"; } else { echo "a 比 b 小"; } ?> 上例只用二層的 循環,用來比較 a 和 b 兩個變量。實際要使用這種遞歸 循環時,請小心使用,因爲太多層的循環容易使設計的邏輯出問題,或者少 打了大括號等,都會造成程序出現莫名其妙的問題。如果當前日期是週五,下面的例子會輸出 "週末愉快!",如果是週日,則輸出 "星期天愉快!",否則輸出 " 美好的一天!":

else echo "美好的一天!"; ?> e 是重複敘述的循環,可以分成兩種模式。 最單純的就是隻有 while 的循環。用來在指定的條件內,不斷地重覆指定的步驟。語 法如下 while (expr) { statement } 其中的 expr 爲判斷的條件,通常都是用邏輯運算符號 (logical operators) 當判斷 的條件。而 statement 爲符合條件的執行部分程序,若程序只有一行,可以省略大括 號 {}。 下例很有趣,要電腦的瀏覽器出現十次 "以後不敢了" 的字符串,前面並加上數字,表 示說了第幾次不敢了。(感覺好像是 Web Server 做錯事被處罰) while 可以不用大括號來包住執行部分,而使用冒號加上 endwhile。見下例

endwhile; ?> 另外一種 e 循環則先執行,再判斷是否要繼續執行,也就是說循環至少執行 一次, 有點像是先斬後奏的方法。 這種的循環, 和單用 while 是不同的 (單用 while 是 先判斷再處理)。若讀者熟 Pascal 語言的話,會發現 e 循環像是 Pascal 的 l 循環循環就單純只有一種,沒有變化,它的語法如下 for 循環 for (expr1; expr2; expr3) { statement } 其中的 expr1 爲條件的初始值。expr2 爲判斷的條件,通常都是用邏輯運算符號 (logical operators) 當判斷的條件。expr3 爲執行 statement 後要執行的部份,用 來改變條件,供下次的循環判斷,如加一..等等。而 statement 爲符合條件的執行部 分程序,若程序只有一行,可以省略大括號 {}。下例是用 for 循環寫的 "以後不敢了" 的例子,可以拿來和用 while 循環的比較。從上例中,可以很明顯的看到,用 for 和用 while 的不同。實際應用上,若循環有初 始值,且都要累加(或累減),則使用 for 循環比用 while 循環好。例如將資料從數據 庫取出,可能用 for 循環會比用 while 循環適合?6

循環,通常處理複合式的條件判斷,每個子條件,都是 case 指令部分。在實 switch 循環 作上若使用許多類似的 if 指令,可以將它綜合成 switch 循環。 語法如下 switch (expr) { case expr1: statement1; break; case expr2: statement2; break; : : default: statementN; break; } 其中的 expr 條件,通常爲變量名稱。而 case 後的 exprN,通常表示變量值。冒號後 則爲符合該條件要執行的部分。注意要用 break 跳離循環。

break; } ?> 很明顯的,上述的例子用 if 循環就很麻煩了。當然在設計時,要將出現機率最大的條 件放在最前面,最少出現的條件放在最後面,可以增加程序的執行效率。上例由於每天 出現的機率相同,所以不用注意條件的順序.8