主要主題是
.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轉為空字符串('").
轉換為數組
可使用類型轉換(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