date_default_timezone_set("Asia/Shanghai");javascript
date_default_timezone_set("PRC");//設置時區 PRC 中華人民共和國php
Eclipse快捷鍵:html
alt+shift+r:重命名java
ctrl-/:對一行或多行註釋或取消註釋mysql
ctrl+o:快速outlinec++
ctrl+shift+r:打開資源程序員
屏蔽警告:error_reporting(E_ALL & ~E_NOTICE);// ~ 除了web
「select * from user where username=’$username’」ajax
Mysql修改密碼:mysql>SET PASSWORD FOR root@localhost=PASSWORD(‘newpassword’);正則表達式
header("Content-type: text/html; charset=utf-8");
修改php配置文件位置:在Apache配置文件中輸入PHPIniDir "D:/Appserv/php5/php.ini"
Iconv(string in_charset,string out_charset,string str)轉換字符串字符集
Js跳轉
echo '<script language=javascript>window.location.href="login.php"</script>';
//0.5s後跳轉
echo "<meta http-equiv=\"refresh\" content=\"0.5;url=$url\">";
指令分隔符「分號」
語句分兩種:一種是功能執行語句:後面必定要加分號
與?>最近一條語句能夠不加分號,建議都加分號
一種是結構定義語句:後面必定不要加分號
程序中的註釋
1.//單行註釋
2. /* */多行註釋,多行註釋中不能再包含多行註釋
3. #腳本註釋
4. /** */文檔註釋
做用:寫過不適合的代碼註釋
寫幫助文檔
調試程序
注意:註釋要寫在代碼的上面或右邊
Php語言標記
<?php ?> 推薦使用這個,若是?>以後就是腳本結束能夠不加,建議不要加
<? ?>
<?=$var?>
<%%>
<script language=」php」></script>
變量的聲明
若是在用到數據時,須要用到屢次就聲明爲變量使用
$變量名=值
強類型語言中(C,Java)聲明變量必定要先指定類型;php是弱類型語言,變量的類型由存儲的值決定
isset()判斷變量是否存在;unset()刪除一個變量
eg:字符串聲明:1.單引號和雙引號均可以聲明字符串
2.聲明的字符串沒有長度限制
3.在雙引號的字符串中,既能夠直接解析變量,又能夠直接使用轉義字符
4.在單引號的字符串中,不能夠直接解析變量,也不可使用轉義字符(能夠轉義單引號自己,也能夠轉義轉義字符」\」)
5.在雙引號中不能再使用雙引號,在單引號中不能使用單引號
6.最好使用單引號
7.定界符聲明 可使用雙引號 聲明大量字符串
變量的命名
可變變量
一個變量的變量名能夠動態設置和使用
eg:$one=」###」;
$two=」one」;
echo $two.」<br>」;//輸出one
echo $$two.」<br>」;//輸出###,$two是one
變量的引用賦值
使用一個「&」符號加到將要賦值的變量前面(原變量)
Eg:$one=10;
$two=&$one;//two的值爲10
$one=100;//two的值也變爲100
變量的類型
Php中共有8種類型:4種標量:整型:int integer(整數的最大值,2的32次方)
布爾型:bool boolean(false的狀況:false、0、0.000、」」、」 」、null、」0」、array())
浮點型:float double real
字符串:string
2種複合類型:
數組:array
對象:object
2種特殊類型:
資源類型:resource
空類型:null
Var_dump(變量或值);//既能夠查看變量或值得類型,又能夠看數據
常量的聲明與使用
預約義常量和魔術常量(常量值不固定)
魔術常量:__FILE__(本文件) __LINE__(行數) __FUNCTION__(使用哪一個函數) PHP__VERSION__(php版本)eg:echo __FILE__.」<br>」;
類型之間的相互轉換
強制轉換:settype(變量,類型);//類型int integer float double real bool boolean string array object
這個函數將原變量的類型改變,在賦值前使用(類型)的形式,不會改變原變量的
類型
$變量=intval(變量或值);
$變量=floatval(變量或值);
$變量=stringval(變量或值);
注意:整型在內存中佔4個字節,浮點型在內存中佔8個字節(可能會出現溢出)
自動轉換:最經常使用方式,由於這種開發時不用去管理類型,變量會根據運行環境自動轉換
與變量和類型有關的一些經常使用函數
isset();判斷一個變量是否存在,值若是是null,也表示空
unset();刪除一個變量
empty();// 「 「 null
setType();設置類型
getType();獲得類型
變量類型測試函數
is_bool();
is_int() is_integer() is_long()
is_string()
is_float() is_double() is_real()
is_array()
is_object()
is_resource()
is_null();
is_scalar();//判斷是否爲標量
is_numberic();//判斷是不是任何類型的數字或數字字符串
is_callable();//是不是有效的函數名
print_r();//輸出數組
Php的運算符
一元運算符:!true;//一個操做數前有一個運算符
二元運算符:$a+$b;
三元運算符:true?1:0;
按運算符號的功能分類:
用%有兩個目的:整除運算;控制範圍 不要用小數或負數取餘,%會把兩邊的數轉爲整數後再進行整除
邏輯運算符只能操做bool型值,返回的也是bool型值
&和|既能夠做爲邏輯運算符又能夠做爲位運算符
短路問題:&&和||會發生短路,&&在作運算時,若是前面的數爲false,則後面是否爲true,整個表達式都是false,再也不執行後面的操做數;||在作運算時,若是前面的數爲true,則後面是否爲false,整個表達式都是true,再也不執行後面的操做數。&或|在運算時,兩邊都會被執行
``,執行運算符,引號中執行操做系統命令,儘可能不要用,可能會影響跨平臺
@,錯誤控制符,屏蔽錯誤、警告提示
優先級:不用記優先級,使用括號改變優先級
流程控制
1、順序結構
2、分支結構/條件結構/選擇結構
if(條件)//條件bool,true或false,< > == != & || ! isset()
使用else從句
if(條件){
一條或多條代碼
}else{
一條或多條代碼
}
可使用if else if 和switch case
\\這是一種互斥的關係
if(條件){
}else if(){
}elseif(){
}else{
}
switch(變量){//變量只用整型和字符串,儘可能不要用其餘類型
case 值:
代碼;
Break;//退出switch的語句,能夠不要,不退出switch匹配多個值執
行同一段代碼
case 值1:
代碼;
Break;
default://可選的,無關緊要,不用再加break
代碼;
}
若是是判斷一段範圍使用elseif;若是是單個值匹配使用switch case
儘可能不要超過五層
if(){
if(){
}else{
if(){
}
}
}else{
if(){
}else{
switch(){
}
}
}
3、循環結構
先判斷條件,成立則執行
先執行再判斷條件
for(初始化;條件表達式;增量){
循環體
}
根據循環條件不一樣有兩種類型的循環:一種是計數循環 合適for
一種是條件型循環 合適while do-while foreach
幾個和循環有關的語句:break continue exit return(能夠用break2,退出兩層循環)
函數的定義:
函數的優勢:
函數的聲明:
function 函數名(){
函數體
}
function 函數名(參數1,參數2,參數3……){//參數列表,若是有多個就用「,」分開
函數體
}
function 函數名(){
函數體
返回值
}
function 函數名(參數列表){
函數體
返回值
}
函數必須調用才能執行,能夠在聲明以前調用,也能夠在函數聲明以後調用
函數名命名和變量同樣 aaaBbbCccc 函數名稱必定要有意義,函數名能夠:調用函數,開始執行函數;向函數中傳遞數據;函數名就是返回的值
函數在聲明時不能重名
能夠經過向函數傳遞參數,改變函數的行爲,參數越少越好
參數分爲:形參:在聲明函數時聲明的參數,參數就是變量,多個參數用「,」分開
實參:調用函數時傳遞給形參的值(數據,也能夠是變量)
若是沒有返回值則稱爲過程
經過使用return語句返回數據,函數執行到return語句就結束,因此不要在這個語句後寫代碼,也可使用return結束函數的執行
Php的變量的範圍
局部變量:在函數中聲明的變量就是局部變量,只能在本身的函數內部使用
全局變量:在函數外聲明,在變量聲明之後,直到整個腳本結束前均可以使用,包括在函數中和{}中均可以使用
Php的變量分不出是聲明仍是使用
在php中使用全局變量,要經過global關鍵字將這個全局變量包含到函數中才能使用到,在global聲明以後纔是使用全局的變量
參數就是局部變量,這個局部變量能夠調用時賦值
Php的靜態變量
靜態變量只能聲明在函數中(類中),不能在全局聲明
使用static在變量前
做用:一個變量能夠在同一個函數在屢次調用中共用
變量函數
若是一個變量後面有括號$var=hello $var(),就將尋找與變量值同名的函數hello();
函數須要知道的信息:1.函數的功能--------決定是否使用這個函數
2.函數的參數--------決定函數怎麼調用(幾個參數,傳什麼類型的值…)
3.函數的返回值-----調用後怎麼處理這個函數
必定要先使用系統函數(比自定義函數效率高),若是系統函數沒有你想要的功能,再去本身定義函數
函數調用方法:1.常規函數 bool copy ( string source, string dest)
2.帶有mixed的函數,mixed表示能夠傳任何類型的數據
bool chown ( string filename,mixed user )
3.帶有&參數的函數,表示引用賦值,這個函數不能傳值,只能傳一個變量,而後函數將變量的值改變,咱們在使用這個變量時,值也是變化的
bool arsort ( array &array [, int sort_flags])
4.默認函數(實參能夠比形參少) 帶有[ ]的函數,表示這個參數是可選的,若是你傳值了就使用你傳的值,若是沒有傳值則使用默認值。直接在聲明函數時,就爲函數賦初值。可選值和必須值,必須從後向前設置
bool arsort ( array &array[ ,int sort_falgs])
5.帶有…的參數函數,…表示能夠傳任意多個參數(實參能夠比形參多)
int array_unshift ( array &array, mixed var [, mixed …])
6.回調函數 帶有callback,就是調用這個函數時須要咱們傳一個函數進來(函數名、函數名字符串)
array array_filter ( array input [, callback callback])
函數的使用
系統指令,兩種用法 既能夠作函數又能夠作系統指令
require 用於靜態包含,肯定包含哪一個文件了
include 用於動態包含,根據不一樣的條件去找哪一個文件要包含
eg:if($classname==」action」){include 「action/」.$classname.」.php」;}
require_once 會自動判斷文件是否被包含過,包含過就再也不包含
include_once
echo
break
exit
include(文件名); 文件包括 .txt .html .php 至關於解釋過的php文件
include 「文件名」; 系統指令
is_dir()判斷是否是目錄(當前腳本目錄下)
數組的概述
數組中存有多個單元,單元稱爲元素,每一個元素(下標【鍵】和值),單訪問元素時,都是經過下標(鍵)來訪問元素
數組的分類
索引數組:就是下標是順序整數的索引
關聯數組:下標是字符串做爲索引 下標只有整數和字符串兩種類型
通常有規律的數組定位索引數組,無規律性用關聯數組
數組的多種聲明方式
若是索引下標不給出,就會從0開始順序索引;若是給出索引下標,下一個就會是從最大的開始增1;若是後面出現前面的下標,若是是賦值就是爲前面的元素從新賦值
索引和關聯混合聲明時,不互相影響(不影響索引下標的聲明)
默認是索引數組
若是爲關聯數組和索引數組指定下標,使用 鍵=>值
$user=array(1,」zhangsan」,10,」nan」);
$user=array(「id」=>1,」name」=>」zhangsan」,」age」=>10,」sex」=>」nan」);
多個成員間使用「,」分隔
$user=array(
array(1,」zhangsan」,10,」nan」),
array(2,」lisi」,20,」nv」), //$user[1][1]訪問lisi
array(3,」wanger」,30,」nan」)
);
數組的遍歷
其餘語言經常使用的方式(基本只有這一種方式)
Php中這種方式不是咱們首選的方式
數組必須是索引數組,並且下標還必須是連續的(php中索引下標能夠不連續
數組還有關聯數組)
foreach(數組變量 as 變量值){
循環體
}
循環次數由數組的元素個數決定
每一次循環都會將數組中的元素分別賦值給後面的變量
$user=array(1,」zhangsan」,10,」nan」);
foreach($user as $val){ //$val是自定義變量
echo $val.」<br>」;
}
foreach(數組變量 as 下標變量=>值變量){ //下標變量和值變量都是自定義的
循環體
}
each()函數:
a.須要一個數組做爲參數
b.返回來的也是一個數組
c.返回來的數組是0,1,key,value四個下標(固定的)
0和key下標是當前參數數組元素的鍵;1和value是當前參數數組元素的值
d.默認當前元素就是第一個元素
e.每執行一次後就會將當前元素向後移動
f.若是到最後的元素再執行這個函數,則返回false
list()函數:
a. list()=array(); 須要將一個數組賦值給這個函數
b.數組中的元素個數,要和list()函數中的參數個數相同
c. 數組中的每一個元素值會賦值list()函數中的每一個參數,list()將每一個參數轉
變爲變量
d. list()只能接收索引數組
e.按索引下標的順序
使用數組內部指針控制函數
next(數組);//指針下移
prev(數組);//向上移
reset(數組);//指針移動到第一個
end(數組);//最後一個
current(數組);//取走指針位置的內容資料(當前元素內容值)
key(數組);//獲取當前元素鍵值
預約義數組
自動全局變量---超全局數組
$_GET //經由URL請求提交至腳本的變量 地址欄最大8092個字節(有密碼或
大數據不適宜用get請求)
$_POST //經由HTTP POST方法提交到腳本的變量
$_REQUEST //經由GET,POST 和COOHIE機制提交到腳本的變量,所以該數組並
不值得信任,儘可能不去使用
$_FILES //經由HTTP,POST文件上傳而提交至腳本
$_COOKIE //會話控制
$_SESSION //會話控制
$_ENU //執行環境提交至腳本的變量
$_SERUER //變量由WEB服務器設定的,或直接和當前腳本的執行環境相關聯
URL,IP地址等
$GLOBALS //只要是當前腳本有效的變量都在這裏,數組鍵名爲全局變量的名稱
$_GET[「hello」]=」#######」;
print_r($_GET);
5.在函數中直接使用這些數組
數組的相關處理函數
一.和數組鍵/值操做有關的函數
二.統計數組元素的個數和惟一性的相關函數
三.使用回調函數處理數組的函數(容許在函數的參數列表中傳入用戶自定義的函數)
1.array_filter(array input[,callback callback]);//過濾 用回調函數過濾數組中的單元 兩個
參數,一個數組,一個用戶自定義函數 有返回真值的留下,假值不保留
2.array_walk(array &array,callback funcname[,mixed usedata]);//對數組中每一個成員應用用戶函數 成功返回TRUE失敗返回FALSE 兩個參數,第一個是被指定的回調函數處理的數組,第二個爲回調函數,典型狀況下回調函數funcname接收兩個參數,數組的值做爲第一個,鍵名做爲第二個,若提供可選參數userdate
3.array_map(callback callback,array arr1[,array…]);//將回調函數做用在給定的數組單元上,callback爲回調函數,後面參數使用多個數組時,數組長度保持相同
四.數組的排序函數
1.簡單的數組排序函數(對數組元素的值進行排序,但原始鍵名會被忽略換爲數字索引順序排列)
Sort(array &array[,int sort_flage])由小到大排序,第一個參數爲引用參數,則排序後數
組原型會改變,第二個參數值使用下列常量:SORT_REGULAR正常比較單元(不改變類型)SORT_NUMERIC 單元被做爲數字來比較SORT_STRING單元被做爲字符串來比較
Rsort()由大到小排序
2.根據鍵名對數組排序
Ksort() krsort()
3.根據元素的值對數組排序(保留原有鍵名和值的關係)
Asort() arsort()
4.根據「天然數排序」法(即0-9,a-z)對數組排序
Natsort() natcasesort()不區分大小寫
5.根據用戶自定義規則對數組排序
Usort() uasort()保持索引關聯 uksort()按照鍵名對數組排序,並保持索引關係
6.多維數組排序
Array_multisort()
五.數組的拆分、合併、分解、接合函數
1.arrary_slice(array array,int offset[,int length[,bool preserve_keys]])從數組中取出一段,便是在array中從offset開始取length長度的一段,若offset爲負則序列將從array中距離末端這麼遠的地方開始,若length爲負則序列將終止在距離數組末端這麼遠的地方,若length省略則序列將從offset開始到array末端,第四個參數爲true保留原有下標
2.array_splice()與第一個相似但不返回而是刪除它們並用其餘的值代替(被第四個參數指定的數組取代)
3.array_combine()合併兩個數組來建立一個新的數組,其中一個數組是鍵名(第一個參數)另一個數組的值爲鍵值,若其中一個數組爲空或兩個數組長度不一樣就會返回假
4.array_merge()把一個或多個數組合併爲一個數組,若鍵名有重複則鍵值爲最後一個的鍵值,若鍵名爲數字索引則鍵名會與連續的重複索引合併在一塊兒
5.array_intersect()計算數組的交集,取出兩個或多個數組相同的部分
6.array_diff()返回兩個數組的差集
六.數組與數據結構的函數
1.使用數組實現堆棧的功能
棧空間 後進先出 入棧出棧又稱作壓入彈出
入棧 Array_push($arr,」hello」,」hi」),在$arr中壓入值hello,可連續調用屢次
出棧 Array_pop($rr) 彈出棧頂數據
2.使用隊列
隊列 先進先出
Array_unshift() 壓入,在第一個顯示
Array_shift() 從隊頭彈出數據(即數組中第一個元素),刪除隊列中的元素
Unset()刪除變量、數組中元素(刪除之後那個元素的下標也不存在)、對象中的成員
七.其餘與數據操做有關的函數
Array_rand()隨機從數組中取出一個或多個元素的下標並返回,兩個參數,第一個是數組,第二個是隨機取的個數(默認爲1,取的是下標,取值:$arr[array_rand($arr)])
Shuffle($arr)隨機調度,把數組中元素按隨機順序從新排列,成功返回真,傳遞的是引用,原數組發生變化
Array_sum($arr)求數組全部元素成員和,返回和
range()建立並返回一個包含指定範圍元素的數組,三個參數,第一個參數是必選項規定
數組元素的最小值,第二個規定最大值,規定數組元素從哪到哪,第三是可選項規定數組元素之間的步長(默認爲1)
面向對象概述
數組和對象都屬於PHP中的複合類型(一個變量能夠存儲多個單元),對象比數組更強大,不只能夠存儲多個數據,還能夠將函數存在對象中,但對象操做不如數組靈活
對象的三大特性:封裝 繼承 多態
面向對象編程(oop)
面向對象和麪向過程的區別:
面向過程:最小單位:函數
面向對象:最小單位:對象
對象 類:對象中包含兩樣 成員屬性=變量 定義對象的外觀和狀態 成員方法=函數 定義對象的功能。聲明類->實例化對象(建立對象)->用對象,聲明類時,類中的內容就是成員屬性和成員方法,經過類建立的對象中的內容就是類中聲明的內容
類的聲明與對象實例化
類的聲明
1.肯定寫什麼類
2.類中的成員必定要屬於這個類,即跟類無關的東西不要寫
[修飾類的關鍵字] class 類名{
成員屬性;
成員方法;
}
在類中聲明成員屬性時,前面必須有修飾詞,[private protected public static const var …]$bianLiang=’’;,不肯定用什麼時,能夠用var或public。類中的成員屬性,若是建立對象時,每一個對象有不一樣的屬性值時,不要直接給初值,建立好對象以後再給值
一個文件只保存一個類,文件名中包含類名(不包含的話無法自動加載),推薦使用:類名.class.php
變量名:aaaBbbCcc
函數名:aaaBbbCcc
常量名:AAABBBCCC
類名:AaaBbbCcc
注意:無論任何名稱,必定要有意義
能夠有空類,不包含任何內容
實例化對象
經過類來實例化對象
1.使用new新建一個對象,加上類名,就是建立那個類的對象
$對象引用=new 類名; eg:$p=new Person;
2.只要有一個new關鍵字就是建立一個對象,建立一個對象就在內存中分配了一個空間,只有對象纔在內存有存儲空間
對象的使用
對象中成員必須經過對象的引用來訪問
對象->成員屬性=新值
Echo 對象->成員屬性
對象->成員方法
對象在內存中的分配狀況
內存:分四段
數據段(初始化靜態段)存靜態信息,在程序中公用的東西(eg:靜態變量、常量)
棧內存 空間小、CPU訪問速度快,存放空間大小不變的數據(整數佔4個字節、布爾型佔1字節、double型佔8字節、浮點型佔4字節)
堆內存 空間大,CPU不能直接訪問,須要經過棧中的引用訪問,存放長度不固定、比較大的數據(eg:字符串、數組、對象)
代碼段 存程序結構(eg:函數、方法)
面向對象的構造與析構方法
1.對象中成員的訪問(就是在一個對象的內部方法中,去訪問本對象中的其餘方法和成員屬性)
2.在對象中的方法中都默認有一個$this關鍵字,這個關鍵字表明調用這個方法的對象
構造方法(又叫構造器)
1.是對象建立完成之後,第一個自動調用的方法
2.構造方法的定義,方法名固定
在PHP4中,和類名相同的方法就是構造方法
在PHP5中,構造方法選擇使用魔術方法__construct()全部類中聲明構造方法都使用這個名稱,它的優勢是在改變類名時構造方法不用改變
Function Person($a,$b,$c){}
$p=new Person(1,5,6)
魔術方法:在類中寫出了某個魔術方法,這個方法對應的功能就會添加上。方法名稱都是固定的(由系統提供),沒有本身定義的。每個魔術方法都是在不一樣時刻爲了完成某一功能自動調用的方法,不一樣的魔術方法有不一樣的調用時機,方法名都是以__開頭
__construct();構造方法
__destruct();析構方法
__set();封裝時用
__get(); __isset(); __unset();
__clone(); __call(); __sleep(); __weakup(); __toString();
類外也有魔術方法 __autoload();自動加載
做用:爲成員屬性初始化
析構方法
使用垃圾回收器 析構方法做用:關閉一些資源,作一些清理工做
釋放順序,棧內存,後進先出
面向對象的三大特性
1、封裝性
1.就是把對象的成員(成員屬性、成員方法)結合成一個獨立的相同單位,並儘量隱藏對象的內部細節
屬性和方法均可以封裝
使用的關鍵字有public protected private
Private私有的,用這個關鍵字修飾的成員,只能在對象內部訪問(只有用$this訪問),不能在對象外部使用
做用:使用private修飾使用其只能在內部使用
屬性封裝:只要一個變量,須要在多個方法使用,就將這個方法聲明爲成員屬性,能夠直接在這個對象中的全部方法中使用。成員屬性就至關於這個對象中的全局變量,成員屬性都會在方法中使用,其值的變化其實就是在改變方法的執行行爲,也就是改變了對象的功能。成員屬性的值若是不正常,方法執行的功能也就不正常了
屬性封裝做用:不須要在對象外部改變或讀取它的值。封裝而後再提供一個公有的方法,通過方法對成員屬性進行賦值和取值就能夠控制
和封裝有關的魔術方法:
__set(); 是直接設置私有成員屬性值時,自動調用的方法
__get();是直接獲取私有成員屬性值時,自動調用的方法
__unset();直接使用isset查看對象中私有屬性是否存在時自動調用這個方法
__isset();直接使用unset刪除對象中私有屬性時,自動調用的方法
2、繼承性
相關名詞:父類--基類 子類—派生類
使創建的軟件具備開放性和可擴充性,增長代碼的重用性
繼承就是用子類去擴展父類,C++屬於多繼承,同一個類能夠有多個父類,PHP和JAVA屬於單繼承,同一個類只能有一個父類,可是多繼承和單繼承均可以有多個子類
(一)類繼承的應用
1.聲明一個子類,使用extends關鍵字去繼承(擴展)一個父類
2.子類能夠從父類繼承全部內容,包括成員屬性、成員方法、構造方法等等,在子類中均可以直接使用
(二)訪問類型控制
雖然子類能夠從父類中繼承全部內容,可是父類中的私有成員只能在本類中使用,不能再子類中使用,將private改成protected就能夠實現,封裝時既可讓本身類的內部訪問,也可讓子類訪問,可是類的外部不能訪問
Private 本類
Protected 本類、子類
Public 本類、子類、類外部(默認)
(三)子類中重載父類的方法
其實PHP中沒有重載這一說法 函數名相同,參數類型或個數不一樣
對象->成員 類::成員
在子類中調用父類中被覆蓋的方法:父類名::方法名() 或parent::方法名()
在子類中編寫構造方法,若是父類中也有構造方法必定要調用一次父類中被覆蓋的那個構造方法
注意:子類中重載的方法,不能低於父類中訪問權限,子類能夠放大權限不能縮小權限
Php經常使用的關鍵字
Final
做用:使用final修飾的類不能被子類繼承
使用final修飾的方法不能被子類覆蓋
用來限制類不被繼承,方法不被覆蓋
Static
注意:靜態的成員都要使用類名去訪問,不用建立對象,即便有對象也不用對象去訪問
類名::靜態成員 若是在類中使用靜態成員,可使用self表明本類($this表明本對象)
Const
PHP中聲明常量:define(‘HOST’,’www.xsphp.com’);
PHP中經常使用的魔術方法
__call()
做用:在調用對象中不存在的方法時就會出現系統報錯,而後程序退出
何時自動調用:在調用一個對象中不存在的方法時自動調用
處理一些不存在方法的錯誤調用
有兩個參數,一個是不存在方法的方法名,一個是不存在方法的參數(數組)
__toString()
快速讀取對象字符串表示的最佳方法
直接輸出對象引用時自動調用,用來獲取對象字符串表示的最便捷的方式
__autoload($classname)
自動加載類的方法
注意:其餘的魔術方法都是在類中添加起做用,這是惟一一個不在類中添加的方法
只要在頁面中使用到一個類,只要用到類名就會自動將類名傳給這個參數
Eg: function __autoload($className){
Include 「./」.$className.」.class.php」;
}
$o=new One();
__clone()
克隆對象 使用clone處理 本來(原來的對象) 複本(複製出來的對象)
克隆對象時自動調用的方法
只要一個對象一誕生就要有初始化的動做,和構造方法__construct做用類似
__clone()方法中的$this關鍵字,表明的是複本,$that表明本來對象
對象串行化(序列化):將一個對象轉爲二進制串(對象存儲在內存中)
Serialize() 參數是一個對象。返回來的就是串行化後的二進制串
Unserialize() 反序列化 參數就是對象的二進制串,返回來的就是新生成的對象
__sleep()
在序列化時自動調用的方法
做用:能夠將一個對象部分串行化 只要這個方法中返回一個數組,數組中有幾個成員屬性就序列化幾個成員屬性,若是不加這個方法,則全部成員都被序列化
Function __sleep(){
Return array(「name」,」age」);
}
__wakeup()
在反序列化時自動調用的方法
也是對象從新誕生(須要初始化)的一個過程
Function __wakeup(){
$this->name=」sanzhang」;//$this指新誕生的對象
$this->age=$this->age+1;
}
抽象類和抽象方法、接口的應用
抽象類是一種特殊的類,接口是一種特殊的抽象類(做用和抽象類相同),而多態就要使用到抽象類或接口
抽象類
抽象方法 若是一個類中的方法沒有方法體(就是一個方法沒有使用{}而直接使用分號結束abstract function test();)的方法就是抽象方法
抽象方法必須使用abstract修飾
抽象類 若是一個類中有一個方法是抽象的則這個類就是抽象類(其餘不變,能夠在抽象
類中聲明成員屬性,常量,非抽象的方法)
抽象類必須使用abstract修飾,抽象類不能實例化對象(不能經過抽象類去建立
一個抽象類的對象)
做用:要想使用抽象類必須使用一個類繼承抽象類,而要想使用這個子類就子類必須不能再是抽象類,子類能夠重寫父類的方法給抽象方法加上方法體。就是在定義一些規範,讓子類按這些規範去實現本身的功能。目的就是將你本身寫的程序加入到原來已經寫好的程序中去(別人寫好的程序,不可能等你開發完一個小模塊,根據你的小模塊繼續向後開發)
接口
PHP是單繼承的,若是使用抽象類,子類實現完抽象類就不能再去繼承其餘的類,若是既想實現一些規範又想繼承一個其餘類,就要使用接口
接口和抽象類對比:
Interface 接口名{}
可使用抽象類實現接口中的部分方法,若是想讓子類能夠建立對象,則必須實現接口中的所有抽象方法。能夠定義一個接口去繼承另外一個接口
一個類能夠實現多個接口(按多個規範去開發子類),使用逗號分隔多個接口名稱
一個類能夠在繼承一個類的同時實現一個或多個接口(先繼承再實現)
使用implements的目的:
1.能夠實現多個接口,而extends只能繼承一個父類
2.沒有使用extends,能夠繼承一個類,因此兩個能夠同時使用
多態
多態就是讓具備繼承關係的不一樣類對象,能夠對相同名稱成員函數調用,產生不一樣的反應效果。多態的功能可讓軟件在開發和維護中達到充分的延伸性
PHP內置字符串處理函數
PHP中重要的一種數據類型
字符串處理函數比正則表達式處理字符串的效率要高,因此同時能用字符串處理函數和正則表達式處理時建議使用字符串處理函數
字符串特色:1.其餘類型的數據用在字符串處理函數中,會自動將其轉爲字符串後再處理
2.能夠將字符串視爲數組,當作字符集合來看待。爲與數組的區分,字符串使用大括號(也能使用中括號,只是爲了好區分),$str{2}
Php中內置的字符串處理函數:
在php中全部字符串處理函數,都不是在原字符串上修改,而是返回一個新格式化後的字符串
Echo() 既能夠是函數,也能夠是系統指令,echo ‘aaa’; echo(‘aaa’);,做爲系統指令使用時能夠輸出多個,echo ‘111’,’222’,’333’,’444’,’<br>’,;,但函數沒有這種用法
Print()功能和echo相同,但它有返回值,成功返回真,失敗返回假,但執行效率沒有echo高,因此通常都是用echo輸出
Die() exit()的別名 exit; exit(「aaaaaaaaaaaaa」); die(「aaaaaaaaaaa」); exit(0); exit 1;
Exit後面加數字,表示退出的狀態,數字從0到254,0表示成功退出程序,其他爲失敗,數字沒有必要加
Printf()
Sprintf()
上兩個函數用法徹底同樣,用於格式化字符串,字符串按什麼格式輸出,只是sprintf沒有直接輸出,而是返回一個字符串。有兩個參數,第一個是輸出的格式,若是沒有要輸出的變量,那第一個參數寫要輸出的字符串就行,能夠把變量插入在字符串中,插入幾個後面對應有幾個參數
格式:%%按百分比輸出 %b按二進制輸出 %c按字符輸出 %d按整數輸出 %f按浮點數輸出 %o按八進制輸出 %x按十六進制輸出 %s按字符串輸出
Eg:$str=」100.6723abc」; printf(「%s-----------------%s-----」,$str,$str); %.2f保留兩位小數
%’#20s 按字符串輸出,長度爲20,不夠的部分用#補充(在左邊補充,想要在右邊的話將20換爲-20)
Ltrim()去除左空白 空格在字符串中佔一位
Rtrim()去除右空白 兩個參數,第一個爲字符串,第二個是指定要過濾的字符或字符串,
默認爲空白
Trim()去除兩邊空白
Str_pad()把字符串填充成新的長度 str_pad($str,10);在字符串$str上補10個空字符
Str_pad($str,10,’-=’);用-=補充,補充默認在右邊,能夠加第四個參數STR_PAD_BOTH在兩邊補充LEFT左邊補充
strtolower()把字符串轉爲小寫
strtoupper()把字符串轉爲大寫
ucfirst()把首字母轉爲大寫
ucword()把字符串每一個單詞轉爲大寫
和HTML標籤相關的字符串格式化函數:
nl2br在字符串的每一個新行以前插入HTML的換行符
htmllentities()把字符串轉爲HTML的實體
htmlspecialchars把一些預約義的字符串轉爲HTML的實體
stripslashes()刪除表單提交的反斜槓
strip_tags()刪除HTML、XML、php的一些標籤,有兩個參數,第一個是指定的字符串,第二個參數能夠指定一些標籤不被刪除,strip_tags($str,’<b><p><h1>’);
number_format(float number[,int decimals[,string dec_point,string thousands_sep]])經過千位分組格式化一些數字,參數:浮點數[,保留幾位[,小數點用什麼表示,千分位用什麼隔開]],$price=1234.345; number_format($price); number_format($price,2); number_format($price,2,’.’,’,’); 1,234 1,234.34
1,234.34
strrev()反轉字符串 http://www.xsphp.com moc.phpsx.www//:ptth
md5()把字符串用md5計算
md5_file()對整個文件加密
按字節順序比較(ASCII碼):
Strcmp($str1,$str2)兩個參數,三種返回結果1($str1>$str2)、0($str1==$str2)、-1($str1<$str2)
Strcasecmp()不考慮大小寫,兩個參數,三種返回結果一、0、-1
按天然數排列的比較:
Strnatcmp()
正則表達式在字符串處理中的應用
字符串處理函數對於一些複雜的字符串沒有辦法處理,須要使用正則表達式
正則表達式就是描述字符串排列模式的一種自定義語法規則。經過構建具備特定規則的模式,與輸入的字符串信息比較,在進行分割、匹配、查找、替換等工做。若是可使用字符串處理函數完成的任務就不要使用正則表達式
正則表達式特色:
正則表達式也是一個字符串,由具備特殊意義的字符組成的字符串,具備必定的編寫規則,因此也是一種模式 例如:」/\<img\s*src=\」.*?\」\/\>/」驗證圖片
注意:正則表達式只有放在函數中才能發揮做用,不然它就只是一個字符串
Php提供兩套正則表達式函數庫:POSIX擴展正則表達式函數庫(ereg_);Perl兼容正則表達式函數(preg_),兩個函數庫功能相同,找一個處理字符串效率高的,推薦使用Perl兼容正則表達式函數
1、正則表達式模式編寫
語法:1.定界符號 起始和結束符號 // 但定界符不知侷限於反斜線,除字母、數字、
正斜線\之外的任何字符均可以做爲定界符
2.原子 eg:img \s .
只要一個正則表達式能夠單獨使用的字符,就是原子
1.全部打印(全部能夠在屏幕上輸出的字符,鍵盤上隨意敲一個鍵都是打
印字符)和非打印字符(看不到的,好比回車、空格)
2. . * + ? (<>若是全部有意義的字符,想做爲原子使用,通通使用「\」轉義
字符轉義。轉義字符能夠將有意義的字符轉成沒意義的字符,也能夠將沒意義的字符轉成有意義的字符
3.在正則表達式中能夠直接使用一些表明範圍的原子
\d : 表示任意一個十進制的數字
\D : 表示任意一個除數字以外的字符
\s : 表示任意一個空白字符,空格、\n\r\t\f [\n\r\t\f ]
\S : 表示任意一個非空白 [^\n\r\t\f ]
\w : 表示任意一個字,即a-zA-Z0-9_ [a-zA-Z0-9_]
\W :任意一個非字,除了a-zA-Z0-9_之外的任意一個字符[^a-zA-Z0-9_]
4.本身定義一個原子表[],能夠匹配方括號中的任何一個原子
例如:[1-5p-z] [^]表示取反,就是除了原子表中的原子,均可以表示(^必須在[]內的第一個字符處)例如:[^abc]除了abc其餘均可以
全部大小寫字母、數字、標點符號等
注意:原子是正則表達式最基本組成單位,並且必須至少要包含一個原子
3.元字符
元字符是一種特殊的字符,用來修飾原子,不能夠單獨使用。加上\能夠做原子
* :表示其前面的原子能夠出現0次、1次、屢次 {0,}
+ : 表示其前面的原子能夠出現1次或屢次 {1,}
? : 表示其前面的原子能夠出現0次或1次 {0,1}
{} :用於自定義前面原子出現的次數 {n}//n表示一個整數,{5}表示前面的原子出現5次,不能多,也不能少;{m,n}//m、n爲整數,m小於n,表示前面原子出現次數在m到n範圍內(包括m和n);{m,}//表示前面的原子最少出現m次,最多無限
| :表示或的關係,它的優先級別是最低的,最後考慮它的功能,因此/cat|dog/表示cat或dog而不是c或d,/d|g/表示d或g
. :默認狀況下,表示除換行符外任意一個字符
^ :直接在一個正則表達式的第一個字符出現,則表達式必須以這個正則表達式開始
$ : 直接在一個正則表達式的最後一個字符出現,則表達式必須以這個正則表達式結尾
() :重點。1.做爲大原子使用 /(abc)+/ 2.改變優先級,加上括號能夠提升優先級別 /ca(t|d)og/ 3.做爲子模式使用,正則表達式不光對一個字符串匹配一次,所有匹配做爲一個大模式,放到數組的第一個元素中,每一個()是一個子模式按順序放到數組的其餘元素中,eg:
$pattern=」/(\d{4}\W\d{2}\W\d{2})\s+(\d{2}\W\d{2}\W\d{2})\s+(am|pm)/」;
$string=」today is 2014-11-16 16:27:17 pm…」;
Preg_match($pattern,$string,$arr);
$arr: Array([0]=>2014-11-16 16:27:17 pm [1]=>2014-11-16 [2]=>16:27:17 [3]=>pm);4.能夠取消子模式,就將()做爲大原子或改變優先級使用,在括號中最前面使用「?:」就能夠取消這個()表示的子模式eg:(?:am|pm)
5.反向引用,能夠在模式中直接將子模式取出來,再做爲正則表達式的一部分,若是是在正則表達式像替換函數preg_replace函數中,能夠將子模式取出,在被替換的字符串中使用。\1取第一個子模式、\2取第二個子模式、……(注意是單引號仍是雙引號引發來的正則表達式,由於雙引號能夠解釋任意轉義字符,而單引號只能解釋轉義自己的單引號使用的轉義字符)」\\1」 ‘\1’
$pattern=」/\d{4}(\W)\d{2}\\1\d{2}\s+\d{2}(\W)\d{2}\\2\d{2}\s+(?:am|pm)/」;
$string=」today is 2014-11-16 16:27:17 pm…」;
Preg_match($pattern,$string,$arr);
$arr: Array([0]=>2014-11-16 16:27:17 pm [1]=> - [2]=>:)
\b :表示一個邊界。/\bis\b/ this is island 匹配中間有兩個邊界的is
\B :表示一個非邊界。/\Bis\b/ this is island 匹配this的is
元字符優先級:轉義字符\
() (?:) []
* + ? {}
^ $ \b \B
|
4.模式修正符號 在定界符外使用 i u
模式修正符,就是幾個字母,對整個正則表達式調優使用,也能夠說是對正則表達式功能的擴展,每個具備必定意義,能夠一次使用一個,也能夠連續使用多個
i:表示在和模式進行匹配時不區分大小寫
m : 視爲多行 默認狀況,將字符串視爲一行,加上m可視爲多行,^ $ 視爲多行後,任何一行均可以以正則開始或結束
s: 視爲單行 若是沒有使用這個修正符,元字符中的「.」默認不能表示換行符,將字符串視爲單行,加上s,’.’能夠表示任意一個字符,包括換行符
x: 表示模式中的空白忽略不計
e: 正則表達式必須使用在preg_replace替換字符串的函數中時纔可使用
A: 表示必須以什麼開頭,/abc/A,必須以abc開頭
Z: 必須以什麼結尾
?正則表達式特色就是比較「貪婪」(參考例子,xsphp 24.php),.* .+ 全部字符都符合這個條件,有兩種解決辦法,一種是使用模式修正符U,另外一種是使用?,.*? .+?。若是兩種方式同時出現,至關於開啓了貪婪模式
/原子和元字符/模式修正符號
經常使用正則表達式:
用戶名不能爲空:/^\S+$/
URL:/(https?|ftps?):\/\/(www|mail|news)\.([^\.\/]+)\.(com|org|net|cn)/i
2、正則表達式處理函數
和字符串處理函數對比介紹
1.字符串匹配與查找
Perg_match(string pattern,string subject[,array matches[,int flags]]) 正則表達式匹配,在
subject中搜索與pattern給出的正則表達式匹配的內容放在matches中,flags
爲匹配次數
Perg_match_all()匹配全部,flags默認爲全模式PREG_PATTERN_ORDER PREG_SET_ORDER
字符串處理函數:若是隻想查找字符串中包含某個字符串,建議使用strstr()或strpos()
若是隻是簡單的從一個字符串中取出一個子字符串建議使用substr()
Strstr()兩個參數,eg:strstr(「this is a test」,」test」);,若是找到搜
索的字符串則從匹配點返回字符串的其他部分,不然返回假。該函數對大小
寫敏感,若是想使用對大小寫不敏感的函數,建議使用stristr()
數據庫相關函數:
68_MySQL數據庫管理系統概述
瞭解Mysql數據庫管理系統,內容以下:
目前動態網站都是基於數據庫的,將網站內容使用數據庫管理系統去管理
用戶、欄目、圖片、文章、評論都存在數據庫中
Xscms(庫名)
Users(用戶表)
Clumn(欄目表)
Pic(圖片表)
Articles(文章表)
Commtents(評論表)…..
Oracle DB2 SQL Sever……
Php+MySQL 黃金搭檔(都是開元免費的軟件)
c/s Client / Server
Mysql DBMS
客戶端 服務器---數據庫---數據表---(記錄、字段)
1、爲你的項目設計表
2、使用sql語句(SQL編程)(增、刪、改、查)
3、其他均可以使用工具完成
細說php配套視頻
My.ini(配置文件) bin/ (存在MySQL的全部命令) data/(MySQL的庫)
SQL(Structured Query Language)(結構化查詢語言)
DDL:定義和管理數據對象,建立庫,建立表
Create database 庫名 create database if not exists xsphpdb;
Create table [庫名.]表名 use 庫名
Drop database 庫名drop database if exists xsphpdb;
Drop table 表名
DML:用於對數據的操做,插入,刪除,更新等
插入值時,全部的數據都按字符串處理
Insert into users(id,name) values(‘1’,’zhangsan’);
Update users set name=’lili’ ,age=’10’ where id=’1’;
Delete from 表名 where id=’1’;
DQL:用於查詢數據
Select * from 表名
Desc 表名 (查看錶中內容)
Use 庫名(選擇某個庫爲默認庫)
DCL:數據控制語句
遠程鏈接c:\>mysql –h 192.168.16.4\網址 –u root –p 123456
幫助的使用:
? contents (查看幫助的內容)幫助提供的內容
? + 提供的功能,能夠具體查看全部的功能
? int 查看int的功能,語法
? show 查看show命令
? + 關鍵字 查看其功能
\s查看狀態
Show variables;查看配置文件中全部的變量,查看某一個,show variables like ‘time_zone’;查看時區
Show databases;
Desc users;查看錶結構
建立數據表
1、什麼是數據表
2、建立數據表的SQL語句模型
DDL
CREATE TABLE [IF NOT EXITS ]表名稱(
字段名1 列類型 [屬性] [索引]
字段名2 列類型 [屬性] [索引]
…….
字段名n 列類型 [屬性] [索引]
)[表類型] [表字符集];
表名稱和字段名 須要咱們本身定義名稱
Users
Articles
SQL是不區分大小寫的,可是表就是一個文件名,windows不區分大小寫,Linux區分大小寫
一、 必定要有意義(英文或英文組合和多個單詞的縮寫)
二、 本身定義的名稱最好都小寫
三、 SQL語句都大寫
3、數據值和列類型
細分都是按空間大小來區分的
能夠存下就能夠
一、 數值型
整型(整數)
很是小的整型 1字節 -128--127 0—255(無符號) TINYINT
較小的整型 2字節 -32768—32767 0—65535 SMALLINT
中等大小的整型 3字節 0—16777215 MEDIUMINT
標準的整型 4字節 -2147483648—2147483647 INT
大整數型 8字節 BIGINT
浮點型(小數)
Float(M,D)一共能夠佔M位,保留D位小數 4字節
Double(M,D) 8字節
定點數
Decimal(M,D) M+2字節
注意:浮點數是近似值,不能用等號來比較
二、 字符型
「mysql」 ‘mysql’\
Char(m) 255 固定長度
Varchar(m) 255 可變長度
Char(4) varchar(4)
‘’ 4 ‘’ 1字節
‘ab’ 4 ‘ab’ 3字節
‘abcd’4 ‘abcd’5字節
‘abcdefg’4 ‘abcdefg’5字節
Text 文本數據(文章)2 16- 1
MEDIUMTEXT
LONGTEXT
Blob 二進制數據(相片)
MEDIUMBLOB
LONGBLOB
ENUM 枚舉 1或2字節
ENUM(「one」,「two」,「three」,「four」)--- 65535,一次只能有一個值
SET 集合 1,2,3,4,8字節 --- 64 一次能夠用多個集合中的值,中間使用「,」分開
三、 日期型
DATE YYYY-MM-DD
TIME hh:mm:ss
DATETIME YYYY-MM-DD hh:mm:ss
TIMESTAMP YYYYMMDDhhmmss
YEAR YYYY
建立表時最好不要使用這些中的時間格式(php中時間 1970-1-1 0:0:0)是一整數
用整數保存時間 time();
4、數據字段屬性
一、unsigned可讓空間增長一倍 -128—127 255
只能用在數值型字段
二、zerofill
只能用在數值型字段,前導0
該字段自動應用UNSIGNED
三、AUTO_INCREMENT
只能是整數,數據每增長一條就會自動增1,字段的值是不容許重複
Null 0 留空
每一個表都最好有一個ID字段,設置爲自動增漲,auto_increment
四、 NULL和NOT NULL
默認是空
建議:在建立表時每一個字段都不要插入NULL
五、 default
5、建立索引
一、 主鍵索引
主要做用是肯定數據庫表裏一條特定數據記錄的位置
最好爲每一張數據表定義一個主鍵
一個表只能指定一個主鍵
二、 惟一索引
均可以防止建立重複的值
每一個表均可以有多個惟一索引
Unique
三、 常規索引
提高數據庫的性能
能夠提升查找的速度,減慢數據列上插入,刪除,修改
和表同樣是獨立的數據對象
能夠單獨使用,也能夠在建立表時建立
Index key是同義詞
四、 全文索引
Fulltext類型索引,MyISAM表類型使用,只有在varchar char text文本字符串上使用,也能夠多個數據列使用
Create table books(
Id int,
Bookname,varchar(30),
Price double,
Defail text not null,
Fulltext(detail,bookname),
Index ind(price),
Primary key(id)
);
select bookname, price from books where MATCH(detail) AGAINST(‘php’);
select match(detail) against(‘php’) from books;
6、數據表類型及存儲位置
Mysql和大多數數據庫不一樣,mysql有一個存儲引擎概念。
Mysql能夠針對不一樣的存儲引擎需求能夠選擇最優的存儲引擎。
引擎 數據表類型
查看MySQL默認使用的搜索引擎 show engines或show variables like ‘table_type’;
只學12種中的MyISAM 和 InnoDB;
一個數據庫中能夠存在多種數據表類型
create table t1(id int) type InnoDB; 有三個文件.frm(表結構).MYD(表數據) .MYI(索引)
create table t1(id int) engine InnoDB; 一個文件.frm
MyISAM 表類型是默認的
選擇MyISAM仍是選擇InnoDB
注意: 在一個Mysql庫中能夠(建立表時)指定不一樣表類型
MyISAM 表類型
OPTIMIZE TABLE 表名
強調快速讀取操做
也有缺點: 有一些功能不支持
InnoDB 表類型
支持一些MyISAM所不支持的功能
也有缺點:佔用空間大,不支持全文索引,讀取慢
功能 MyISAM InnoDB
事務處理 不支持 支持
數據行鎖定 不支持 支持
外鍵約束 不支持 支持
表空間佔用 相對小 相對大 最大2倍
全文索引 支持 不支持
7、Mysql默認字符集
Show character set 查看MySQL支持的字符集
Desc information_schema.character_sets;字符集以及該字符集的校對規則
Show collation like ‘gbk’查看校對規則
ACSII
ISO-8859-1/latin1 西歐 常被用來轉碼
UTF-8 1—4字節 強烈推薦使用
GBK 2字節 name varchar(12)6個漢字 UTF8 3字節 name varchar(12)4個漢字 95年發佈
GB180030 2000年發佈 與gbk兼容 數據庫支持很少
Mysql服務器,數據庫,數據表,字段
*****數據庫中的UTF-8 寫爲 UTF8
Mysql的字符集包括
字符集:是用來定義Mysql存儲字符串的方式 36
校對規則:是對規則定義了比較字符串的方式 70
一對多的關係:1個字符集能夠對應多個校對規則
Gbk_chinese_ci ci比較時不區分大小寫
cs區分大小寫
Gbk_bin bin二進制比較
客戶端與服務器交互時
Character_set_client 客戶端字符集
Character_set_connection 連接字符集
Character_set_results 結果字符集
set names 字符集 同時修改以上三個的值
create database xsdemo default character set_gbk collate gbk_chinese_ci;
create table t1(id int) type=InnoDB default character set gbk collate gbk_chinese_ci;
alter table t1 character set utf8;
備份數據庫:
C:\document and settings\administrator>mysqldump –u root –p –default-character-set=gbk –d xsdemo1>c:/appserv/www/xsphp/createtab.sql
導入數據庫:
C:\document and settings\administrator>mysql –u –p xsdemo (aa.sql)
8、修改表
Alter table t1 modify sex char(3);
Alter table t1 add sex varchar(10) not null after name;
Alter table t1 change name username varchar(30);
Change能夠更改列類型和列名
Modify 只能更改列類型
Alter table t1 rename as users; 從新命名錶名
Alter table users drop age;
Sql種類
DDL DML DQL DCL
對於程序員來講
建立表(爲項目設計表)
增、刪、改、查
插入表格insert
Insert into 表名(【字段列表】) values(值列表1),(值列表2),(值列表3)
特色:
Update 表名 set 字段=‘值’ 【,字段2=值2 【,/。。。。。】 】 【條件】 條件是肯定要更改的記錄,能夠經過條件指定一條,也可指定多條
Delete from 表名【條件】
Where
Select
均可以使用各類運算符號(能夠把字段當作一個變量)
只要你想更新、刪除、查找,只要寫對條件就能準確找到要管理的一條或多條語句
SELECT [ALL | DISTINCT]
{*|table.*| [table.]field1[as alias1][,table.]field2[as alias2][……..]}
FROM 表名【】
[WHERE……..]
[GROUP BY……]
[HAVING……..]
[ORDER BY……]
[LIMIT count]
使用SELECT查詢語句,目的就能夠按你的想法將數據查出來,將結果返回給你
一、 字段 要列出要查詢的字段
二、 能夠爲每一個字段起個別名 後面會用到(關鍵字,多表查詢) 表也能夠起別名(多表查詢、關鍵字衝突) a as b或a b
三、 使用distinct做用整個查詢列表,取消重複的數據,只返回一個,而不是單獨的一列
四、 在SQL語句中使用表達式的列(算術運行符號,可使用條件,邏輯運算符號) 1+1 4-1
五、 WHERE 能夠在SELECT UPDATE DELETE
邏輯運算符號(多個條件組合)
&& || !
AND OR NOT
比較運算符
= 和程序中的 == 不同
<=> 和 = 做用相同,但能夠用於NULL比較
!= <>
< <= > >=
IS NULL
IS NOT NULL
BETWEEN AND
NOT BETWEEN AND
LIKE (任意一個字符)和%(0個或多個任意字符) 兩個通配符號
NOT LIKE
IN
REGEXP RLIKE
正則查詢:selct * from productswhere name regexp ‘s$’;查詢名字中以s結尾的
六、 多表查詢(鏈接查詢)
七、 嵌套查詢 子查詢
八、 Order by 字段【asc正序】從低到高 desc倒序
Select * from user order by id;
Select * from user order by id desc;
Select * from user where id>5 order by id asc;
九、 Limit count
Select * from user limit 5;
Select * from user where id<10 order by id desc limit 5;
Select * from user where id<14 order by id desc limit 0,1;從0開始取,取一個。可用來取下一條記錄
Group by 字段
count()
sum()
max()
min()
Mysql中的內置系統函數
用在SELECT語句,以及子句 where order by having 中 UPDATE DELETE
函數中能夠將字段名做爲變量來用,變量的值就是這個列對應的每一行記錄
1、字符串函數
PHP中有的函數,mysql中大部分也提供
一、 CONCAT(s1,s2,……,sn):把傳入的參數鏈接成一個字符串
select concat(name,」 age is 」,age);
二、 INSERT(str,x,y,insert):將字符串x位置開始,y個字符串長度替換爲字符串insert select insert(「abcdef」,2,3,’hello’);
三、 LOWER(str) UPPER(str):將字符串轉爲小寫或大寫
四、 LEFT(str,x) RIGHT(str,x):分別返回最左邊的x字符,和最右邊的x個字符,若第二個參數爲NULL,則什麼也不返回
五、 LPAD(str,n,pad), RPAD(str,n,pad):用字符串pad對str最左邊和最右邊進行填充,直到長度爲n個字符長度
六、 TRIM(str), LTRIM(str) Rtrim(str):去掉字符串兩邊,左邊和右邊字符串的空格
七、 replace(str,a,b):用字符串b替換字符串str中的全部出現的字符串a
八、 strcmp(s1,s2):若是s1比s2小,則返回-1,大,返回1,相等,返回0
九、 substring(str,x,y):返回字符串中的第x位置起y個字符串長度的字符
2、數值函數
ABS(X):返回x的絕對值
ceil(x):返回大於x的最小整數
floor(x):返回小於x的最大整數
mod(x,y):返回x/y的模
rand() 0到1之間的隨機 ceil(rand()*100)
round(x,y):返回參數x的四捨五入的有y位小數的值
truncate(x,y):返回數字x截斷爲y位小數的結果
3、日期函數
用PHP的時間戳來完成
curdate()返回當前日期 2014-12-21
curtime()返回當前時間 10:43:45
now()返回當前日期、時間
unix_timestamp(date()/now())返回時間戳
from_unixtime()
week()
year()
hour(curtime()/new())
minute()
monthname(now())
date_format(now(), 「%Y-%m-%d %H:%i:%s」)
……….
4、流程控制函數(實現條件選擇)
If(value ,t f) select id,salary,if(salary>3000,’hight’,’low’) from
Ifnull(value1,value2)
case when [value1] then[result1]…..else[default] end
selet case when salary<=3000 then ‘low’ else ‘high’ end from
5、其餘函數
database()當前數據庫名
version()當前數據庫版本
user()當前用戶
inet_aton(ip)數據表示IP地址 IP地址的網絡字節順序
inet_ntoa()返回數字(網絡字節地址
password()將字符串加密 41位 設置系統用戶密碼
select * from mysql.user \G;
md5()對應用程序用戶加密
php處理數據庫
鏈接數據庫 mysql_connect(); 主機 用戶名 密碼 返回鏈接的資源 mysql_pconnect持久鏈接,不能使用mysql_close關閉,建議使用
選擇數據庫 mysql_select_db(); 數據庫名 資源(可選)
解決錯誤:if(!$result){
Echo 「ERROR」.mysql.error().」:」.mysql_error();
Exit;
}
‘{$_GET[「name」]}’ ‘共{$total}條記錄’
最後的ID mysql_insert_id()
影響的行數 mysql_affected_rows()
處理結果集
1、從結果集中將記錄取出
Mysql_fetch_row()//返回索引數組
Mysql_fetch_assoc()//返回關聯數組(下標,就是列表)
以上兩個使用哪一個都行,沒有效率之分
Mysql_fetch_array()//返回索引和關聯兩個數組 不建議使用
Mysql_fetch_object()//將一條記錄以對象的形式返回 不經常使用
參數都是結果集,用法同樣,一次從結果集取出一條記錄,將指針移到下一條記錄(默認是第一條記錄,使用Mysql_data_seek($result,row)能夠改),再取就是下一條記錄,若是到結尾則返回false
Mysql_data_seek($result,3)移動內部結果的指針
2、獲取字段信息
共有列數、行數:mysql_num_fields($result) 列數mysql_num_rows($result)行數
字段名mysql_field_name() mysql_field_type()
釋放結果集mysql_free_result()
使用mysqli擴展庫操做mysql數據庫(78)
從php4.1開始可使用mysqli,是一種面嚮對象的技術(新加功能都會以對象形式添加),但也支持過程化的使用方式
i表示改進,功能增長,效率提升,更穩定,之後php項目改用mysqli
mysqli擴展中提供三個類:
以上兩個類就能夠完成mysql擴展功能
選擇過程化編程仍是面向對象技術:
就算是使用mysqli中過程化的編程方式也比使用mysql編程方式功能強、效率高、更穩定,但儘可能不使用過程化方式,使用mysqli擴展就要使用面向對象的編程方式進行開發
面向對象方式:
鏈接數據庫:
1.Mysqli_connect() 主機 用戶名 密碼 數據庫名 端口
$mysqli=new mysqli(「localhost」,」root」,」123456」,」xsphpdb」);
If(mysqli_connect_errno()){
Echo 「鏈接數據庫失敗:」.mysqli_connect_error();
$mysqli=null;
Exit;
} 建議使用這種鏈接方式
$mysqli->select_db(「xsphpdb」);
2.Mysqli_init()
$mysqli=mysqli_init();
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT,5);//設置選項 選項名 選項值 設置鏈接的秒數
$mysqli->read_connect(「localhost」,」root」,」123456」,」xsphpdb」);
Eg:$mysqli=new mysqli(「localhost」,」root」,」123456」,」xsphpdb」);
If(mysqli_connect_errno()){
Echo 「鏈接數據庫失敗:」.mysqli_connect_error();
$mysqli=null;
Exit;
}
Echo $mysqli->character_set_name().」<br>」;
Echo $mysqli->get_client_info().」<br>」;
Echo $mysqli->host_info.」<br>」;
Echo $mysqli->server_info.」<br>」;
Echo $mysqli->server_version.」<br>」;
$mysqli->close();
執行SQL語句(select語句、非select語句影響行數)
$mysqli->query($sql);
獲取錯誤號、錯誤信息
Echo 「ERROR」.$mysqli->errno.」|」.$mysqli->error;
影響行數
Echo $mysqli->affected_rows;
最後自動增加的ID/最後插入的ID
$mysqli->insert_id;
使用mysqli處理結果集(79)
結果集類mysqli_result
1、處理記錄
屬性:num_rows
方法:data_seek()
$result->fetch_row() 索引數組
$result->fetch_assoc() 關聯數組
$result->fetch_array() 兩個數組都返回(MYSQLI_ASSOC,MYSQLI_NUM,MYSQLI_BOTH默認)
$result->fetch_object()
每次執行一次就會從結果集中取出當前記錄(默認是第一行,可使用data_seek(5)從第五行開始取),指針指向下一行,下次再取時就會取出下一行,當結果集中沒有記錄時,則返回false
2、處理字段信息
Field_count列數
Current_field當前列
Lengths全部列長度
$field=$result->fetch_field(); $field->name/orgname/max_length/;
$result->data_seek(40);//移動記錄指針
$result->field_seek(2);//移動字段指針
$fields=$result->fetch_fields()取出全部列,做爲數組
$result->current_field當前列列號
Eg:$mysqli->new mysqli(「localhost」,」root」,」123456」,」xsphpdb」);
If(mysqli_connect_errno()){
Echo mysqli_connect_error();
Exit;
}
$sql=」select * from shops」;//」desc shops」
$result=$mysqli->query($sql);
Var_dump($result);
$rows=$result->num_rows;
$cols=$result->field_count;//獲取列的個數
Echo 「表中{$rows}行,{$cols}列<br>」;
While($row=$result->fetch_assoc()){
Print_r($row);
Echo 「<br>」;
}
$result->close();
$result->free();
$result->free_result();
$mysqli->close();
使用mysqli擴展完成事務處理和一次執行多條SQL語句(80)
1、使用mysqli執行多條語句
執行多條SQL語句,沒有結果集
$sqls=」insert into shops(name,price,num,desc) values(‘xsphp’,’12’,’279’,’verygood’);update shops set name=’LAMP’ where id>40;delete from shops where id<30」;
$mysqli->multi_query($sqls)
執行多條SQL語句,有結果集
$sqls=」select current_user();desc shops;select * from shops;select current_date()」;
$mysqli->multi_query($sqls)
$result=$mysqli->store_result();獲取第一個SQL語句結果集
$mysqli->next_result();獲取下一個結果集
$mysqli->more_results();是否還有結果集
2、使用mysqli完成事務處理
事務處理,多個SQL要完成的任務當作是一個事務,有任何一個環節出錯,都將整個事務撤銷,若是都成功才提交。目前只有InnoDB和BDB才支持事務
把多條語句當作一個事務的時候才使用事務處理
Create table …type=InnoDB;
默認表都是自動提交的,插入數據不能回滾
Eg:
$mysqli=new mysqli(「localhost」,」root」,」123456」,」xsphpdb」);
$mysqli->autocommit(0);關閉自動提交
$error=true;
$price=50;
$sql=」update zh set ye=ye-{$price} where name=’zhangsan’」;
$result=$mysqli->query($sql);
If(!$result){
$error=false;
Echo 「從張三轉出失敗<br>」;
}else{
If($mysqli->affected_rows==0){
$error=false;
Echo 「張三的錢沒有變化<br>」;
}else{
Echo 「從張三帳號中轉出成功<br>」;
}
}
$sql=」update zh set ye=ye+{$price} where name=’lisi’」;
$result=$mysqli->query($sql);
If(!$result){
$error=false;
Echo 「從李四轉入失敗<br>」;
}else{
If($mysqli->affected_rows==0){
$error=false;
Echo 「李四的錢沒有變化<br>」;
}else{
Echo 「向李四帳號中轉入成功<br>」;
}
}
If($error){
Echo 「轉帳成功」;
$mysqli->commit();
}else{
Echo 「轉帳失敗」;
$mysqli->rollback();
}
$mysqli->autocommit(1);
$mysqli->close();
3、其餘的mysqli類中成員的使用
$mysqli->query(「set names gbk」);
$mysqli->set_charset(「utf8」);
使用php中的mysqli擴展中預處理語句(81)
預處理類mysqli_stmt(推薦使用) 語句同樣,值不相同時使用
優勢(與mysqli和mysqli_result相比):
Select * from article where title like %select * from mysql.user%;
最後ID $stmt->inser_id
影響行數$stmt->affected_rows.」行<br>」;
Eg:
$mysqli=new mysqli(「localhost」,」root」,」123456」,」xsphpdb」);
//$stmt=$mysqli->stmt_init();//返回類mysqli_stmt的對象
準備一條語句放到服務器中,插入語句
$sql=」insert into shops(name,price,num,desn) values(?,?,?,?)」;
$sql=」update shops set name=?,price=?,num=?,desn=? Where id=?」;
//$stmt->prepare($sql);//爲執行準備一個SQL語句
$stmt=$mysqli->prepare($sql);//mysqli中預處理方法,直接生成預處理對象
給佔位符號每一個?傳值(綁定參數)
$stmt->bind_param(「sdis」,$name,$price,$num,$desn);// bind_param(類型,變量,變量,變量)參數類型 I整型 d double型s字符串 b二進制大數據
$name=」zhangsan」;
$price=」57748」;
$num=45;
$desn=」good」;
執行
$stmt->execute();
$name=」lisan」;
$price=」57748」;
$num=45;
$desn=」select *from」;//SQL語句在這裏當作數據傳送,並不做爲語句執行
執行
$stmt->execute();
$stmt->close();
Eg:
$mysqli=new mysqli(「localhost」,」root」,」123456」,」xsphpdb」);
$sql=」select id,name,price,num,desn from shops where id>?」;
$stmt=$mysqli->prepare($sql);
$stmt->bind_param(「i」,$id);
$stmt->bind_result($id,$name,$price,$num,$desn);//綁定結果集
$id=99;
$stmt->execute();//返回布爾型真假,而不是結果集
$stmt->store_result();//一次性將結果都取出來
//字段信息
$result=$stmt->result_metadata();//返回結果集對象,但可使用的方法不多都與字段有關,因此不能經過它來獲取記錄信息
While($field=$result->fetch_field()){
Echo $field->name.」--」;
}
Echo 「<br>」;
$stmt->data_seek(2);//移動指針 受store_result()影響
While($stmt->fetch()){//返回布爾型真假
Echo 「$id--$name--$price--$num--$desn<br>」;
}
Echo 「記錄總數:」.$stmt->num_rows; 受store_result()影響
$stmt->free_result();
$stmt->close();
Php中使用MySQL的視圖
視圖:視圖是存放數據的一個接口,也能夠說是虛擬表,這些數據可使從一個或幾個基表(視圖)的數據,也能夠是用戶本身定義的數據,其實視圖裏不存放數據,數據仍是存在基表裏,基表數據發生變化,視圖裏數據變化,基表也會變化
視圖做用:視圖可讓查詢變得很清楚(讓複雜的SQL語句變得很簡單);
保護數據庫重要數據,給不一樣的人看不一樣的數據
建立視圖:
Create [or replace][algorithm={merge|temptable|undefined}]
View view_name[column_list]
As select_statement
[with[cascaded|local] check option]
視圖名不能與表名重複
視圖類型:merge 組合 會將引用視圖的語句的文本與視圖的定義結合起來,使視圖定義的某一部分取代語句的對應部分
Temptable 臨時表
Undefined
With local check option 只要知足本視圖的條件就能夠更新
With cascaded check option 必須知足全部針對視圖的條件才能夠更新
Create view studeng_view as select name,age,sex,email from student;
更改視圖alter view stuv…
刪除視圖 drop view stuv,stu4,…
查看視圖 show tables show tables status like ‘’ \s show create view stu2 \G
Create view user_view(username,password) as select name,pass from users;
PDO(8三、84)
Php data object
基於驅動(對外的接口同樣) php_pdo_mysql.dll mysql驅動
Pdo在Linux下安裝:--with-pdo-mysql=/user/local/mysql
Pdo提供了三個類:PDO類 和數據庫鏈接有關的類(鏈接,執行SQL語句)
PDOSatement類 準備語句,處理結果集
PDOException類 異常類
不少常量,不少更能靠常量實現
建立PDO對象:
PDO__consruct(string dsn[,stringusername[,string password][,array driver_options]])
$pdo=new PDO($dsn,」root」,」123456」);
Dsn data source name 數據源 主機位置 庫名 鏈接哪一種數據庫的驅動
$pdo=new PDO(「oci:dbname=//localhost:1521/xsphpdb」,」root」,」123456」);
$pdo=new PDO(「mysql:host=localhost;dbname=xspgpdb;port=3306」,」root」,」123456」);
$pdo=new PDO(「mysql:host=localhost;dbname=xspgpdb」,」root」,」123456」);
$pdo=new PDO(「uri:dsn」,」root」,」123456」);//dsn爲文件名 遠程鏈接文件
也能夠把dsn寫到php配置文件中,只需寫入下面的代碼:
[PDO]
Pdo.dsn.mysqlpdo=mysql:host=localhost;dbname=xsphpdb
$pdo=new PDO(「mysqlpdo」,」root」,」123456」);
第四個參數[,array driver_options],對pdo對象調優用的或底層驅動的設置
PDO執行SQL語句的三種方法:1.exec() 用來執行有影響行數的 update delete insert other 返回影響的行數
2.query() 執行有結果集的SQL語句 返回預處理的對象
3.prepare()
設置錯誤報告模式:pdo中提供三種錯誤處理模式 ERRMODE_SILENT/0 ERRMODE_WARNING/1 ERRMODE_EXCEPTION/2
經常使用模式:
<?php
try{
$pdo=new PDO("mysql:host=localhost;dbname=kaoshi","root","wen");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//$pdo->setAttribute(PDO::ATTR_ERRMODE, 2);
}catch(PDOException $e){
echo "數據庫鏈接失敗:".$e->getMessage();
exit;
}
try{
$affected_rows=$pdo->exec("insert into veling_drive_adminuser(name,password) values('zhangsan','abc')");
echo "最後插入的自動增加的ID: ".$pdo->lastInsertId();
}catch(PDOException $e){
echo $e->getMessage();
}
事務處理:InnoDB
set autocommit=0;
start transaction;
使用PDO進行SQL語句預處理和操做結果集(85)
PDOStatement類
準備一個語句 和在PDO中對象的exec()以及query()相比執行效率高、安全性高
處理結果集
PDO中有兩種佔位符號:?參數 索引數組,按索引順序使用
$stmt=$pdo->prepare(「insert into zhanghao(name,price) values(?,?)」);
名字參數 關聯數組,按名字使用,和順序無關
$stmt=$pdo->prepare(「insert into zhanghao(name,price) values(:name,:price)」);
$stmt=$pdo->prepare(「update zhanghao set name=:name,price=:price」);
綁定參數
$stmt->bindParam(1,$name,PDO::PARAM_STR);//類型 PDO::PARAM_BOOL PDO::PARAM_NULL
PDO::PARAM_LOB PDO::PARAM_INPUT_OUTPUT
$stmt->bindParam(:price,$price,PDO::PARAM_INT);
提供不提供可選類型,都會自動轉類型,因此類型沒必要要寫
最後插入的ID:$pdo->lastInsertId()
簡單的方式:
try{
$pdo=new PDO("mysql:host=localhost;dbname=kaoshi","root","wen");
}catch(PDOException $e){
echo $e->getMessage();
}
$stmt=$pdo->prepare("insert into zhanghao(name,price) values(:name,:price)");
//$stmt->execute($_POST);
$stmt->execute(array(":name"=>"wetrn",":price"=>"89079"));
$stmt->execute(array(":name"=>"weytn",":price"=>"85479"));
$stmt->execute(array(":name"=>"wehn",":price"=>"89789"));
獲取結果:fetch()默認返回關聯和索引兩種數組,傳遞常量PDO::FETCH_ASSOC返回關聯數組,PDO::FETCH_NUM返回索引數組 fetchAll()
Memcached的安裝及管理
Memcached內存對象的緩存系統
1、Memcache概述
Memcache ( 內存 緩存):是一個高性能的分佈式的內存對象緩存系統,經過在內存裏維護一個巨大的hash表 hash表是由鍵-值對(key=value)
Memcache 就是一個軟件(服務軟件) c/s軟件 用來維護內容,是將數據在內存中使用,減小I/O 開源
服務器端軟件,也須要監聽IP地址(129.121.11.111),也有默認端口(11211)
2、Memcache工做原理
Memcache 軟件;Memcached 進程,是以守護程序方式運行於一個或多個服務器中,隨時會接收客戶端的鏈接和操做
客戶端使用各類語言編寫,好比:php、java、c、c++等
3、Memcache安裝
基於libevent事件
Windows下的安裝
在appserv下新建文件夾mem,在cmd中進入mem目錄,鍵入dir回車,鍵入memcached.exe –d install回車,把memcache安裝到系統服務中,鍵入memcached.exe –d uninstall回車能夠卸載,鍵入memcached.exe –d start回車(memcached.exe –d –m 50 –l 127.0.0.1 –p 11211 start,-m指定內存大小,默認64M,-l指定監聽IP地址,默認爲127.0.0.1,-p指定端口號,端口範圍1024-65535),啓動。默認IP爲本機IP地址,端口爲11211
啓動後,在任務管理器中就有一個memcached.exe進程,監聽IP爲本機IP,監聽端口爲11211
會話控制:
會話控制
網頁跟蹤用戶須要使用會話控制完成
HTTP協議是一種無狀態協議
File_put_contents(「var.txt」,$var);//一個PHP文件
Echo file_get_contents(「var.txt」);//另外一個PHP文件
Cookie技術
服務器給客戶端(瀏覽器)的禮物 就是藉助客戶端電腦的一個文件來保存這個用戶信息,再訪問同一個網站的各個頁面都會帶這些信息過去,服務器 在每一個頁面只要經過這些信息就能區分用戶
Cookie是經過頭信息發送的,服務器向客戶端發送數據時先是狀態再是頭信息再是內容,因此在設置cookie以前不要有任何輸出包括空格
Setcookie(變量名,變量值,保存時間,[服務器端指定路徑可使用cookie]…)
Session技術
在服務器端保存用戶信息
每個用戶有一個Sessionid能夠惟一確認用戶信息,sessionid保存在客戶端,有兩種方式,一種基於cookie,另外一種基於URL
會話控制高級用法(session)
PHP中經常使用配置文件選項:
Session.name
Session.use_trans_sid 是否啓用SID的支持,默認值爲0,禁用
Session.save_path
Session.use_cookies
Session.cookie_path
Session.cookie_domain
Session.cookie_lifetime
Session.save_handler
Session.gc_maxlifetime gc,garbage collection的縮寫,垃圾回收,指定過多少秒以後數據就會被視爲垃圾並被清除,但並不會自動清除文件
下面兩個合起來就是啓動垃圾進程管理機率的,初始化時(session_start())啓動,即用Session.gc.probability/ Session.gc_divisor(例如:1/100,便是百分之一的機率啓動gc)
Session.gc.probability
Session.gc_divisor
Ajax介紹和引擎對象的建立
Ajax Asynchronous 異步傳輸 JavaScript and XML
1、Ajax的介紹和優勢
Ajax採用異步交互過程
使用Ajax的地方:
局部刷新
按需取數據
2、建立Ajax對象
Var request=new XMLHttpRequest();
建立對象過程比較複雜,但這些代碼是固定的
將建立XMLHttpRequest對象的過程寫到一個函數中
主要把瀏覽器分紅兩種,一種是IE系列的瀏覽器,一種是非IE瀏覽器(都是按W3C標準)
建立對象:
function createAjax1(){
var request=false;
//window對象中有XMLHttpRequest存在就是非IE,包括(IE7,IE8)
if(window.XMLHttpRequest){
request=new XMLHttpRequest();
if(request.overrideMimeType){
request.overrideMimeType("text/xml");
}
//window對象中有ActiveXObject屬性存在就是IE
}else if(window.ActiveXObject){
var versions=['Microsoft.XMLHTTP','MSXML.XMLHTTP','Msxml2.XMLHTTP.7.0','Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.5.0','Msxml2.XMLHTTP.4.0','MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP'];
for(var i=0;i<versions.length;i++){
try{
request=new ActiveXObject(versions[i]);
if(request){
return request;
}
}catch(e){
request=false;
}
}
}
return request;
}
var ajax=createAjax1();
使用Ajax對象中的屬性和方法完成對服務器的請求和響應(94)
請求服務器:Open() method: GET POST 服務器地址
若是使用get將數據傳給服務器,則服務器就使用$_GET接收 直接經過URL將數據傳給服務器 使用POST時必定要使用:
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
使用Ajax請求服務器,使用Ajax中的方法實現
經過Ajax獲取服務器發送的數據,是用Ajax的屬性實現