10.操作符
10.1 算術操作符
算術操作符通常用於整型或雙精度類型的數據。如果將它們應用於字符串,PHP會試圖將這些字符串轉換成一個數字。如果其中包含“e”或“E”字符,它就會被當作是科學表示法並被轉換成浮點數,否則將會被轉換成整數。PHP會在字符串開始處尋找數字,並且使用這些數字作為該字符串的值,如果沒找到數字,該字符串的值則為0。
10.2 字符串操作符
可以使用字符串連接操作符將兩個字符串連接起來生成並保存到一個新字符串中。
$a = “Bob‘s”;
$b = “Auto Parts”;
$result = $a.$b; //”Bob’s Auto Parts”
10.3 賦值操作符
10.3.1 賦值運算返回值
整個賦值語句的值將賦給左邊的操作數。
可以使用圓括號來提高子表達式的優先級,和數學的計算法則相同。
10.3.2 復合賦值操作符
+=,-=,*=,/=,%=,.=
10.3.3 前置遞增遞減和後置遞增遞減運算符
舉個例子:
$a=4;
echo ++$a; //5
$a=4;
echo $a++; //4
10.3.4 引用操作符
引用操作符&可以在關聯賦值中使用。看下面的例子:
$a = 5;
$b = $a;
$a = 7; // $b will still be 5
這就很尴尬了。如何避免上述情況呢?
可以使用引用操作符&來避免產生這樣的副本。
$a = 5;
$b = &$a;
$a = 7; // $a and $b are now both 7
可以通過重置它們來改變所指向的地址:
unset($a);
重置並不會改變$b(7)的值,但是可以破壞$a和值7保存在內存中的鏈接。
10.4 比較操作符
10.4.1 等於操作符
相等的比較操作符==允許測試兩個值是否相等。
10.4.2 其他比較操作符
只有當恆等操作符(===)兩邊的操作數相等並且具有相同的數據類型時,其返回值才為true。
10.5 邏輯操作符
操作符“and”和“or”比&&和||的優先級要低。
10.6 位操作符
位操作符可以將一個整型變量當作一系列的位來處理。
10.7 其他操作符
逗號操作符“,”用來分隔函數參數和其他列表項。
new用來初始化類的實例。
->用來訪問類的成員。
10.7.1 三元操作符
condition ? value if true : value if false
10.7.2 錯誤抑制操作符
錯誤抑制操作符@可以在任何表達式前面使用:
$a = @(57/0);
可以抑制除0警告。
如果通過這種方法抑制了一些警告,一旦遇到一個警告,你就要寫一些錯誤處理代碼。
如果已經啟用了PHP配置文件中的track_errors特性,錯誤信息將會被保存在全局變量$php_errormsg中。
10.7.3 執行操作符
PHP將試著將反向單引號之間的命令當做服務器端的命令行來執行。
$out = `dir c:`;
echo `<pre>`.$out.`</pre>`;
得到一個目錄列表並且將該列表保存在$out中,再將該列表顯示在浏覽器中或用其他方法來處理。
10.7.4 數組操作符
數組元素操作符([])允許訪問數組元素。在某些數組上下文中,也可以使用=>操作符。
10.7.5 類型操作符
instanceof操作符允許檢查一個對象是否是特定類的實例。
11.計算表單總金額
define('TIREPRICE',100);
define('OILPRICE',10);
define('SPARKPRICE',4);
// create short variable names
$tireqty = $_POST['tireqty'];
$oilqty = $_POST['oilqty'];
$sparkqty = $_POST['sparkqty'];
$totalqty = 0;
$totalqty = $tireqty + $oilqty + $sparkqty;
echo "Items ordered: ".$totalqty."<br />";
$totalamount = 0.00;
$totalamount = $tireqty * TIREPRICE + $oilqty * OILPRICE + $sparkqty * SPARKPRICE;
echo "Subtotal: $".number_format($totalamount,2)."<br />";
$taxrate = 0.10; // local sales tax is 10%
$totalamount = $totalamount * (1 + $taxrate);
echo "Total including tax: $".number_format($totalamount,2)."<br />";
12.操作符的優先級和結合性
優先級:執行順序。
結合性:同一優先級的操作符的執行順序。
13.使用可變函數
13.1 測試和設置變量類型
string gettype(mixed var);
bool settype(mixed var, string type);
其他測試函數:
is_array():檢查變量是否是數組。
is_double()、is_float()、is_real():是否是浮點數
is_long()、is_int()、is_integer():是否是整數
is_string():是否是字符串
is_bool():是否是布爾值
is_object():是否是一個對象
is_resource():是否是一個資源
is_null():是否為null
is_scaler():是否是標量
is_numeric():是否是任何類型的數字或數字字符串
is_callable():是否是有效的函數名稱
13.2 測試變量狀態
isset():判斷變量是否存在(可傳變量列表)
unset():銷毀一個變量
empty():檢查一個變量是否存在,以及它的值是否為非空和非0
13.3 變量的重解釋
目測強制轉換:
int intval(mixed var [, int base]);
float floatval(mixed var);
string strval(mixed var);
intval()函數也允許在要轉換的變量為字符串時指定轉換的進制基數。
14.根據條件進行決策
elseif語句中間的空格可有可無。
15.通過迭代實現重復動作
Html代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>freight</title>
</head>
<body>
<table border="0" cellpadding="3">
<tr>
<td bgcolor="#ccc" align="center">Distance</td>
<td bgcolor="#ccc" align="center">Cost</td>
</tr>
<tr>
<td align="right">50</td>
<td align="right">5</td>
</tr>
<tr>
<td align="right">100</td>
<td align="right">10</td>
</tr>
<tr>
<td align="right">150</td>
<td align="right">15</td>
</tr>
<tr>
<td align="right">200</td>
<td align="right">20</td>
</tr>
<tr>
<td align="right">250</td>
<td align="right">25</td>
</tr>
</table>
</body>
</html>
15.1 while循環
PHP代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>freight.php</title>
</head>
<body>
<table border="0" cellpadding="3">
<tr>
<td bgcolor="#ccc" align="center">Distance</td>
<td bgcolor="#ccc" align="center">Cost</td>
</tr>
<?php
$distance = 50;
while($distance <= 250){
echo "<tr>
<td align=\"right\">".$distance."</td>
<td align=\"right\">".($distance/10)."</td>
</tr>\n";
$distance += 50;
}
?>
</table>
</body>
</html>
注意right這裡用的是\”而不是單引號。
15.2 for和foreach循環
可以將可變變量和for循環結合起來重復一系列的表單域。
for($i=1;$i<=$numnames;$i++){
$temp = “name$i”;
echo $$temp. ‘<br />’;
}
通過動態地創建變量名稱,可以依次訪問每一個表單域。
16.從控制結構或腳本中跳出
a) 終止循環:break
b) 調到下一次循環:continue
c) 結束整個PHP腳本的執行:exit
17.使用可替換的控制結構語法
if($totalqty == 0) :
echo “You did not order anything on the previous page!<br />”;
exit;
endif;