主要主題是
.php字串中的變數擴充系統
.php中可用的更多資料類型
.類型之間的轉換
.輸入和使用變數和常量
.如何在php中構建運算式以及構建運算式所需的操作符
.使用語言中可用的控制結構
.1 輸入字串的更多介紹
複製代碼 代碼如下:<?php
$hour = 16;
$kilometres = 4;
$content = "cookie";
echo " 4pm in 24 hour time is {$hour}00 hours.<br/>\n";
echo <<<DONE
There are {$kilometres}000m in {$kilometres}km.<br/>
The jar is now, indeed, full of ${content}s.<br/>
DONE;
?>
輸出: 4pm in 24 hour time is 1600 hours.
There are 4000m in 4km.
The jar is now, indeed, full of cookies.
如果你希望在輸出中產生確切的字元序列{$,就需要使用,{\$對它進行轉義。
.2 資料類型的更多介紹
1.數組:使用array方法來聲明數組。它獲得一組初始值並且返回儲存所有這些值的數組對象,在預設情況下,把從0開始的整數名稱或者鍵(key)賦給數組中的值
,也可以指定要添加的新項的索引。$frunit[120]="nespola";但是你也可以使用字串值指定鍵,而不使用賦值給它的預設數字。
$myfavourite=array("car"=>"ferrari","number“=>21,"city"=>"ouagadougou");
數組運算子 例子 名稱 結果
$a + $b 聯合 $a 和 $b 的聯合。
$a == $b 相等 如果 $a 和 $b 具有相同的鍵/值對則為 TRUE。
$a === $b 全等 如果 $a 和 $b 具有相同的鍵/值對並且順序和類型都相同則為 TRUE。
$a != $b 不等 如果 $a 不等於 $b 則為 TRUE。
$a <> $b 不等 如果 $a 不等於 $b 則為 TRUE。
$a !== $b
複製代碼 代碼如下:<?php
$a = array("a" => "apple", "b" => "banana");
$b = array("a" => "pear", "b" => "strawberry", "c" => "cherry");
$c = $a + $b; // Union of $a and $b
echo "Union of \$a and \$b: \n";
var_dump($c);
$c = $b + $a; // Union of $b and $a
echo "Union of \$b and \$a: \n";
var_dump($c);
?>
執行後,此指令碼會顯示:
Union of $a and $b: array(3) { ["a"]=> string(5) "apple" ["b"]=> string(6) "banana" ["c"]=> string(6) "cherry" } Union of $b and $a: array(3) { ["a"]=> string(4) "pear" ["b"]=> string(10) "strawberry" ["c"]=> string(6) "cherry" } 2.2.2對象 將在第四單元中物件導向的程式設計中使用。 2.2.3 特殊類型和值 NULL 是php中的特殊類型和值 ,它表示"無值".符合如下要求它就是null: .它們被設定為區分大小寫關鍵字null; .它們從沒有賦值過 .使用unset方法明確清除了它們。 資源:有時候,php需要處理不一定來自php的對象,比如資料庫或者作業系統對象的控制代碼。它們稱為資源的特殊變數.
.3 強制類型轉換
2.3.1 基礎
隱式強制類型轉換:當遇見隱式強制類型轉換的最常見的情況是:
.二進位運算操作符
.布林運算式和運算式操作符
.需要字串的特定方法--特定方法和操作符,比如echo\print或者字串串連符(.)
顯示強制類型轉換:為變數(或運算式)加上括弧括起來的類型首碼,php會試圖替你進行轉換.
(int)\(interger)
(string)-轉換為文本字串
(object)-轉換為對象
2.3.2 特殊強制類型轉換
轉換為整數
(int)4.999
註:null永遠都轉換為整數值0.
轉換為浮點數
(float)true=1.0
把數組、對象或者資源轉換為浮點值的結果是未定義的,不要試圖進行這新的轉換或者相信這樣的轉換結果
轉換為字串
可使用類型轉換符(string)或調用strval把變數轉換為字串.
布爾型true轉為字串1,false被轉換Null 字元串("")
null轉為空白字串('").
轉換為數組
可使用類型轉換(array)或者函數arraryr把變數或者運算式轉換為數組
null和其他未設定的變數被轉換為有0個元素的空數組
轉換為對象
你可以使用類型轉換(object)把變數或者運算式轉換為對象。
把對象轉換為對象僅僅返回相同對象的控制代碼。為所有其他類型建立stdClass類型的對象。
2.3.3 有用的強制類型轉換函式
is_type()
.is_integer,.is_float,.is_bool,is_null,.is_object.返回布爾型 ,指出特定變數是否屬於適當的類型 。
gettype()是非常有用的常式,它告訴你php當前認為變數或者運算式是什麼類型。不推薦使用這個轉換函式。
settype()使用兩個參數:要轉換的變數和要轉換為的類型 ,它表示字串。
.4 變數和常量
2.4.1 定義常量
在php程式中,使用語言結構define定義常量,常量名子不以字元$開頭,並且它們的值只能是特定類型:整數、浮點數、字串和布爾型
2.4.2 按值 和按引用的變數
預設情況下,大多數變數和所有常量是按值賦值的。把一個變數的值賦給另一個變數是時,其值被複製。這種方式對於除對象外的所有類型適用
對於物件變數和資源,被複製的全部內容是底層對象或資源的控制代碼,但是操作的底層對象是相同的。
把變數的值賦值給另一個變數的另一種選擇方式是按引用賦值。用&首碼完成的。
$a=123;
$b=&$a;
2.4.3 變數的範圍
函數層級的變數,內部聲明的變數只在這個函數內部是合法的。
在函數外聲明的變數
超級全域變數
2.4.4 變數的生存期
不管執行相同指令碼還是不同指令碼,php都不會在調用之間記憶任何內容。
2.4.5 預定義變數
php提供很多預定義變數,它們給出作業環境的資訊,大多是超級全域數組例如:
$GLOBALS-它包含正在執行的指令碼內部全域可用的所有變數的引用
$_SERVER-指令碼所在周邊環境的資訊
$_SESSION、$_COOKIE-它包含管理訪問者和關於稱為"cookie“的儲存方式的資訊
$_REQUEST-它包含$_post、$_GET和$_session數組
$_ENV-它包含php語言引擎所在的進程的環境變數.數組的鍵是環境變數的名稱。
$php_errormsg-它儲存php語言引擎在執行當前指令碼時產生的最新的錯誤資訊.
.5 運算式和操作符
2.5.1 操作符:組合運算式
賦值:
算術操作符
例子 名稱 結果
-$a 取反 $a 的負值。
$a + $b 加法 $a 和 $b 的和。
$a - $b 減法 $a 和 $b 的差。
$a * $b 乘法 $a 和 $b 的積。
$a / $b 除法 $a 除以 $b 的商。
$a % $b 模數 $a 除以 $b 的餘數。
比較操作符
例子 名稱 結果
$a == $b 等於 TRUE,如果 $a 等於 $b。
$a === $b 全等 TRUE,如果 $a 等於 $b,並且它們的類型也相同。(PHP 4 引進)
$a != $b 不等 TRUE,如果 $a 不等於 $b。
$a <> $b 不等 TRUE,如果 $a 不等於 $b。
$a !== $b 非全等 TRUE,如果 $a 不等於 $b,或者它們的類型不同。(PHP 4 引進)
$a < $b 小與 TRUE,如果 $a 嚴格小於 $b。
$a > $b 大於 TRUE,如果 $a 嚴格 $b。
$a <= $b 小於等於 TRUE,如果 $a 小於或者等於 $b。
$a >= $b 大於等於 TRUE,如果 $a 大於或者等於 $b。
邏輯操作符
例子 名稱 結果
$a and $b And(邏輯與) TRUE,如果 $a 與 $b 都為 TRUE。
$a or $b Or(邏輯或) TRUE,如果 $a 或 $b 任一為 TRUE。
$a xor $b Xor(邏輯異或) TRUE,如果 $a 或 $b 任一為 TRUE,但不同時是。
$a Not(邏輯非) TRUE,如果 $a 不為 TRUE。
$a&& $b And(邏輯與) TRUE,如果 $a 與 $b 都為 TRUE。
$a || $b Or(邏輯或) TRUE,如果 $a 或 $b 任一為 TRUE。
按位操作符
操作符 名稱 結果
$a & $b And(按位與) 將把 $a 和 $b 中都為 1 的位設為 1。
$a|| $b Or(按位或) 將把 $a 或者 $b 中為 1 的位設為 1。
xor ^ $b Xor(按位異或) 將把 $a 和 $b 中不同的位設為 1。
Not $a Not(按位非) 將 $a 中為 0 的位設為 1,反之亦然。
$a << $b Shift left(左移) 將 $a 中的位向左移動 $b 次(每一次移動都表示“乘以 2”)。
$a >> $b Shift right(右移) 將 $a 中的位向右移動 $b 次(每一次移動都表示“除以 2”)。
字串操作符
串連操作符. 它對兩個字串進行操作,並且返回把二者串連在一起的單一字串
數組操作符
例子 名稱 結果
$a + $b 聯合 $a 和 $b 的聯合。
$a == $b 相等 如果 $a 和 $b 具有相同的鍵/值對則為 TRUE。
$a === $b 全等 如果 $a 和 $b 具有相同的鍵/值對並且順序和類型都相同則為 TRUE。
$a != $b 不等 如果 $a 不等於 $b 則為 TRUE。
$a <> $b 不等 如果 $a 不等於 $b 則為 TRUE。
$a !== $b 不全等 如果 $a 不全等於 $b 則為 TRUE。
其他動作符
自動遞增和自動遞減操作符
$a=10;
$b=$a++; b=10 ,a=11;
$c=++$a; c=12,a=12;
$d=$a--; d=12,a=11;
$e=--$a; e=10,a=10;
還有一個稱為@a的操作符,它讓php忽略特定函數調用的失敗。
最後一個操作符-外殼命令執行程式。為了它,需要把命令括在反撇號(`)之間,這樣命令就被傳遞給處殼執行.但這樣會產生安全。
2.5.2 組合運算式和操作符的過程
結合方向 運算子 附加資訊
非結合 clone new clone 和 new
左 [ array()
非結合 ++ -- 遞增/遞減運算子
非結合 ~ - (int) (float) (string) (array) (object) (bool) @ 類型
非結合 instanceof 類型
右結合 ! 邏輯操作符
左 * / % 算術運算子
左 + - . 算術運算子和字串運算子
左 << >> 位元運算符
非結合 < <= > >= <> 比較子
非結合 == != === !== 比較子
左 & 位元運算符和引用
左 ^ 位元運算符
左 | 位元運算符
左 && 邏輯運算子
左 || 邏輯運算子
左 ? : 三元運算子
右 = += -= *= /= .= %= &= |= ^= <<= >>= 賦值運算子
左 and 邏輯運算子
左 xor 邏輯運算子
左 or 邏輯運算子
左 , 多處用到
.6 控制結構
2.6.1 if語句
1. if (expr)
statement
else
2. elseif/else if 2.6.2 switch語句 複製代碼 代碼如下:<?php
if ($a == 5):
echo "a equals 5";
echo "...";
elseif ($a == 6):
echo "a equals 6";
echo "!!!";
else:
echo "a is neither 5 nor 6";
endif;
?>
switch 語句和具有同樣運算式的一系列的 IF 語句相似。很多場合下需要把同一個變數(或運算式)與很多不同的值比較,並根據它等於哪個值來執行不同的代碼。 這正是 switch 語句的用途。 複製代碼 代碼如下:<?php
if ($i == 0) {
echo "i equals 0";
} elseif ($i == 1) {
echo "i equals 1";
} elseif ($i == 2) {
echo "i equals 2";
}
switch ($i) {
case 0:
echo "i equals 0";
break;
case 1:
echo "i equals 1";
break;
case 2:
echo "i equals 2";
break;
}
?>
2.6.3 while/do ....while迴圈
while(expr)
block
do
block
while (expr);
複製代碼 代碼如下:<?php
do {
if ($i < 5) {
echo "i is not big enough";
break;
}
$i *= $factor;
if ($i < $minimum_limit) {
break;
}
echo "i is ok";
/* process i */
} while(0);
?>
2.6.4 for 迴圈
for(expr1;expr2;expr3)
block
expr1:當第一次遇到FOR迴圈執行它一次。執行完畢後開始迴圈迭代。
expr2:在每次迭代之前計算它。如為true,就執行代碼塊。
expr3-在每次迭代之後計算它 複製代碼 代碼如下:<?php
/* example 1 */
for ($i = 1; $i <= 10; $i++) {
echo $i;
}
/* example 2 */
for ($i = 1; ; $i++) {
if ($i > 10) {
break;
}
echo $i;
}
/* example 3 */
$i = 1;
for (;;) {
if ($i > 10) {
break;
}
echo $i;
$i++;
}
/* example 4 */
for ($i = 1, $j = 0; $i <= 10; $j += $i, print $i, $i++);
?>
2.6.5 foreach迴圈:用於特定類型。在5單元中進行更多講解
2.6.6 中斷迴圈 :break 和continue