主要主題是
.php字符串中的變量擴展系統(tǒng)
.php中可用的更多數(shù)據(jù)類型
.類型之間的轉(zhuǎn)換
.輸入和使用變量和常量
.如何在php中構(gòu)建表達式以及構(gòu)建表達式所需的操作符
.使用語言中可用的控制結(jié)構(gòu)
.1 輸入字符串的更多介紹
復(fù)制代碼代碼如下:
<?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.
如果你希望在輸出中生成確切的字符序列{$,就需要使用,{\$對它進行轉(zhuǎn)義。
.2 數(shù)據(jù)類型的更多介紹
1.數(shù)組:使用array方法來聲明數(shù)組。它獲得一組初始值并且返回保存所有這些值的數(shù)組對象,在默認(rèn)情況下,把從0開始的整數(shù)名稱或者鍵(key)賦給數(shù)組中的值
,也可以指定要添加的新項的索引。$frunit[120]="nespola";但是你也可以使用字符串值指定鍵,而不使用賦值給它的默認(rèn)數(shù)字。
$myfavourite=array("car"=>"ferrari","number“=>21,"city"=>"ouagadougou");
數(shù)組運算符 例子 名稱 結(jié)果
$a + $b 聯(lián)合 $a 和 $b 的聯(lián)合。
$a == $b 相等 如果 $a 和 $b 具有相同的鍵/值對則為 TRUE。
$a === $b 全等 如果 $a 和 $b 具有相同的鍵/值對并且順序和類型都相同則為 TRUE。
$a != $b 不等 如果 $a 不等于 $b 則為 TRUE。
$a <> $b 不等 如果 $a 不等于 $b 則為 TRUE。
$a !== $b
復(fù)制代碼代碼如下:
<?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);
?>
執(zhí)行后,此腳本會顯示:
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對象 將在第四單元中面向?qū)ο蟮某绦蛟O(shè)計中使用。 2.2.3 特殊類型和值 NULL 是php中的特殊類型和值 ,它表示"無值".符合如下要求它就是null: .它們被設(shè)置為區(qū)分大小寫的關(guān)鍵字null; .它們從沒有賦值過 .使用unset方法明確清除了它們。 資源:有時候,php需要處理不一定來自php的對象,比如數(shù)據(jù)庫或者操作系統(tǒng)對象的句柄。它們稱為資源的特殊變量.
.3 強制類型轉(zhuǎn)換
2.3.1 基礎(chǔ)
隱式強制類型轉(zhuǎn)換:當(dāng)遇見隱式強制類型轉(zhuǎn)換的最常見的情況是:
.二進制運算操作符
.布爾表達式和表達式操作符
.需要字符串的特定方法--特定方法和操作符,比如echo\print或者字符串連接符(.)
顯示強制類型轉(zhuǎn)換:為變量(或表達式)加上括號括起來的類型前綴,php會試圖替你進行轉(zhuǎn)換.
(int)\(interger)
(string)-轉(zhuǎn)換為文本字符串
(object)-轉(zhuǎn)換為對象
2.3.2 特殊強制類型轉(zhuǎn)換
轉(zhuǎn)換為整數(shù)
(int)4.999
注:null永遠都轉(zhuǎn)換為整數(shù)值0.
轉(zhuǎn)換為浮點數(shù)
(float)true=1.0
把數(shù)組、對象或者資源轉(zhuǎn)換為浮點值的結(jié)果是未定義的,不要試圖進行這新的轉(zhuǎn)換或者相信這樣的轉(zhuǎn)換結(jié)果
轉(zhuǎn)換為字符串
可使用類型轉(zhuǎn)換符(string)或調(diào)用strval把變量轉(zhuǎn)換為字符串.
布爾型true轉(zhuǎn)為字符串1,false被轉(zhuǎn)換空字符串("")
null轉(zhuǎn)為空字符串('").
轉(zhuǎn)換為數(shù)組
可使用類型轉(zhuǎn)換(array)或者函數(shù)arraryr把變量或者表達式轉(zhuǎn)換為數(shù)組
null和其他未設(shè)置的變量被轉(zhuǎn)換為有0個元素的空數(shù)組
轉(zhuǎn)換為對象
你可以使用類型轉(zhuǎn)換(object)把變量或者表達式轉(zhuǎn)換為對象。
把對象轉(zhuǎn)換為對象僅僅返回相同對象的句柄。為所有其他類型創(chuàng)建stdClass類型的對象。
2.3.3 有用的強制類型轉(zhuǎn)換函數(shù)
is_type()
.is_integer,.is_float,.is_bool,is_null,.is_object.返回布爾型 ,指出特定變量是否屬于適當(dāng)?shù)念愋?。
gettype()是非常有用的例程,它告訴你php當(dāng)前認(rèn)為變量或者表達式是什么類型。不推薦使用這個轉(zhuǎn)換函數(shù)。
settype()使用兩個參數(shù):要轉(zhuǎn)換的變量和要轉(zhuǎn)換為的類型 ,它表示字符串。
.4 變量和常量
2.4.1 定義常量
在php程序中,使用語言結(jié)構(gòu)define定義常量,常量名子不以字符$開頭,并且它們的值只能是特定類型:整數(shù)、浮點數(shù)、字符串和布爾型
2.4.2 按值 和按引用的變量
默認(rèn)情況下,大多數(shù)變量和所有常量是按值賦值的。把一個變量的值賦給另一個變量是時,其值被復(fù)制。這種方式對于除對象外的所有類型適用
對于對象變量和資源,被復(fù)制的全部內(nèi)容是底層對象或資源的句柄,但是操作的底層對象是相同的。
把變量的值賦值給另一個變量的另一種選擇方式是按引用賦值。用&前綴完成的。
$a=123;
$b=&$a;
2.4.3 變量的范圍
函數(shù)級別的變量,內(nèi)部聲明的變量只在這個函數(shù)內(nèi)部是合法的。
在函數(shù)外聲明的變量
超級全局變量
2.4.4 變量的生存期
不管執(zhí)行相同腳本還是不同腳本,php都不會在調(diào)用之間記憶任何內(nèi)容。
2.4.5 預(yù)定義變量
php提供很多預(yù)定義變量,它們給出操作環(huán)境的信息,大多是超級全局?jǐn)?shù)組例如:
$GLOBALS-它包含正在執(zhí)行的腳本內(nèi)部全局可用的所有變量的引用
$_SERVER-腳本所在周邊環(huán)境的信息
$_SESSION、$_COOKIE-它包含管理訪問者和關(guān)于稱為"cookie“的存儲方式的信息
$_REQUEST-它包含$_post、$_GET和$_session數(shù)組
$_ENV-它包含php語言引擎所在的進程的環(huán)境變量.數(shù)組的鍵是環(huán)境變量的名稱。
$php_errormsg-它保存php語言引擎在執(zhí)行當(dāng)前腳本時生成的最新的錯誤信息.
.5 表達式和操作符
2.5.1 操作符:組合表達式
賦值:
算術(shù)操作符
例子 名稱 結(jié)果
-$a 取反 $a 的負值。
$a + $b 加法 $a 和 $b 的和。
$a - $b 減法 $a 和 $b 的差。
$a * $b 乘法 $a 和 $b 的積。
$a / $b 除法 $a 除以 $b 的商。
$a % $b 取模 $a 除以 $b 的余數(shù)。
比較操作符
例子 名稱 結(jié)果
$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 嚴(yán)格小于 $b。
$a > $b 大于 TRUE,如果 $a 嚴(yán)格 $b。
$a <= $b 小于等于 TRUE,如果 $a 小于或者等于 $b。
$a >= $b 大于等于 TRUE,如果 $a 大于或者等于 $b。
邏輯操作符
例子 名稱 結(jié)果
$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。
按位操作符
操作符 名稱 結(jié)果
$a & $b And(按位與) 將把 $a 和 $b 中都為 1 的位設(shè)為 1。
$a|| $b Or(按位或) 將把 $a 或者 $b 中為 1 的位設(shè)為 1。
xor ^ $b Xor(按位異或) 將把 $a 和 $b 中不同的位設(shè)為 1。
Not $a Not(按位非) 將 $a 中為 0 的位設(shè)為 1,反之亦然。
$a << $b Shift left(左移) 將 $a 中的位向左移動 $b 次(每一次移動都表示“乘以 2”)。
$a >> $b Shift right(右移) 將 $a 中的位向右移動 $b 次(每一次移動都表示“除以 2”)。
字符串操作符
連接操作符. 它對兩個字符串進行操作,并且返回把二者連接在一起的單一字符串
數(shù)組操作符
例子 名稱 結(jié)果
$a + $b 聯(lián)合 $a 和 $b 的聯(lián)合。
$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忽略特定函數(shù)調(diào)用的失敗。
最后一個操作符-外殼命令執(zhí)行程序。為了它,需要把命令括在反撇號(`)之間,這樣命令就被傳遞給處殼執(zhí)行.但這樣會產(chǎn)生安全。
2.5.2 組合表達式和操作符的過程
結(jié)合方向 運算符 附加信息
非結(jié)合 clone new clone 和 new
左 [ array()
非結(jié)合 ++ -- 遞增/遞減運算符
非結(jié)合 ~ - (int) (float) (string) (array) (object) (bool) @ 類型
非結(jié)合 instanceof 類型
右結(jié)合 ! 邏輯操作符
左 * / % 算術(shù)運算符
左 + - . 算術(shù)運算符和字符串運算符
左 << >> 位運算符
非結(jié)合 < <= > >= <> 比較運算符
非結(jié)合 == != === !== 比較運算符
左 & 位運算符和引用
左 ^ 位運算符
左 | 位運算符
左 && 邏輯運算符
左 || 邏輯運算符
左 ? : 三元運算符
右 = += -= *= /= .= %= &= |= ^= <<= >>= 賦值運算符
左 and 邏輯運算符
左 xor 邏輯運算符
左 or 邏輯運算符
左 , 多處用到
.6 控制結(jié)構(gòu)
2.6.1 if語句
1. if (expr)
statement
else
2. elseif/else if 2.6.2 switch語句
復(fù)制代碼代碼如下:
<?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 語句相似。很多場合下需要把同一個變量(或表達式)與很多不同的值比較,并根據(jù)它等于哪個值來執(zhí)行不同的代碼?! ?這正是 switch 語句的用途。
復(fù)制代碼代碼如下:
<?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循環(huán)
while(expr)
block
do
block
while (expr);
復(fù)制代碼代碼如下:
<?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 循環(huán)
for(expr1;expr2;expr3)
block
expr1:當(dāng)?shù)谝淮斡龅紽OR循環(huán)執(zhí)行它一次。執(zhí)行完畢后開始循環(huán)迭代。
expr2:在每次迭代之前計算它。如為true,就執(zhí)行代碼塊。
expr3-在每次迭代之后計算它
復(fù)制代碼代碼如下:
<?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循環(huán):用于特定類型。在5單元中進行更多講解
2.6.6 中斷循環(huán) :break 和continue