1. 程式人生 > 其它 >讀書筆記《PHP與MySQL程式設計》一

讀書筆記《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概念(類、物件、屬性)