讀書筆記《PHP與MySQL程式設計》一
第1章 PHP概述
1.1 歷史(PHP4、PHP5、PHP5.3、PHP6[未釋出])
1.2 一般語言特性(實用性、強大功能、可選擇性、成本[開源])
第2章 環境配置
2.1 安裝的前提條件(apache或IIS7)
2.2 在Linux上安裝Apache和PHP
2.3 在Windows上安裝Apache和PHP
2.4 在Windows上安裝IIS和PHP
2.5 測試安裝
2.6 配置PHP
2.7 執行時配置
2.8 選擇程式碼編輯器
2.9 選擇WEB託管服務商
第3章 PHP基礎
3.1 在Web頁面中嵌入PHP程式碼
3.2 為程式碼添加註釋
<?php echo "hello world!" ?> //預設語法 <? echo "hello world!"?> #短標籤 /* 這是一段多行註釋*/
3.3 向瀏覽器輸出資料
//print語句,如下兩句輸出結果相同
<?php print("<p>Hello PHP!</p>"); ?>
<?php $str="PHP";print "<p>Hello $str!</p>"; ?>
//echo語句,幾乎等同於print
<?php $str1="A";$str2="B";echo $str1." and ".$str2; ?>
//printf語句,輸出由靜態和若干變數動態資訊的混合 <?php printf ("<p>%d bottles of tonic water.</p>",100) ?> /* %b 整數,顯示為二進位制 %c 整數,顯示為對應ASCII字元 %d 整數,顯示為有符號十進位制 %f 浮點數,顯示為浮點數 %o 整數,顯示為八進位制 %s 字串,顯示為字串 %u 整數,顯示為無符號十進位制 %x 整數,顯示為小寫十六進位制 %X 整數,顯示為大寫十六進位制 */
//sprintf語句,輸與printf類似,但它將輸出賦值給一個字串
$cost=sprintf("$%.2f",43.2);//$cost=$43.20
3.4 PHP支援的資料型別
標量資料型別:布林型、整型、浮點型(單精度[float]、雙精度[double]、實數[real number])、字串
複合資料型別:陣列、物件
型別強制轉換操作符
/* (array) 轉為陣列 (bool)或(boolean) 轉為布林值 (int)或(integer) 轉為整數 (object) 轉為物件 (float)或(double)或(real) 轉為浮點數 (string) 轉為字串*/ $score=(int) 14.8; echo $score;//14 $str="this is str"; echo (int) $str;//0 $score=114; $scoreboard=(array) $score;echo $scoreboard[0];//114,數字被轉換為陣列的一個成員 $name="Gavin"; $obj=(object) $name; echo $obj->scalar;//Gavin,任何資料都可轉為物件,並預設成為物件的scalar屬性
型別自動轉換
$num=5;$str="15px";echo $num+=$str;//20,字串自動轉整數
$str="1.0";if($str) echo "this is true";//this is true,字串自動轉布林型
$val1="1.2e2";$val2=2; echo $val1*$val2;//240,字串轉整數
與型別有關的函式:gettype(獲取型別)、settype(轉換型別)
$val1="1.2e2";echo gettype($val1);//string
//共有8個可能的返回值:array、boolean、double、integer、object、resource[資源]、string和unknown type
$val1="15px";echo settype($val1,"integer")."+".$val1;//1+15
//轉換成功返回true,可以指定的7種類型:array、boolean、float、integer、null、object、string
型別判斷函式
//is_array,is_bool,is_float,is_integer,is_null,is_numeric,is_object,is_resource,is_scalar,is_string
$num=43;printf("$num is of type integer:%d<br/>",is_integer($num));//43 is of type integer:1
3.5 識別符號(即自定義名稱,區分大小寫)
3.6 變數
變數宣告:以美元符$開頭,遵循識別符號的命名規範,不需要顯示的宣告
$val1="red";//按值賦值
$val2=& $val1;//引用賦值,$val2和$val1都等於“red”
變數的作用域:區域性變數、函式引數、全域性變數、靜態變數(變數名前加關鍵字STATIC,函式退出不會銷燬,再次呼叫函式可使用快取)
PHP的超級全域性變數:$_SERVER、$_GET、$_POST、$_COOKIE、$_FILES、$_ENV、$_SESSION
變數的變數
$str="A";$A="B";echo $$str;//B,$$str相當於$A
3.7 常量(一旦定義無法修改,使用define()函式定義)
define("PI",3.1415926);printf("<p>The value of PI is %f</p>",PI)
3.8 表示式
運算元(通常指變數)
操作符:操作符的優先順序和結合性,操作符種類(算術、賦值、字串、自增自減、邏輯、相等、比較、位)
$a="abc"."def";//abcdef,字串拼接看,這裡.相當於JS中的+
$a.="ghi";//abcdefghi,拼接賦值,這裡.=相當於JS中的+=
3.9 字串插入
雙引號(包裹字串)
轉義序列
單引號(與雙引號不同,解析時變數和轉義序列不會被解釋)
大括號(常用於嵌入複雜資料型別,如{$arr['name']})
heredoc(用於輸出大量文字)
Nowdoc(php5.3新特性,等同於heredoc)
$a="abc";echo "$a is good n";//abc is good,雙引號解析
$a="abc";echo '$a is good n';//$a is good n,單引號不解析
3.10 控制結構
條件語句:if、else、elseif、switch
迴圈語句:while、do...while、for、foreach、break和goto和continue
檔案包含語句:include、include_once、require(與include的區別是在if為假,依然請求指定檔案到當前位置)、require_once
第4章 函式
4.1 呼叫函式
4.2 建立函式
function fun1($a){$a+=1;};$num=1;fun1($num);echo $num;//1,按值傳遞引數,函式內修改變數的值,不影響其函式外的值
function fun2(&$a){$a+=1;};$num=1;fun2($num);echo $num;//2,按引用傳遞引數,函式內修改變數的值,函式外同步修改
function fun($a,$b=2){echo $a*$b};$num=5;fun($num);//10,$b為引數預設值
function fun(){return array("red","blue","green");};list($r,$b,$g)=fun();echo "$r,$b,$g";
//return函式返回值,需要返回多個值時使用陣列,list()函式給一組變數賦值
function fun($a){if($a>0){return $a+fun($a-1);}};echo fun(5);//15,遞迴函式
4.3 函式庫
第5章 陣列
5.1 什麼是陣列
5.2 建立陣列
$arr1[0]="one";$arr1[1]="two";//直接建立引用即可
$arr2[]=1,$arr2[]=2;//若索引值是數值且遞增,建立時可省略索引值
$arr3["name"]="gavin",$arr3["age"]=30;//建立關聯陣列,不過必須一直使用鍵
$arr4=array("one","two");//使用array()建立索引陣列
$arr5=array("name"=>"gavin","age"=>30);//使用array()建立關聯陣列
$arr=array("one","two");list($a,$b)=$arr;echo "$a + $b";//one + two,list函式提取陣列
$die=range(1,5);//range函式預定義值來填充陣列,類似$die=array(1,2,3,4,5)
$state=array(1,2);printf("$state is array:%s",(is_array($state)?"true":"false"));//is_array函式測試陣列
5.3 輸出陣列
$arr=array("one","two");foreach($arr AS $a){echo "{$a}n";};//使用foreach遍歷輸出,多維陣列可考慮vprintf函式
print_r($arr);//Array ( [0] => one [1] => two ),列印陣列用於測試
5.4 新增和刪除陣列元素
$arr=array("two");
array_unshift($arr,"zero","one");print_r($arr);//在陣列頭新增一個或多個
array_push($arr,"three","four");print_r($arr); //在陣列尾新增一個或多個
echo array_shift($arr)."n";print_r($arr); //在陣列頭刪除,返回刪除值,每次刪除一個
echo array_pop($arr)."n";print_r($arr); //在陣列尾刪除,返回刪除值,每次刪除一個
5.5 定位陣列元素
$a="one";$arr=array("one","two");if(in_array($a,$arr)){echo '$a in $arr'}//搜尋陣列,返回布林值
$arr["one"]=1;if(array_key_exists("one",$arr)){echo 'one in $arr';}//搜尋關聯陣列鍵,返回布林值
$key=array_search(1,$arr);if($key){echo "$key : $arr[$key]";}//搜尋關聯陣列值,如果找到返回相應鍵,否則false
$arr=array("name"=>"gavin","age"=>30);
print_r(array_keys($arr));//Array ( [0] => name [1] => age ),獲取陣列的鍵組
print_r(array_values($arr));//Array ( [0] => gavin [1] => 30 ),獲取陣列的值組
5.6 遍歷陣列
$arr=array("name"=>"gavin","age"=>30);
while(key($arr)){echo key($arr)."n";next($arr);}//name age,遍歷陣列鍵
reset($arr);//重置指標到陣列首位,(next)下一位、(prev)上一位,(end)末尾位
while(current($arr)){echo current($arr)."n";next($arr);}//gavin 30,遍歷陣列值
5.7 確定陣列的大小和唯一性
$arr=array("a","b");echo count($arr);//2,count確定陣列大小,與sizeof相同
$arr1=array("a","b","c","a");print_r(array_count_values($arr1));//統計陣列元素出現的頻次
//Array ( [a] => 2 [b] => 1 [c] => 1 )
print_r(array_unique($arr1));//刪除重複項
5.8 陣列排序
$arr=array("one","two","three");
print_r(array_reverse($arr));//陣列倒序,Array ( [0] => three [1] => two [2] => one )
print_r(array_flip($arr));//陣列鍵和值對換,Array ( [one] => 0 [two] => 1 [three] => 2 )
sort($arr);print_r($arr);//陣列排序,破壞鍵值關聯,Array ( [0] => one [1] => three [2] => two )
$arr=array("one","two","three");//重置
asort($arr);print_r($arr)//同sort,保持鍵值關聯,Array ( [0] => one [2] => three [1] => two )
rsort(array);//與sort相同,排序相反
arsort(array);//與asort相同,排序相反
natsort(array);//自然排序
natcasesort(array);//不區分大小寫的自然排序
ksort(array);//按鍵值對陣列排序
krsort(array);//與ksort相同,排序相反
usort(array,callback);//根據自定義規則排序
5.9 合併、拆分、接合和分解陣列
array_merge(array1,array2);//合併兩個或多個數組
array_merge_recursive(array1,array2);//與array_merge相同,僅關聯陣列出現相同鍵時,前置是替換,它是將值合併為陣列
array_combine(keys,values);//將鍵陣列和值陣列,組合為新的關聯陣列,兩者大小要相同且不為空
array_slice(array,[offset,[length]]);//拆分陣列
array_splice(array,[offset,[length]]);//接合陣列
array_intersect();//求陣列的交集
array_intersect_assoc();//求關聯陣列的交集
array_diff();//求陣列的差集
array_diff_assoc();//求關聯陣列的差集
5.10 其他有用的陣列函式
array_rand(array[,num]);//返回一組隨機的鍵
shuffle();//隨機洗牌陣列元素
array_sum();//對陣列中的值求和
array_chunk();//劃分陣列
第6章 面向物件的PHP
6.1 OOP的好處(封裝、繼承、多型)
6.2 關鍵的OOP概念(類、物件、屬性)