程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 關於初學PHP時的知識積累總結

關於初學PHP時的知識積累總結

編輯:關於PHP編程

PHP基礎
一、初識PHP
PHP是與HTML混合使用的嵌入式語言。
1、PHP標記
默認標記<?php ?> 短標記<? ?>,需在php.ini中將short_open_tag選項開啟 短標記和其他標記不提倡使用

2、關鍵字不區分大小寫,用戶自定義的類名和函數名不區分大小寫,變量名區分大小寫

3、輸出
boolean print(參數) 返回布爾值
void echo(參數) 無返回值echo的效率要高一點

二、數據類型
1、比較兩個浮點數的通常方法是先移動若干小數位,然後轉換為整型數據再進行比較。

2、雙引號做分隔符的字符串支持變量名解析,單引號做分隔符的字符串不支持變量名解析。
$name="張三";
"$name"=>張三 || '$name'=>$name || "$name先生"=>空 || "{$name}先生"=>張三先生 || "${name}先生"=>張三先生

3、字符串定義的方式:單引號,雙引號和heredoc(<<<heredoc_markheredoc_mark)

4、對象類型必須顯式的進行聲明。類用關鍵字class定義,使用關鍵字new生成這個類的實例,使用->符號類訪問類中的屬性和方法
class car{public $cololr;function beep(){}}$mycar = new car; $mycar->color='red'; $mycar->beep();

5、PHP是一種弱語言類型,變量的類型會根據賦予的值自行確定,而且往往在變量聲明的同時進行變量初值的賦值。

6、數據類型強制轉換時,只須將需要的類型名寫在變量前的括號內即可。

三、常量和變量
1、定義常量 define("常量名",表達式或值) 常量名建議全大寫,但不是必需的
使用常量 直接使用定義的常量名,無須在常量名前加"$"
預定義常量:_FILE_當前PHP程序文件名 _LINE_當前PHP程序所在的行數(在哪指哪)

2、變量不需要顯式的聲明,在對變量賦初值時就對變量進行了聲明。如果變量沒有被設置初值,則其初值即為NULL。

3、變量的賦值:傳值賦值和引用賦值。如$a=&$b; 即b原來指向了一個存儲位置,引用賦值後,a也指向了這個存儲位置,這時,
a或b的銷毀都不會對對方造成任何影響,但是如果其中一個的值改變了,則另一個也會作出相同的改變。

4、訪問預定義變量之使用超全局變量,總共9個超全局變量

5、局部變量:在函數內定義的變量 只能在函數內使用
全局變量:在函數外定義的變量 默認只能在函數外使用
要想在函數內使用全局變量,需要在函數內將變量用global聲明,或者使用超全局變量數組&GLOBALS["變量名"]
在PHP中,只有函數能提供局部作用域。
超全局變量$GLOBALS包含了全部的變量
靜態變量的特點:只有在第一次被調用時進行初始化,函數結束後不銷毀,並且下次使用時,該變量還保留原來的值。
靜態變量只能在函數內定義和使用。
可變變量:將變量的名字也作為一個變量來使用。$a=b;$b=c;$$a=$b=c;
外部變量:使用GET方式能傳遞的數據最大為256字節,使用POST最大為2MB

四、流程控制(僅寫與java等其他語言的不同)
1、交互格式(冒號語法) 不建議使用,經典的比較直觀

2、foreach():該語法是專門為數組設計的
第一種格式foreach(target_array as $value) statement
第二種格式foreach(target_array as $key=>$value) statement

3、break 數字:要跳出的結構的層數
contiue 數字:要跳出的結構的層數

4、exit語句可以結束當前整個腳本的執行,通常用於錯誤檢查。
exit; exit("錯誤原因");
die()是exit的別名 $conn=mysql_connect("localhost","root","") or die("無法連接到MySQL服務器");

五、數組
1、關聯數組與數字索引數組唯一的區別在於索引的類型。

2、數字索引數組
初始化:直接為數組元素賦值array()函數
如果數組不存在,那麼為數組元素賦值的同時即可創建該數組
如果數組元素是按順序排列的數字,則在對數組進行初始化時,可以使用range()函數
range()有3個參數,第一個參數指定初始值,第二個參數指定終止值,第三個參數可選,用於指定步長

3、關聯數組
初始化:直接為數組元素賦值array()函數

4、與數組相關的運算符
+ 聯合 $a+$b 將$附件到$a之後,但是任何索引值沖突的元素將不會被添加
== 等於 $a==$b 如果$a和$b包含相同元素,返回true(索引值和元素必須都相同) 除了順序,其他必須完全一樣
!= <> 不等於
=== 恆等 如果$a和$b包含相同順序的相同元素,返回true(索引值和元素必須都相同) 必須完全一模一樣
!== 不恆等

5、數組的排序
boolean sort() 按數字和字母順序排列 排列後會賦予新的索引值,原有索引值被刪除
void asort()按升序對數組進行排序 排列後保留原來的索引關系
integer ksort() 按索引值升序進行排列
usort(數組,方法名)按用戶自定義方法進行排序
array_multisort() 一次對多個數組進行排序
natsort() 按自然順序排序,排序後保留原有的索引關系
natcasesort() 自然排序,不區分大小寫

6、數組的反向排序
rsort() 對數組元素按降序排列
arsort()
krsort()

7、對數組進行重新排序
boolean shuffle() 對數組進行隨機排列
array array_reverse() 將數組中的元素逆置
array array_flip() 將數組中的索引與其元素值兌換

8、數組的遍歷
current() 獲取數組中當前指針所指的元素值
next()將數組的指針向後移動一位,返回移動後指針所指向的元素的元素值
prev()將數組的指針向前移動一位,返回移動後指針所指向的元素的元素值
reset()指針設置回數組的起始位置
end() 將指針移動到數組的最後一個元素處
each()返回數組中當前指針所指向的“索引/元素值”對,並將數組指針向後移動一位
返回一個包含4個元素的數組,且該數組的索引分別為0,key,1,value
key() 返回數組當前指針所指向的索引值
array_walk()以相同的方式對數組中的每一個元素進行處理
array_reduce() 將自定義函數依次應用於數組的每個元素
9、其他的數組操作函數
list()從一個數組中一次提取多個值,並同時賦值給多個變量
count()/sizeof()計算數組中元素的個數

六、PHP中的字符串
1、訪問字符串中的字符
字符串的三種定義方式:單引號、雙引號和Heredoc方式
可以將字符串視為數組來處理。$test="hello"; $test{0}="h";推薦使用大括號,以免與數組混淆

2、字符串的格式化
字符串的格式化處理通常包括:去除字符串中多余的空格、大小寫轉換、加入和刪除反斜槓和HTML格式化四部分
去除空格和其他符號

string trim(待處理的字符串,過濾字符串)
如果不指定過濾字符串,則默認去掉空格、Tab字符、換行符、回車符、字符串結束符和垂直制表符
可以使用“..”指定需要去除的一個范圍,例如“a..f” 表示去掉a、b、c、d、e和f
只對字符串首尾字符進行過濾,即使指定了過濾字符串,字符串中間部分也不會參與過濾
string lrtim(待處理的字符串,過濾字符串)
去除字符串左邊的空格和其他特殊字符
其他同trim()

string rtrim(待處理的字符串,過濾字符串),別名函數chop()
去除字符串右邊的空格和其他特殊字符
其他同trim()

對字符串大小寫的轉換
strtolower(待處理的字符串)將指定字符串中的所有字符轉換為小寫
strtoupper(待處理的字符串)將指定字符串中的所有字符轉換為大寫
ucfirst(待處理的字符串)檢查指定的字符串,如果指定字符串的第一個字符是字母,則將其轉換為大寫
ucword(待處理的字符串)將指定字符串中的每個單詞的首字母轉換為大寫

加入和刪除反斜槓
在將任何字符串保存到數據庫中之前,應該使用addslashes()函數添加反斜槓;
在顯示用戶數據之前,應該調用stripslashes()函數去除反斜槓
addslashes(待處理的字符串)添加反斜槓
stripslashes(待處理的字符串)刪除反斜槓

HTML格式化
nl2br(待處理的字符串)可以將字符串中的換行符轉換成HTML中的標簽"<br>",從而在浏覽器中實現換行
htmlspecialchars(待處理的字符串,是否轉換雙引號和單引號,字符集)
可以使一些特殊的字符被當成普通的文本輸出,而不會再進行HTML解析
第二個參數:默認只對雙引號進行轉換,ENT_COMPAT只轉換雙引號 ENT_QUOTES都轉換

ENT_NOQUOTES 不進行轉換
第三個參數:指定了轉換時所使用的字符集,默認為ISO-8859-1
hemlentities(待處理的字符串,是否轉換雙引號和單引號,字符集)
功能同上,但可以轉義更多的特殊字符
heml_entity_decode(待處理的字符串,是否轉換雙引號和單引號,字符集)
可以對顯示字符串進行反向轉換,轉換後的字符串能夠按HTML標簽進行解析
strip_tags(待處理的字符串,允許保留的HTML標簽)
去除所有的HTML和PHP標記

3、字符串的連接和分割
explode(分隔符,字符串,被分割的字符串片斷的數量)按指定的分隔符將一個字符串分割
如果分隔符是字符串,函數會根據字符串中的每個字符來進行分割,而不會根據整個分割字符串來分割
implode(連接符,需要連接成字符串的數組)將一些字符串通過指定的連接符連接成一個字符串
join(連接符,需要連接成字符串的數組)功能同implode()
substr(字符串,開始位置,提取長度)從某個字符串中提取一部分子字符串
開始位置為負,將得到一個從原字符串尾部開始,長度為該負數絕對值的子字符串
提取長度為負,子字符串取到倒數第“length”個字符前
這個不難理解,-就表示從後面開始
strtok(字符串,分隔符)從指定字符串中取出一個字符串片段
如果分隔符是字符串,函數會根據字符串中的第一個字符來進行分割,而不會根據整個字符串來分割
在調用該函數對字符串進行連續分割時,只有第一個分割時需要指定參數str,第一個分割後,系統會自動
記錄字符串及第一個分割後的指針位置,繼續調用該函數,則會繼續從該字符串指針的當前位置進行分割
。如果希望重置指針到字符串起始位置,只需將字符串重新作為參數傳遞給該函數即可。
split(分隔符,字符串,返回字符串個數)將一個字符串按指定的分隔符分解為多個子字符串

4、字符串的比較
可以使用==直接對字符串進行比較
strcmp(字符串1,字符串2)按字典順序,排在後面的大。如果相等,返回0,如果str1大於str2,返回正數,否則負數
區分大小寫
strcasecmp(字符串1,字符串2)同上,不區分大小寫
strnatcmp(字符串1,字符串2)按自然順序進行字符串比較,等於返回0,大於返回正數,小於返回負數,區分大小寫
strnatcasecmp(字符串1,字符串2)按自然順序進行比較,不區分大小寫

5、字符串的查找和替換
strstr(被查找的字符串,要查找的關鍵字)在一個字符串中查找匹配的字符串或字符,如果查找到,則返回從str字符中該key開始到字符串結尾的子字符串,如果沒有查到,則返回false,如果不止一個,則返回從第一個匹配到結 尾的子字符串
strisstr()功能同上,區別,該函數不區分大小寫
strchr(被查找的字符串,要查找的關鍵字)在一個字符串中查找要匹配的子字符串或字符,該函數從字符串末端開始查找,如果找到一個,則返回從該key開始到字符串結尾的子字符串,如果多於一個,則返回從尾端開始的第一個匹配,如果沒有匹配,則返回false
strpos(要查找的字符串,要查找的子字符串或字符,從原始字符串的第offset個字符開始查找)
 如果找到一個,則返回位置,從0開始,如果不止一個,返回第一個,如果沒有,返回flase
 offset不能為負,否則無法開始查找
strrpos(要超找的字符串,要查找的關鍵字,從原始字符串的第offset個字符開始查找)
 從字符串末端開始查找,如果不止一個,返回倒數第一個匹配
strripos(要查找的字符串,要查找的關鍵字,從原始字符串的第offset個字符開始查找)
 功能同strrpos(),區別不區分大小寫
stripos(要查找的字符串,要查找的關鍵字,從原始字符串的第offset個字符開始查找)
 功能同strpos()區別不區分大小寫
str_replace(被替換的字符串或數組,替換後的字符串或數組,源字符串或數組,被替換的次數)
searchreplacesubject
把subject中的search替換為replace
如果search是數組,replace是字符串,在replace會替換search數組中的所有元素
如果search和replace都是數組,在replace中的元素會替換search中對應的元素
如果search數組中的元素個數多余replace,則多余的search數組中的元素會被空字符串替換
substr_replace(被操作的原始字符串,用於替換的字符串,要被替換的原始字符串的起始位置,被替換的原始字符串 中字符的個數)用於在指定位置中查找和替換字符串中特定的子字符串
起始位置:如果為正,從頭開始計算,如果為負,從尾開始計算
長度:如果為正,表示從start開始的連續length個字符被替換,
如果為負,表示從start開始到倒數第length個字符被替換
str_ireplace()功能同substr_replace(),但是該函數不區分大小寫

6、其他常用字符串函數
strlen(字符串)用於計算指定字符串的長度
md5(字符串,標志)將一個字符串進行MD5算法加密
第二個參數如果為true,將返回一個16位的二進制數;如果為false,則返回一個32位的十六進制字符串,默認為false

七、PHP中的面向對象編程技術
1、對象的特性
封裝:對象是封裝的最基本單位,是以對象名封裝的數據結構以及可施加在這些數據上的操作的集合。
就像一個盒子,我們不需要知道盒子裡面有什麼東西,只需知道它有哪些用途即可。
繼承:PHP不支持多重繼承,繼承本質上就是代碼重用,繼承是指子類可以自動地擁有父類的全部特性,而無須從零開始構建。
多態:能夠使用類的上下文來重新定義或改變類的行為。多態性使得對象能夠根據所得到的參數決定具體執行哪個行為或方法,而對外卻可以提供統一的接口。

2、類的結構
class 類名
{
//定義屬性,使用關鍵字var
 var $var1;
 var $var2;
 ...
 //定義方法,使用關鍵字function
 function method1(...){...}
 function method2(...){...}
 ...
} 不可以將一個類分開定義到多個PHP標記對中,更不可以分開定義到多個文件中。

3、類的實例化
使用關鍵字new來創建類的實例
$實例名=new 類名;

4、使用類的屬性
若要使用類中定義的屬性或方法,只需使用運算符"->"即可。如果在類定義時需要訪問類內部自身定義的屬性或方法,則需要使用$this指針。
一般來說,從類的外部直接訪問類的屬性存在一定的風險,為此PHP對於訪問類屬性提供了一些保護措施。__set(),__get(),當視圖引用一個
類中不存在的屬性時,就會調用這些方法進行相應的處理。

5、類的訪問控制 控制類的屬性和方 法
如果對類的屬性指定了訪問控制類型,則關鍵字var需省略
public 在類的內部和外部都可以訪問。該選項是默認選項。
使用“::”運算符可以在沒有創建任何類的實例的情況下訪問類中的函數或者變量
格式如下:類名::函數類名::變量
private 只能在類的內部進行訪問
protected 只能在該類和其子類中使用

6、構造函數
構造函數在一個類被實例化時自動調用。PHP不支持多個構造函數。
構造函數的語法格式如下:function __construct(參數1,參數2,...){}

7、析構函數
析構函數會在類對象被銷毀前調用,通常用來設定對象被銷毀前需要完成的一些操作。銷毀對象最簡單的方法是直接對其賦值NULL
析構函數語法:function __destruct(){}
腳本在執行結束時,PHP會自動銷毀內存中的所有對象。因此,對於一般的類對象不需要顯式地定義析構函數。
但是如果類對象在實例化時創建了不太容易銷毀的數據,如果數據存儲在數據庫中而不是內存中,就應當定義一個析構函數,在類
對象銷毀時使這些數據能夠正常被銷毀。

8、靜態屬性和方法
靜態屬性和方法需要使用關鍵字“self::”來引用,其他介紹前文已有

9、類運算符instanceof
可以判斷一個對象是否是一個類的實例

10、繼承已有的類
繼承使用關鍵字extend

11、類的重載
重載是指在子類中再次定義與父類相同的屬性和方法。類的重載使得在子類中可以給某個屬性賦予一個與其父類中不相同的值,
也可以給某個方法指定一個與其父類中不相同的功能。

12、訪問父類中的屬性和方法
一個子類可以通過繼承和重載得到父類中的屬性和方法,並能夠重寫所繼承的屬性和方法。但有些時候,在子類中會需要直接
調用父類中的方法。在PHP中可以使用關鍵字“parent::”來實現對父類中屬性和方法的訪問。

13、使用final關鍵字禁止繼承和重載
當在一個函數定義前面使用關鍵字“final”時,表示該函數將不能被任何子類重載。
如果不希望讓一個類繼承,只需在定義類時為其添加“final”關鍵字
如果一個類中的屬性或方法被指定為“private”,則該屬性或方法將不能被繼承
如果一個類中的屬性或方法被指定為“protected”,則該屬性或方法可以被子類繼承,但不能在類外部直接訪問
如果一個類中的屬性或方法被指定為“public”,則該屬性或方法不僅可以被子類繼承,而且在任何地方都可以被訪問

14、抽象類和抽象方法
抽象類是不能實例化的類,只能作為其他類的父類使用。所以繼承抽象類的子類都必須實現所有的抽象方法。
在PHP中使用關鍵字“abstract”定義一個抽象類和方法。

15、接口
接口是一種特殊的抽象類,這種抽象類中通常只包含抽象方法,不定義屬性。屬性的定義和抽象方法的實現交給實現接口的類來完成。
定義接口使用關鍵字“interface” 實現接口使用關鍵字“implements”

16、實現多個接口
PHP中的類不允許多重繼承,但允許實現多個接口

17、對象的賦值
目標對象 = clone 原對象; 復制後兩個對象完全一樣,但互不干擾
在PHP中還可以使用__clone()方法調整對象賦值的行為。默認情況下,該函數將建立一個與原對象擁有相同屬性和方法的對象,如果希望
在賦值後改變原對象中的某些內容,只需在方法中重寫原對象中的相應的屬性和方法即可。該方法可以使用$this指針

18、自動加載類
PHP專門提供了__autoload()函數,來自動加載所需的類。
在需要加載時,該函數會自動被調用,同時類名會以參數的形式傳遞給__autoload()函數

19、處理不存在方法調用
當調用類中一個不存在的方法將會產生致命錯誤,PHP提供了__call()方法可以對這種類型的錯誤進行處理。

20、對象的序列化
為了方便變量的傳輸和存儲,通常會在傳輸和存儲變量前將其轉化成為字符串的字節流形式,在需要使用這些變量時,再將其還原為
原來的變量,這個過程成為序列化和反序列化。
為了方便傳輸和存儲類對象,也可以對齊進行序列化和反序列化處理。PHP中使用函數serialize()來序列化一個對象,其參數為對象名,
返回值為序列化後得到的字符串。反序列化使用unserialize()函數,其參數為字符串,返回原來的對象。
對象在序列化的時候,會自動調用一個名為__sleep()方法,完成一些睡前的事情,該方法不接收任何參數,但會返回一個數組,數組中
指定需要序列化的屬性,未被包含的屬性將在序列化時被忽略。如果沒有指定__sleep()方法,PHP將對所有的屬性進行序列化。
對象在反序列化時,會自動調用一個名為__wakeup()的方法,做一些對象醒來就要做的動作。

八、PHP訪問MySQL數據庫
1、數據庫操作的基本步驟
鏈接數據庫服務器mysql_connect(MySQL服務器主機名,用戶名,密碼);
選擇一個數據庫mysql_select_db(數據庫名,資源標識);
對數據庫進行操作mysql_query(數據庫語句,資源標識);
對數據記錄進行處理 mysql_fetch_row(資源標識);

2、連接和關閉數據庫
$connect = mysql_connect("localhost","root","123456");
在結束對數據庫的操作之後,mysql_connect()會自動斷開連接,也可以顯式地使用mysql_close()斷開連接。
mysql_pconnect()建立的是一種持久連接,一旦建立連接,連接將被放到連接池中,即使數據庫操作結束也
不會自動關閉連接,而是留待以後使用。即使使用mysql_close()函數也無法關閉由函數mysql_pconnect()建立
的連接。
完成數據庫操作後,應當關閉連接。但關閉不是必需的,因為PHP具有垃圾回收功能,會自動對不用的連接進行
處理。當然可以顯式地關閉連接,關閉連接需要資源標識號,如果沒有指定,則默認關閉最近打開的連接。
mysql_close(資源標識號);

3、選擇數據庫
選擇數據庫mysql_select_db(數據庫名,資源標識號);

4、查詢數據庫
執行查詢操作的函數有mysql_query()和mysql_db_query()。其中函數mysql_query()直接執行一個SQL語句,
而函數mysql_db_query()可以在指定數據庫上執行SQL語句。
mysql_query(SQL語句,資源標識號):
 如果SQL語句是select、show、expllain、describe等查詢語句,則執行成功時將返回一個資源標識號,失敗時返回false
 如果SQL語句是其他語句(insert、update、delete等),成功時返回true,失敗時返回false。
mysql_db_query(數據庫名,SQL語句,資源標識號)功能同上,此句相當於mysql|_slect_db()和mysql_query()的組合。

5、獲取和顯示數據
mysql_fetch_row(資源標識號)以數組的形式返回查詢結果集中的當前記錄行,並在調用後將結果集中的當前行指針下移一行
mysql_fetch_array(資源標識號)以數組的形式返回查詢結果集中的當前記錄行,並在調用後將結果集中的當前行下移一行
NOTE:mysql_fetch_row()返回的結果數組只能使用數字下標進行訪問,mysql_fetch_array()返回結果數組可以使用數組下標,
也可以使用字段名進行訪問,不過mysql_fetch_row()可以得到最快的執行速度
mysql_fetch_assoc(資源標識號)以關聯數組的形式返回查詢結果集中的當前記錄行,並在調用後將結果集中的當前行指針下移一行
mysql_fetch_object(資源標識號)以對象的形式返回查詢結果集中的當前記錄行,並在嗲用後將結果集中的當前行指針下移一行
mysql_result(資源標識號,行號,字段)字段可以使用數字索引,也可以使用字段名。數字索引下標從0開始
該函數返回指定記錄行的指定字段的值
mysql_num_rows(資源標識號)返回符合查詢條件的記錄行數
mysql_field_seek(資源標識號,定位的行號)定位到要查詢的行
mysql_fetch_length(資源標識號)以數字索引數組的形式返回,且每個數組元素值對應一個字段的字節數

6、數據的增刪改及相關操作
使用mysql_query()完成數據的增刪改操作
int mysql_affected_rows(資源標識號)返回受insert、update和delete影響的記錄數
mysql_num_rows()僅對select語句有效

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved