當前位置:學者齋 >

計算機 >php語言 >

PHP基本語法大全

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

標籤: PHP 語法
  • 文章版權屬於文章作者所有,轉載請註明 https://xuezhezhai.com/zh-tw/jsj/php/656j5m.html