版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章PHP函數(shù)與數(shù)組《PHP網(wǎng)站開(kāi)發(fā)實(shí)例教程(第3版)》學(xué)習(xí)目標(biāo)/Target
掌握函數(shù)的定義和調(diào)用方法,能夠根據(jù)需求定義和調(diào)用函數(shù)。
掌握設(shè)置函數(shù)參數(shù)默認(rèn)值的方式,能夠給函數(shù)的參數(shù)設(shè)置默認(rèn)值。
掌握變量的作用域,能夠在函數(shù)中正確使用變量。
了解可變函數(shù)和匿名函數(shù)的概念,能夠說(shuō)出什么是可變函數(shù)和匿名函數(shù)。
掌握函數(shù)遞歸調(diào)用的實(shí)現(xiàn)方式,能夠遞歸調(diào)用函數(shù)。學(xué)習(xí)目標(biāo)/Target
掌握字符串函數(shù)、數(shù)學(xué)函數(shù)、時(shí)間和日期函數(shù)的使用方法,能夠使用這些函數(shù)對(duì)
字符串、數(shù)值、時(shí)間和日期進(jìn)行處理。
了解數(shù)組的概念,能夠說(shuō)出數(shù)組的分類(lèi)。
掌握數(shù)組的基本使用和遍歷,能夠定義、新增、訪問(wèn)、刪除和遍歷數(shù)組。
掌握數(shù)組和字符串的轉(zhuǎn)換方法,能夠使用explode()函數(shù)和implode()函數(shù)完成數(shù)組
和字符串的轉(zhuǎn)換。
掌握基本數(shù)組函數(shù)、數(shù)組排序函數(shù)和數(shù)組檢索函數(shù)的使用方法,能夠使用這些函數(shù)
完成對(duì)數(shù)組的合并、分割、排序和檢索。章節(jié)概述/Summary在PHP中,函數(shù)用于封裝重復(fù)使用的代碼。將代碼封裝成函數(shù)后,在實(shí)現(xiàn)相同的功能時(shí),直接調(diào)用函數(shù)即可。使用函數(shù)可以避免編寫(xiě)重復(fù)的代碼,不僅可減少工作量,也有利于代碼的維護(hù)。數(shù)組用于存儲(chǔ)一組數(shù)據(jù),從而方便開(kāi)發(fā)人員對(duì)一組數(shù)據(jù)進(jìn)行批量處理。利用數(shù)組函數(shù)可以實(shí)現(xiàn)數(shù)組的遍歷、排序和檢索等操作。本章將對(duì)函數(shù)和數(shù)組進(jìn)行詳細(xì)講解。目錄/Contents3.13.23.3函數(shù)數(shù)組常用數(shù)組函數(shù)函數(shù)3.1
先定一個(gè)小目標(biāo)!掌握函數(shù)的定義和調(diào)用,能夠根據(jù)需求定義和調(diào)用函數(shù)。3.1.1函數(shù)的定義和調(diào)用在PHP中,開(kāi)發(fā)人員可以根據(jù)功能需求定義函數(shù)。語(yǔ)法格式function函數(shù)名([參數(shù)1,參數(shù)2,…]){
函數(shù)體}3.1.1函數(shù)的定義和調(diào)用function是聲明函數(shù)使用的關(guān)鍵字,不能省略。函數(shù)名的命名規(guī)則與標(biāo)識(shí)符相同,且函數(shù)名唯一,不能重復(fù)。參數(shù)是外部傳遞給函數(shù)的值,它是可選的,多個(gè)參數(shù)之間使用英文逗號(hào)“,”分隔。函數(shù)體是實(shí)現(xiàn)指定功能的代碼,在函數(shù)體中使用return關(guān)鍵字返回函數(shù)的返回值。當(dāng)函數(shù)定義好后,若要使用函數(shù),需要對(duì)函數(shù)進(jìn)行調(diào)用。語(yǔ)法格式函數(shù)名([參數(shù)1,參數(shù)2,…])3.1.1函數(shù)的定義和調(diào)用定義sum()函數(shù)實(shí)現(xiàn)求兩個(gè)數(shù)的和:functionsum($a,$b){$result=$a+$b;return$result; //返回執(zhí)行結(jié)果}echosum(23,45); //調(diào)用函數(shù),輸出結(jié)果:683.1.1函數(shù)的定義和調(diào)用
先定一個(gè)小目標(biāo)!掌握設(shè)置函數(shù)參數(shù)的默認(rèn)值的方式,能夠給函數(shù)的參數(shù)設(shè)置默認(rèn)值。3.1.2設(shè)置函數(shù)參數(shù)的默認(rèn)值定義函數(shù)時(shí)為函數(shù)的參數(shù)設(shè)置默認(rèn)值,調(diào)用函數(shù)時(shí)未傳遞參數(shù),則會(huì)使用參數(shù)的默認(rèn)值。設(shè)置函數(shù)參數(shù)默認(rèn)值的示例代碼:functionsay($p,$con='says"Hello"'){return"$p$con";}echosay('Tom'); //輸出結(jié)果:Tomsays"Hello"注意:函數(shù)參數(shù)設(shè)置默認(rèn)值后,該參數(shù)就是可選參數(shù),可選參數(shù)必須放在非可選參數(shù)的右側(cè)。3.1.2設(shè)置函數(shù)參數(shù)的默認(rèn)值如果需要在函數(shù)中修改參數(shù)值,可以通過(guò)函數(shù)參數(shù)的引用傳遞來(lái)實(shí)現(xiàn),即引用傳參,在參數(shù)前添加&符號(hào)即可。多學(xué)一招:引用傳參引用傳參functionextra(&$var){$var='fruit';}$var='food';extra($var);echo$var; //輸出結(jié)果:fruit
先定一個(gè)小目標(biāo)!掌握變量的作用域,能夠在函數(shù)中正確使用變量。3.1.3變量的作用域變量只有在定義后才能夠被使用,但這并不意味著定義變量后就可以隨時(shí)使用變量。變量只可以在其作用范圍內(nèi)被使用,這個(gè)作用范圍稱(chēng)為變量的作用域。在函數(shù)中定義的變量稱(chēng)為局部變量,在函數(shù)外定義的變量稱(chēng)為全局變量。函數(shù)執(zhí)行完畢后,局部變量會(huì)被釋放。3.1.3變量的作用域局部變量和全局變量的使用:functiontest(){$sum=36; //局部變量
return$sum;}$sum=0; //全局變量echotest(); //輸出結(jié)果:36echo$sum; //輸出結(jié)果:03.1.3變量的作用域如果想在函數(shù)執(zhí)行完畢后依然保留局部變量的值,利用static關(guān)鍵字在函數(shù)中將變量聲明為靜態(tài)變量。定義實(shí)現(xiàn)計(jì)數(shù)功能的函數(shù)num():多學(xué)一招:靜態(tài)變量靜態(tài)變量functionnum(){
static$i=1;echo$i;++$i;}第1次調(diào)用num()函數(shù)輸出1,第2次調(diào)用num()函數(shù)輸出2,依次類(lèi)推
先定一個(gè)小目標(biāo)!了解可變函數(shù)的概念,能夠說(shuō)出什么是可變函數(shù)。3.1.4可變函數(shù)在程序中,當(dāng)需要根據(jù)運(yùn)行時(shí)的條件或參數(shù)來(lái)動(dòng)態(tài)選擇要調(diào)用的函數(shù)時(shí),可以使用可變函數(shù)??勺兒瘮?shù)是在變量名的后面添加小括號(hào)“()”,讓其變成函數(shù)的形式,PHP會(huì)自動(dòng)尋找與變量值同名的函數(shù),并且嘗試執(zhí)行它。3.1.4可變函數(shù)應(yīng)用可變函數(shù)的示例代碼:functionshout(){echo'comeon';}$funcname='shout'; //定義變量,其值是函數(shù)的名稱(chēng)echo$funcname(); //調(diào)用可變函數(shù)3.1.4可變函數(shù)在PHP中,有一些語(yǔ)言構(gòu)造器的用法和函數(shù)相似,但是語(yǔ)言構(gòu)造器不能通過(guò)可變函數(shù)的方式調(diào)用。常用的語(yǔ)言構(gòu)造器:腳下留心:區(qū)分語(yǔ)言構(gòu)造器和函數(shù)區(qū)分語(yǔ)言構(gòu)造器和函數(shù)echoprintexitdieincluderequireinclude_oncerequire_onceissetunsetarraylist
先定一個(gè)小目標(biāo)!3.1.5匿名函數(shù)了解匿名函數(shù)的概念,能夠說(shuō)出什么是匿名函數(shù)。匿名函數(shù)就是沒(méi)有函數(shù)名稱(chēng)的函數(shù),使用匿名函數(shù)無(wú)須考慮函數(shù)命名沖突的問(wèn)題。$sum=function($a,$b){ //定義匿名函數(shù)
return$a+$b;};echo$sum(100,200); //輸出結(jié)果:300在匿名函數(shù)中通過(guò)use關(guān)鍵字使用外部的變量:$c=100;$sum=function($a,$b)use($c){return$a+$b+$c;};echo$sum(100,200); //輸出結(jié)果:4003.1.5匿名函數(shù)匿名函數(shù)還可以作為回調(diào)函數(shù)使用?;卣{(diào)函數(shù)是一種特殊的函數(shù),它可以作為參數(shù)傳遞給其他函數(shù),并在特定事件發(fā)生或特定條件滿(mǎn)足時(shí)被調(diào)用。functioncalculate($a,$b,$func){return$func($a,$b);}echocalculate(100,200,function($a,$b){ //輸出結(jié)果:300return$a+$b;});echocalculate(100,200,function($a,$b){ //輸出結(jié)果:20000return$a*$b;});匿名函數(shù)作為回調(diào)函數(shù)使用,可以增強(qiáng)函數(shù)的靈活性和可擴(kuò)展性3.1.5匿名函數(shù)
先定一個(gè)小目標(biāo)!掌握遞歸調(diào)用函數(shù)的實(shí)現(xiàn)方式,能夠使用遞歸調(diào)用函數(shù)。3.1.6函數(shù)的遞歸調(diào)用遞歸是指在一個(gè)函數(shù)體中調(diào)用自身的過(guò)程,這種函數(shù)稱(chēng)為遞歸函數(shù)。通過(guò)函數(shù)的遞歸調(diào)用演示求4的階乘:functionfactorial($n){if($n==1){return1;}return$n*factorial($n-1);}echofactorial(4); //輸出結(jié)果:24當(dāng)$n不等于1時(shí),遞歸調(diào)用當(dāng)前變量$n乘以factorial($n-1),直到$n等于1時(shí),返回1。factorial()函數(shù)的計(jì)算過(guò)程為4×3×2×1=24。3.1.6函數(shù)的遞歸調(diào)用
先定一個(gè)小目標(biāo)!掌握字符串函數(shù)的使用,能夠使用這用這些函數(shù)對(duì)字符串進(jìn)行處理。3.1.7字符串函數(shù)在開(kāi)發(fā)程序時(shí),經(jīng)常會(huì)涉及對(duì)字符串的處理。例如,獲取用戶(hù)名稱(chēng)的首字母、判斷用戶(hù)輸入數(shù)據(jù)的長(zhǎng)度等。為此,PHP提供了字符串函數(shù),以滿(mǎn)足不同的需求。3.1.7字符串函數(shù)常用的字符串函數(shù):函數(shù)功能描述strlen(string$string)獲取字符串的長(zhǎng)度strpos(string$haystack,string$needle,int$offset=0)獲取指定字符串在目標(biāo)字符串中首次出現(xiàn)的位置strrpos(string$haystack,string$needle,int$offset=0)獲取指定字符串在目標(biāo)字符串中最后一次出現(xiàn)的位置str_replace(string$search,string$replace,string$subject,int$count)對(duì)字符串中的某些字符進(jìn)行替換substr(string$string,int$start,int$length=null)獲取字符串的子串3.1.7字符串函數(shù)1/2常用的字符串函數(shù):函數(shù)功能描述explode(string$separator,string$string,int$limit=PHP_INT_MAX)使用指定的分割符將目標(biāo)字符串分割,分割結(jié)果是數(shù)組implode(string$separator,array$array)使用指定的連接符將數(shù)組中的元素拼接成字符串trim(string$string,string$characters)去除字符串首尾處的空白字符(或指定的字符串)str_repeat(string$string,int$times)重復(fù)字符串strcmp(string$string1,string$string2)比較兩個(gè)字符串的大小3.1.7字符串函數(shù)2/21.strlen()函數(shù)strlen()函數(shù)獲取字符串的長(zhǎng)度,該函數(shù)的返回值類(lèi)型是整型。在計(jì)算長(zhǎng)度時(shí),一個(gè)英文字符、一個(gè)空格的長(zhǎng)度都是1;中文字符的長(zhǎng)度取決于字符集,在UTF-8字符集中一個(gè)中文字符的長(zhǎng)度為3,在GBK字符集中一個(gè)中文字符的長(zhǎng)度為2。echostrlen('abc'); //輸出結(jié)果:3echostrlen('中國(guó)'); //輸出結(jié)果:6echostrlen('PHP'); //輸出結(jié)果:53.1.7字符串函數(shù)2.substr()函數(shù)substr()函數(shù)用于獲取字符串的子串,該函數(shù)的第1個(gè)參數(shù)是待處理的字符串,第2個(gè)參數(shù)是字符串開(kāi)始截取的位置,第3個(gè)參數(shù)是截取字符串的長(zhǎng)度。substr()函數(shù)的第2個(gè)參數(shù)和第3個(gè)參數(shù)的使用說(shuō)明:第2個(gè)參數(shù)為負(fù)數(shù)n時(shí),表示從待處理字符的結(jié)尾處向左數(shù)第|n|個(gè)字符開(kāi)始。省略第3個(gè)參數(shù)時(shí),表示截取到字符串的結(jié)尾。第3個(gè)參數(shù)為負(fù)數(shù)n時(shí),表示從截取后的字符串的末尾處去掉|n|個(gè)字符。echosubstr('welcome',3); //輸出結(jié)果:comeechosubstr('welcome',0,2); //輸出結(jié)果:weechosubstr('welcome',3,-1); //輸出結(jié)果:comechosubstr('welcome',-4,-1); //輸出結(jié)果:com3.1.7字符串函數(shù)3.str_replace()函數(shù)str_replace()函數(shù)用于對(duì)字符串中的字符進(jìn)行替換操作,第1個(gè)參數(shù)表示目標(biāo)字符串;第2個(gè)參數(shù)表示替換字符串;第3個(gè)參數(shù)表示執(zhí)行替換的字符串;第4個(gè)參數(shù)是可選參數(shù),用于保存字符串被替換的次數(shù)。echostr_replace('e','E','welcome',$count); //輸出結(jié)果:wElcomEecho$count; //輸出結(jié)果:23.1.7字符串函數(shù)4.strcmp()函數(shù)strcmp()函數(shù)用于比較兩個(gè)字符串,根據(jù)字符的ASCII值進(jìn)行比較。該函數(shù)的兩個(gè)參數(shù)是待比較的字符串,函數(shù)的返回值有-1、0、1,具體介紹如下。當(dāng)?shù)谝粋€(gè)字符串小于第二個(gè)字符串時(shí),返回結(jié)果為-1。當(dāng)?shù)谝粋€(gè)字符串等于第二個(gè)字符串時(shí),返回結(jié)果為0。當(dāng)?shù)谝粋€(gè)字符串大于第二個(gè)字符串時(shí),返回結(jié)果為1。print_r(strcmp('A','a')); //輸出結(jié)果:-1print_r(strcmp('A','A')); //輸出結(jié)果:0print_r(strcmp('a','A')); //輸出結(jié)果:13.1.7字符串函數(shù)
先定一個(gè)小目標(biāo)!3.1.8數(shù)學(xué)函數(shù)掌握數(shù)學(xué)函數(shù)的使用,能夠使用這些函數(shù)對(duì)數(shù)值進(jìn)行處理。在開(kāi)發(fā)程序時(shí),經(jīng)常會(huì)涉及對(duì)數(shù)據(jù)的運(yùn)算。例如,對(duì)一個(gè)數(shù)進(jìn)行四舍五入、求絕對(duì)值等。為此,PHP提供了數(shù)學(xué)函數(shù),以滿(mǎn)足不同的需求。3.1.8數(shù)學(xué)函數(shù)常用的數(shù)學(xué)函數(shù):函數(shù)功能描述函數(shù)功能描述abs(int|float$num)絕對(duì)值min(mixed$value,…)返回最小值ceil(int|float$num)向上取最接近的整數(shù)pi()返回圓周率的值floor(int|float$num)向下取最接近的整數(shù)pow(mixed$num,mixed$exponent)返回?cái)?shù)的冪fmod(float$num1,float$num2)返回除法運(yùn)算的浮點(diǎn)數(shù)余數(shù)sqrt(float$num)返回?cái)?shù)的平方根is_nan(float$num)判斷是否為合法數(shù)值round(int|float$num,int$precision=0,int$mode)對(duì)浮點(diǎn)數(shù)進(jìn)行四舍五入max(mixed$value,…)返回最大值rand(int$min,int$max)返回隨機(jī)整數(shù)3.1.8數(shù)學(xué)函數(shù)數(shù)學(xué)函數(shù)的使用方法:echoceil(5.2); //輸出結(jié)果:6echofloor(7.8); //輸出結(jié)果:7echorand(1,20); //隨機(jī)輸出1到20之間的整數(shù)3.1.8數(shù)學(xué)函數(shù)
先定一個(gè)小目標(biāo)!3.1.9時(shí)間和日期函數(shù)掌握時(shí)間和日期函數(shù)的使用,能夠使用這些函數(shù)對(duì)時(shí)間和日期進(jìn)行處理。在開(kāi)發(fā)Web應(yīng)用程序時(shí),經(jīng)常會(huì)涉及對(duì)時(shí)間和日期的處理。例如,倒計(jì)時(shí)、用戶(hù)登錄時(shí)間、訂單創(chuàng)建時(shí)間等。為此,PHP提供了時(shí)間和日期函數(shù),以滿(mǎn)足不同的需求。3.1.9時(shí)間和日期函數(shù)常用的時(shí)間和日期函數(shù):函數(shù)功能描述time()獲取當(dāng)前的UNIX時(shí)間戳date(string$format,int$timestamp)格式化UNIX時(shí)間戳mktime(int$hour,int$minute=null,int$second=null,int$month=null,int$day=null,int$year=null)獲取指定日期的UNIX時(shí)間戳strtotime(string$datetime,int$baseTimestamp)將字符串轉(zhuǎn)化成UNIX時(shí)間戳microtime(bool$float)獲取當(dāng)前UNIX時(shí)間戳和微秒數(shù)3.1.9時(shí)間和日期函數(shù)時(shí)間和日期函數(shù)的使用方法:echotime(); //輸出結(jié)果:1687311094echodate('Y-m-d'); //輸出結(jié)果:2023-06-21echomicrotime(); //輸出結(jié)果:0.391463001687311094echomicrotime(true); //輸出結(jié)果:1687311094.39153.1.9時(shí)間和日期函數(shù)
先定一個(gè)小目標(biāo)!掌握函數(shù)的使用,能夠根據(jù)需求實(shí)現(xiàn)獲取文件擴(kuò)展名。3.1.10【案例】獲取文件擴(kuò)展名在實(shí)現(xiàn)文件上傳功能時(shí),經(jīng)常需要判斷用戶(hù)上傳的文件類(lèi)型,以確保其符合要求。例如,某網(wǎng)站只允許上傳JPG格式的商品圖片,因此需要獲取上傳文件的擴(kuò)展名進(jìn)行判斷。下面通過(guò)自定義函數(shù)和字符串函數(shù)來(lái)實(shí)現(xiàn)獲取文件擴(kuò)展名的功能。
案例需求3.1.10【案例】獲取文件擴(kuò)展名①創(chuàng)建自定義函數(shù),獲取文件的擴(kuò)展名,該函數(shù)接收一個(gè)參數(shù),用于傳遞文件的名稱(chēng)。②在函數(shù)體內(nèi)使用字符串函數(shù)來(lái)獲取文件的擴(kuò)展名。首先使用strrpos()函數(shù)獲取文件名中最后一個(gè)“.”出現(xiàn)的位置,然后使用substr()函數(shù)截取從該位置到字符串末尾的內(nèi)容,最后使用return關(guān)鍵字返回函數(shù)的處理結(jié)果。③定義變量保存需要處理的文件名,調(diào)用自定義函數(shù)時(shí)傳入該變量,將自定義函數(shù)的處理結(jié)果保存到另一個(gè)變量中。④將處理結(jié)果輸出到頁(yè)面,并運(yùn)行程序查看獲取的文件擴(kuò)展名。
實(shí)現(xiàn)思路3.1.10【案例】獲取文件擴(kuò)展名數(shù)組3.2
先定一個(gè)小目標(biāo)!了解數(shù)組的概念,能夠說(shuō)出數(shù)組的分類(lèi)。3.2.1初識(shí)數(shù)組數(shù)組是用于存儲(chǔ)一組數(shù)據(jù)的集合。數(shù)組中的數(shù)據(jù)稱(chēng)為數(shù)組元素,每個(gè)數(shù)組元素由鍵(Key)和值(Value)構(gòu)成。其中,鍵用于唯一標(biāo)識(shí)數(shù)組元素;值為數(shù)組元素的內(nèi)容。3.2.1初識(shí)數(shù)組數(shù)組分類(lèi)索引數(shù)組關(guān)聯(lián)數(shù)組3.2.1初識(shí)數(shù)組根據(jù)數(shù)組中鍵的數(shù)據(jù)類(lèi)型劃分:鍵的數(shù)據(jù)類(lèi)型為整型,索引數(shù)組的鍵默認(rèn)從0開(kāi)始,并依次遞增,也可以自己指定鍵。鍵的數(shù)據(jù)類(lèi)型為字符串型,關(guān)聯(lián)數(shù)組的鍵和值之間有一定的業(yè)務(wù)邏輯。數(shù)組分類(lèi)一維數(shù)組三維數(shù)組3.2.1初識(shí)數(shù)組根據(jù)數(shù)組的維度劃分:數(shù)組元素的值是非數(shù)組的數(shù)據(jù)二維數(shù)組……數(shù)組元素的值是一個(gè)一維數(shù)組數(shù)組元素的值是一個(gè)二維數(shù)組,也被稱(chēng)為多維數(shù)組
先定一個(gè)小目標(biāo)!掌握數(shù)組的基本使用,能夠定義、新增、訪問(wèn)、刪除數(shù)組。3.2.2數(shù)組的基本使用1.定義數(shù)組使用array()語(yǔ)言構(gòu)造器和短數(shù)組定義法定義數(shù)組。(1)array()語(yǔ)言構(gòu)造器使用array()語(yǔ)言構(gòu)造器定義數(shù)組,將數(shù)組元素放在小括號(hào)中,鍵和值使用=>連接,數(shù)組元素之間使用逗號(hào)分隔。定義索引數(shù)組時(shí)可以省略鍵和=>,PHP會(huì)自動(dòng)為索引數(shù)組添加從0開(kāi)始的鍵。$info=array('id'=>1,'name'=>'Tom');$fruit=array(1=>'apple',3=>'pear');$num=array(1,4,7,9);$mix=array('tel'=>110,'help',3=>'msg');3.2.2數(shù)組的基本使用(2)短數(shù)組定義法短數(shù)組定義法將array()替換為“[]”。$info=['id'=>1,'name'=>'Tom'];$num=[1,4,7,9];定義數(shù)組時(shí)需要注意以下兩點(diǎn):數(shù)組元素的鍵可以是整型和字符串型,如果是其他類(lèi)型,則會(huì)進(jìn)行數(shù)據(jù)類(lèi)型轉(zhuǎn)換。浮點(diǎn)型和布爾型會(huì)被轉(zhuǎn)換成整型,NULL會(huì)被轉(zhuǎn)換成空字符串。若數(shù)組存在相同的鍵,后面的元素值會(huì)覆蓋前面的元素值。3.2.2數(shù)組的基本使用2.新增數(shù)組元素通過(guò)直接值賦給數(shù)組變量來(lái)新增數(shù)組元素。當(dāng)不指定數(shù)組元素的鍵時(shí),鍵默認(rèn)從0開(kāi)始,依次遞增。當(dāng)指定數(shù)組元素的鍵時(shí),會(huì)使用指定的鍵。如果再次添加數(shù)組元素沒(méi)有指定鍵,會(huì)自動(dòng)將數(shù)組元素的最大整數(shù)鍵加1。$arr[]='PHP'; //賦值結(jié)果:$arr[0]='PHP'$arr[]='Java'; //賦值結(jié)果:$arr[1]='Java' $arr[3]='C語(yǔ)言'; //賦值結(jié)果:$arr[3]='C語(yǔ)言'$arr[5]='C++'; //賦值結(jié)果:$arr[5]='C++'$arr['sub']='iOS'; //賦值結(jié)果:$arr['sub']='iOS'$arr[]='網(wǎng)頁(yè)平面'; //賦值結(jié)果:$arr[6]='網(wǎng)頁(yè)平面'3.2.2數(shù)組的基本使用3.訪問(wèn)數(shù)組元素?cái)?shù)組元素的鍵是數(shù)組元素的唯一標(biāo)識(shí),通過(guò)數(shù)組元素的鍵可以獲取該元素的值。$info=['id'=>1,'name'=>'Tom'];echo$info['id']; //輸出結(jié)果:1echo$info['name']; //輸出結(jié)果:Tom數(shù)組元素比較多時(shí),可以使用print_r()或var_dump()輸出數(shù)組中的所有元素。$info=['id'=>1,'name'=>'Tom'];print_r($info);//輸出結(jié)果:Array([id]=>1[name]=>Tom)var_dump($info);//輸出結(jié)果:array(2){["id"]=>int(1)["name"]=>string(3)"Tom"}3.2.2數(shù)組的基本使用4.刪除數(shù)組元素unset()語(yǔ)言構(gòu)造器既可以刪除數(shù)組中的某個(gè)元素,又可以刪除整個(gè)數(shù)組。$fruit=['apple','pear'];unset($fruit[1]);print_r($fruit); //輸出結(jié)果:Array([0]=>apple)unset($fruit);print_r($fruit); //輸出結(jié)果:Warning:Undefinedvariable:$fruit…3.2.2數(shù)組的基本使用多學(xué)一招:判斷數(shù)組元素是否存在判斷數(shù)組元素是否存在使用數(shù)組中的某個(gè)元素時(shí),如果元素不存在,運(yùn)行程序會(huì)出現(xiàn)錯(cuò)誤。使用isset()語(yǔ)言構(gòu)造器判斷數(shù)組元素是否存在,函數(shù)返回值true表示元素存在,false表示元素不存在。$fruit=['apple','pear'];unset($fruit[1]);var_dump(isset($fruit[1]));//輸出結(jié)果:bool(false)
先定一個(gè)小目標(biāo)!3.2.3遍歷數(shù)組掌握數(shù)組的遍歷,能夠使用foreach()語(yǔ)句遍歷數(shù)組。遍歷數(shù)組是指依次訪問(wèn)數(shù)組中的每個(gè)元素,通常使用foreach語(yǔ)句遍歷數(shù)組。3.2.3遍歷數(shù)組語(yǔ)法格式1foreach(待遍歷的數(shù)組as$key=>$value){
循環(huán)體}語(yǔ)法格式2foreach(待遍歷的數(shù)組as$value){
循環(huán)體}當(dāng)不需要使用數(shù)組的鍵時(shí),可以省略$key使用foreach遍歷數(shù)組:$fruit=['apple','pear'];foreach($fruitas$key=>$value){ echo$key.'-'.$value.''; //輸出結(jié)果:0-apple1-pear}3.2.3遍歷數(shù)組
先定一個(gè)小目標(biāo)!掌握數(shù)組和字符串的轉(zhuǎn)換方法,能夠使用explode()函數(shù)和implode()函數(shù)完成轉(zhuǎn)換。3.2.4數(shù)組和字符串的轉(zhuǎn)換在PHP開(kāi)發(fā)中,靈活使用數(shù)組可以提高程序開(kāi)發(fā)效率。數(shù)組和字符串的轉(zhuǎn)換的兩個(gè)操作:將字符串分割成數(shù)組將數(shù)組合并成字符串通過(guò)explode()函數(shù)和implode()函數(shù)可以實(shí)現(xiàn)這兩個(gè)操作,下面講解這兩個(gè)函數(shù)的使用。3.2.4數(shù)組和字符串的轉(zhuǎn)換1.explode()函數(shù)explode()函數(shù)使用分割符將目標(biāo)字符串分割,第1個(gè)參數(shù)是分割符,不能為空字符串;第2個(gè)參數(shù)是目標(biāo)字符串;第3個(gè)參數(shù)是可選參數(shù),表示返回的數(shù)組中最多包含的元素個(gè)數(shù),該參數(shù)的值有3種情況,具體介紹如下:當(dāng)其為正數(shù)m時(shí),返回?cái)?shù)組中的m個(gè)元素。當(dāng)其為負(fù)數(shù)n時(shí),返回除最后的|n|個(gè)元素外的所有元素。當(dāng)其為0時(shí),則把它當(dāng)作1處理。3.2.4數(shù)組和字符串的轉(zhuǎn)換var_dump(explode('n','banana'));//輸出結(jié)果:array(3){[0]=>string(2)"ba"[1]=>string(1)"a"[2]=>string(1)"a"}1使用目標(biāo)字符串中存在的字符當(dāng)作分割符var_dump(explode('c','banana'));//輸出結(jié)果:array(1){[0]=>string(6)"banana"}2使用目標(biāo)字符串中不存在的字符當(dāng)作分割符3.2.4數(shù)組和字符串的轉(zhuǎn)換var_dump(explode('n','banana',2));//輸出結(jié)果:array(2){[0]=>string(2)"ba"[1]=>string(3)"ana"}3explode()函數(shù)的第3個(gè)參數(shù)是正數(shù)var_dump(explode('n','banana',-2));//輸出結(jié)果:array(1){[0]=>string(2)"ba"}4explode()函數(shù)的第3個(gè)參數(shù)是負(fù)數(shù)var_dump(explode('n','banana',0));//輸出結(jié)果:array(1){[0]=>string(6)"banana"}5explode()函數(shù)的第3個(gè)參數(shù)為03.2.4數(shù)組和字符串的轉(zhuǎn)換2.implode()函數(shù)implode()函數(shù)用于通過(guò)指定的連接符將數(shù)組中的元素拼接成字符串,該函數(shù)的第1個(gè)參數(shù)是連接符,第2個(gè)參數(shù)是待處理的數(shù)組。示例代碼$arr=[1,2,3];var_dump(implode(',',$arr)); //輸出結(jié)果:string(5)"1,2,3"3.2.4數(shù)組和字符串的轉(zhuǎn)換
先定一個(gè)小目標(biāo)!掌握數(shù)組的使用,能夠根據(jù)需求實(shí)現(xiàn)訂貨單。3.2.5【案例】訂貨單實(shí)現(xiàn)訂貨單功能,使用數(shù)組保存商品信息,計(jì)算出每類(lèi)商品的總價(jià)和所有商品的總價(jià),在頁(yè)面輸出商品信息、單價(jià)和總價(jià)。
案例需求379元購(gòu)買(mǎi)3個(gè)799元購(gòu)買(mǎi)2個(gè)589元購(gòu)買(mǎi)5個(gè)主板顯卡硬盤(pán)3.2.5【案例】訂貨單①創(chuàng)建order.php,定義數(shù)組保存商品的名稱(chēng)、單價(jià)、產(chǎn)地和購(gòu)買(mǎi)數(shù)量。②使用foreach語(yǔ)句遍歷數(shù)組,并將其顯示在表格中。③計(jì)算每類(lèi)商品的總價(jià)和所有商品的總價(jià),輸出到頁(yè)面中。
實(shí)現(xiàn)思路3.2.5【案例】訂貨單常用數(shù)組函數(shù)3.3
先定一個(gè)小目標(biāo)!掌握基本數(shù)組函數(shù)的使用,能夠使用這些數(shù)組完成對(duì)數(shù)組的合并、分割等操作。3.3.1基本數(shù)組函數(shù)PHP常用的基本數(shù)組函數(shù)有count()、range()、array_merge()、array_chunk()等。下面對(duì)這些基本數(shù)組函數(shù)進(jìn)行講解。3.3.1基本數(shù)組函數(shù)1.count()函數(shù)count()函數(shù)計(jì)算數(shù)組中元素的個(gè)數(shù),第1個(gè)參數(shù)是要計(jì)算的數(shù)組。第2個(gè)參數(shù)是計(jì)算的維度,默認(rèn)值0表示計(jì)算一維數(shù)組的元素個(gè)數(shù);1表示計(jì)算二維數(shù)組的元素個(gè)數(shù),依此類(lèi)推。示例代碼$stu=[['Tom','male',18],['Alice','female',15],['Julia','female',14]];echocount($stu); //輸出結(jié)果:3echocount($stu,1); //輸出結(jié)果:123.3.1基本數(shù)組函數(shù)2.range()函數(shù)range()函數(shù)根據(jù)范圍創(chuàng)建數(shù)組,通常使用字母或數(shù)字指定范圍,第1個(gè)參數(shù)是起始值;第2個(gè)參數(shù)是結(jié)束值;第3個(gè)參數(shù)是可選參數(shù),用于定義起始值和結(jié)束值的增量,默認(rèn)為1。示例代碼$arr=range('a','c');print_r($arr);//輸出結(jié)果:Array([0]=>a[1]=>b[2]=>c)$data=range(0,10,3);print_r($data);//輸出結(jié)果:Array([0]=>0[1]=>3[2]=>6[3]=>9)3.3.1基本數(shù)組函數(shù)3.array_merge()函數(shù)array_merge()函數(shù)用于合并一個(gè)或多個(gè)數(shù)組,如果合并的數(shù)組中有相同的字符串鍵名,則后面的值覆蓋前面的值;如果合并的數(shù)組中有相同的數(shù)字鍵名,將之附加到合并結(jié)果中。示例代碼$arr1=['food'=>'tea',2,4];$arr2=['a','food'=>'Cod','type'=>'jpg',4];$result=array_merge($arr1,$arr2);//輸出結(jié)果:Array([food]=>Cod[0]=>2[1]=>4[2]=>a[type]=>jpg[3]=>4)print_r($result);3.3.1基本數(shù)組函數(shù)4.array_chunk()函數(shù)array_chunk()函數(shù)將一個(gè)數(shù)組分割成多個(gè),第1個(gè)參數(shù)是待分割數(shù)組,第2個(gè)參數(shù)是分割后每個(gè)數(shù)組中元素的個(gè)數(shù),第3個(gè)參數(shù)指定是否保留原數(shù)組的鍵名,默認(rèn)值false表示不保留原數(shù)組鍵名,分割后數(shù)組的鍵從0開(kāi)始,值為true表示保留待分割數(shù)組中原有的鍵名。示例代碼$arr=['one'=>1,'two'=>2,'three'=>3];//輸出結(jié)果:Array([0]=>Array([0]=>1[1]=>2)[1]=>Array([0]=>3))print_r(array_chunk($arr,2));//輸出結(jié)果:Array([0]=>Array([one]=>1[two]=>2)[1]=>Array([three]=>3))print_r(array_chunk($arr,2,true));3.3.1基本數(shù)組函數(shù)
先定一個(gè)小目標(biāo)!3.3.2數(shù)組排序函數(shù)掌握數(shù)組排序函數(shù)的使用,能夠使用這些函數(shù)完成數(shù)組排序。通常對(duì)數(shù)組排序,需要先遍歷數(shù)組,再比較數(shù)組中的每個(gè)元素,最終完成數(shù)組的排序。為了方便對(duì)數(shù)組排序,PHP內(nèi)置了數(shù)組排序函數(shù),不需要遍歷數(shù)組即可完成排序。3.3.2數(shù)組排序函數(shù)常用的數(shù)組排序函數(shù):函數(shù)功能描述sort(array$array,int$flags)對(duì)數(shù)組升序排列rsort(array$array,int$flags)對(duì)數(shù)組降序排列ksort(array$array,int$flags)根據(jù)數(shù)組鍵名升序排列krsort(array$array,int$flags)根據(jù)數(shù)組鍵名降序排列asort(array$array,int$flags)對(duì)數(shù)組升序排列并保持索引關(guān)系arsort(array$array,int$flags)對(duì)數(shù)組降序排列并保持索引關(guān)系shuffle(array$array)打亂數(shù)組順序array_reverse(array$array,bool$preserve_keys)返回元素順序相反的數(shù)組3.3.2數(shù)組排序函數(shù)使用sort()函數(shù)和rsort()函數(shù)演示數(shù)組排序:$arr=['dog','lion','cat'];sort($arr);print_r($arr); //輸出結(jié)果:Array([0]=>cat[1]=>dog[2]=>lion)rsort($arr);print_r($arr); //輸出結(jié)果:Array([0]=>lion[1]=>dog[2]=>cat)3.3.2數(shù)組排序函數(shù)
先定一個(gè)小目標(biāo)!3.3.3數(shù)組檢索函數(shù)掌握數(shù)組檢索函數(shù)的使用,能夠使用這些函數(shù)完成數(shù)組檢索。在程序開(kāi)發(fā)中,經(jīng)常需要查詢(xún)和獲取數(shù)組的鍵和值,常用的數(shù)組檢索函數(shù):函數(shù)功能描述array_search(mixed$needle,array$haystack,bool$strict=false)在數(shù)組中搜索給定的值array_unique(array$array,int$flags=SORT_STRING)移除數(shù)組中重復(fù)的值array_column(array$array,int|string|null$column_key,int|string|null$index_key=null)返回?cái)?shù)組中指定列的值array_keys(array$array)返回?cái)?shù)組的鍵名array_values(array$array)返回?cái)?shù)組中所有的值array_rand(array$array,int$num=1)從數(shù)組隨機(jī)取出一個(gè)或多個(gè)隨機(jī)鍵key(array|object$array)從關(guān)聯(lián)數(shù)組中取得鍵名in_array(mixed$needle,array$haystack,bool$strict=false)檢查數(shù)組中是否存在某個(gè)值3.3.3數(shù)組檢索函數(shù)1.in_array()函數(shù)in_array()函數(shù)檢查數(shù)組中是否存在某個(gè)值,第1個(gè)參數(shù)是要檢測(cè)的值,第2個(gè)參數(shù)是要檢測(cè)的數(shù)組,第3個(gè)參數(shù)用于設(shè)置是否檢測(cè)數(shù)據(jù)類(lèi)型,默認(rèn)值false表示不檢測(cè),true表示檢測(cè)。$tel=['110','120','119'];var_dump(in_array(120,$tel)); //輸出結(jié)果:bool(true)var_dump(in_array(120,$tel,true)); //輸出結(jié)果:bool(false)3.3.3數(shù)組檢索函數(shù)2.array_unique()函數(shù)array_unique()函數(shù)用于移除數(shù)組中重復(fù)的值,第1個(gè)參數(shù)是待操作的數(shù)組,第2個(gè)參數(shù)是比較方式,當(dāng)省略第2個(gè)參數(shù)時(shí),默認(rèn)按照字符串的方式比較數(shù)組元素是否重復(fù)。$array=[1,2,2,3,4,4];$result=array_unique($array);print_r($result); //輸出結(jié)果:Array([0]=>1[1]=>2[3]=>3[4]=>4)3.3.3數(shù)組檢索函數(shù)
先定一個(gè)小目標(biāo)!掌握數(shù)組函數(shù)的使用,能夠根據(jù)需求實(shí)現(xiàn)學(xué)生隨機(jī)分組。3.3.4【案例】學(xué)生隨機(jī)分組高一(1)班要舉辦短跑運(yùn)動(dòng)會(huì),班級(jí)共有30個(gè)人,需要將班級(jí)中的學(xué)生隨機(jī)分組(6人一組),下面通過(guò)PHP中的數(shù)組函數(shù)實(shí)現(xiàn)隨機(jī)分組。
案例需求3.3.4【案例】學(xué)生隨機(jī)分組①創(chuàng)建run.php文件,該文件用于實(shí)現(xiàn)學(xué)生隨機(jī)分組。②使用array_rand()函數(shù)從學(xué)生信息數(shù)組中隨機(jī)取出6個(gè)鍵,并使用shuffle()函數(shù)打亂數(shù)組順序,通過(guò)獲取的鍵從學(xué)生信息數(shù)組中獲取對(duì)應(yīng)的姓名。③輸出隨機(jī)分組的信息,查看結(jié)果。
實(shí)現(xiàn)思路3.3.4【案例】學(xué)生隨機(jī)分組本章小結(jié)本章首先介紹了函數(shù),主要包括函數(shù)的定義和調(diào)用,可變函數(shù)、匿名函數(shù)、字符串函數(shù)、數(shù)學(xué)函數(shù)、時(shí)間和日期函數(shù)的使用方法;然后介紹了數(shù)組,主要包括數(shù)組的基本使用、遍歷數(shù)組、數(shù)組和字符串的轉(zhuǎn)換等內(nèi)容;最后講解了常用的數(shù)組函數(shù),主要包括基本數(shù)組函數(shù)、數(shù)組排序函數(shù)和數(shù)組檢索函數(shù)。通過(guò)學(xué)習(xí)本章的內(nèi)容,讀者應(yīng)掌握函數(shù)和數(shù)組的使用方法,以便于在實(shí)際開(kāi)發(fā)中熟練運(yùn)用。本章小結(jié)第4章PHP進(jìn)階《PHP網(wǎng)站開(kāi)發(fā)實(shí)例教程(第3版)》學(xué)習(xí)目標(biāo)/Target
了解錯(cuò)誤類(lèi)型,能夠說(shuō)出常見(jiàn)的錯(cuò)誤類(lèi)型。
掌握錯(cuò)誤信息,能夠在程序中控制錯(cuò)誤信息。
掌握HTTP請(qǐng)求和HTTP響應(yīng)的基本構(gòu)成,能夠查看請(qǐng)求數(shù)據(jù)和設(shè)置響應(yīng)數(shù)據(jù)。
掌握表單傳值的方法,能夠使用表單實(shí)現(xiàn)前后端數(shù)據(jù)交互。學(xué)習(xí)目標(biāo)/Target
掌握會(huì)話技術(shù),能夠使用會(huì)話技術(shù)記錄用戶(hù)在網(wǎng)站的活動(dòng)。
了解圖像處理,能夠說(shuō)出常用的圖像處理函數(shù)。
掌握目錄和文件操作,能夠使用函數(shù)對(duì)目錄或文件進(jìn)行添加、刪除、修改等操作。
了解正則表達(dá)式的規(guī)則,能夠說(shuō)出常用的正則表達(dá)式函數(shù)。章節(jié)概述/Summary通過(guò)對(duì)前面各章的學(xué)習(xí),讀者已經(jīng)能夠編寫(xiě)簡(jiǎn)單的PHP程序。但是在實(shí)際開(kāi)發(fā)中,還需要用到PHP中的一些進(jìn)階知識(shí),如錯(cuò)誤處理、HTTP、表單傳值、會(huì)話技術(shù)、圖像處理、目錄和文件操作、正則表達(dá)式等,本章將對(duì)這些內(nèi)容進(jìn)行詳細(xì)講解。目錄/Contents4.14.24.3錯(cuò)誤處理HTTP表單傳值4.4會(huì)話技術(shù)目錄/Contents4.54.64.7圖像處理目錄和文件操作正則表達(dá)式錯(cuò)誤處理4.1
先定一個(gè)小目標(biāo)!了解錯(cuò)誤類(lèi)型,能夠說(shuō)出常見(jiàn)的錯(cuò)誤類(lèi)型。4.1.1錯(cuò)誤類(lèi)型PHP中每個(gè)錯(cuò)誤類(lèi)型都有一個(gè)常量與之關(guān)聯(lián),還可以使用具體的值表示,常見(jiàn)的錯(cuò)誤類(lèi)型:4.1.1錯(cuò)誤類(lèi)型常量值描述E_ERROR1致命的運(yùn)行時(shí)錯(cuò)誤,這類(lèi)錯(cuò)誤不可恢復(fù),導(dǎo)致腳本停止運(yùn)行E_WARNING2運(yùn)行時(shí)警告,僅給出提示信息,腳本不會(huì)停止運(yùn)行E_PARSE4編譯時(shí)語(yǔ)法解析錯(cuò)誤,腳本無(wú)法運(yùn)行E_NOTICE8運(yùn)行時(shí)通知,表示腳本遇到可能會(huì)表現(xiàn)為錯(cuò)誤的情況E_CORE_ERROR16類(lèi)似E_ERROR,是由PHP引擎核心產(chǎn)生的E_CORE_WARNING32類(lèi)似E_WARNING,是由PHP引擎核心產(chǎn)生的E_COMPILE_ERROR64類(lèi)似E_ERROR,是由Zend腳本引擎產(chǎn)生的E_COMPILE_WARNING128類(lèi)似E_WARNING,是由Zend腳本引擎產(chǎn)生的1/2PHP中每個(gè)錯(cuò)誤類(lèi)型都有一個(gè)常量與之關(guān)聯(lián),常量還可以用數(shù)值表示,常見(jiàn)的錯(cuò)誤類(lèi)型:4.1.1錯(cuò)誤類(lèi)型常量值描述E_USER_ERROR256類(lèi)似E_ERROR,是由用戶(hù)在代碼中使用trigger_error()產(chǎn)生的E_USER_WARNING512類(lèi)似E_WARNING,是由用戶(hù)在代碼中使用trigger_error()產(chǎn)生的E_USER_NOTICE1024類(lèi)似E_NOTICE,是由用戶(hù)在代碼中使用trigger_error()產(chǎn)生的E_STRICT2048嚴(yán)格語(yǔ)法檢查,確保代碼具有互用性和向前兼容性E_RECOVERABLE_ERROR4096可被捕捉的致命錯(cuò)誤E_DEPRECATED8192運(yùn)行時(shí)通知,對(duì)未來(lái)版本中可能無(wú)法正常工作的代碼給出警告E_USER_DEPRECATED16384類(lèi)似E_DEPRECATED,是由用戶(hù)在代碼中使用trigger_error()產(chǎn)生的E_ALL32767所有的錯(cuò)誤、警告和通知2/21.NoticeNotice類(lèi)型的錯(cuò)誤通常是代碼不嚴(yán)謹(jǐn)造成的。示例代碼//設(shè)置時(shí)區(qū)的參數(shù)值錯(cuò)誤date_default_timezone_set('aaa');4.1.1錯(cuò)誤類(lèi)型2.WarningWarning錯(cuò)誤相比Notice嚴(yán)重。示例代碼//使用include引入不存在的文件include'1234'; //提示信息:Warning:include(1234):Failedtoopenstream…4.1.1錯(cuò)誤類(lèi)型使用include語(yǔ)句引入文件前,應(yīng)先判斷相應(yīng)文件是否存在,以防止錯(cuò)誤發(fā)生。3.FatalerrorFatalerror是致命錯(cuò)誤,一旦發(fā)生這種錯(cuò)誤,PHP腳本會(huì)立即停止運(yùn)行。示例代碼display();//Fatalerror:UncaughtError:Calltoundefinedfunction…echo'hello';//前一行代碼發(fā)生錯(cuò)誤,此行代碼不會(huì)執(zhí)行4.1.1錯(cuò)誤類(lèi)型調(diào)用未定義的函數(shù)display()時(shí)發(fā)生了致命錯(cuò)誤,輸出語(yǔ)句沒(méi)有執(zhí)行。
先定一個(gè)小目標(biāo)!掌握錯(cuò)誤信息,能夠在程序中控制錯(cuò)誤信息。4.1.2錯(cuò)誤信息當(dāng)程序出錯(cuò)時(shí),PHP會(huì)報(bào)錯(cuò),報(bào)錯(cuò)的信息稱(chēng)為錯(cuò)誤信息。控制錯(cuò)誤信息的兩種方式錯(cuò)誤報(bào)告錯(cuò)誤日志4.1.2錯(cuò)誤信息修改配置文件error_reporting()函數(shù)和ini_set()函數(shù)修改配置文件error_log()函數(shù)1.錯(cuò)誤報(bào)告(1)修改配置文件在php.ini中默認(rèn)開(kāi)啟了錯(cuò)誤報(bào)告。示例配置error_reporting=E_ALLdisplay_errors=Onerror_reporting設(shè)置錯(cuò)誤類(lèi)型,E_ALL報(bào)告所有的錯(cuò)誤、警告和通知,關(guān)閉錯(cuò)誤報(bào)告設(shè)置為0。display_errors設(shè)置是否顯示錯(cuò)誤信息,On顯示,Off關(guān)閉。4.1.2錯(cuò)誤信息1.錯(cuò)誤報(bào)告(2)error_reporting()函數(shù)和ini_set()函數(shù)error_reporting()函數(shù)設(shè)置錯(cuò)誤級(jí)別常量,ini_set()函數(shù)設(shè)置php.ini中指定選項(xiàng)的值。示例代碼error_reporting(E_ALL);ini_set('display_errors',On);ini_set()函數(shù)第1個(gè)參數(shù)display_errors,第2個(gè)參數(shù)值On(也可以使用1代替)表示開(kāi)啟,關(guān)閉設(shè)置為Off或0。4.1.2錯(cuò)誤信息2.錯(cuò)誤日志(1)通過(guò)修改php.ini配置文件記錄錯(cuò)誤日志在PHP的配置文件php.ini中添加錯(cuò)誤日志的配置。示例配置error_reporting=E_ALL;log_errors=Onerror_log=C:\web\php_errors.logerror_reporting設(shè)置錯(cuò)誤類(lèi)型的常量log_errors設(shè)置是否記錄日志error_log指定錯(cuò)誤日志文件的路徑4.1.2錯(cuò)誤信息2.錯(cuò)誤日志(2)通過(guò)error_log()函數(shù)記錄錯(cuò)誤日志error_log()函數(shù)的第1個(gè)參數(shù)是錯(cuò)誤信息,第2個(gè)參數(shù)指定錯(cuò)誤信息記錄位置,默認(rèn)記錄到php.ini中error_log配置的日志中,第3個(gè)參數(shù)用于指定錯(cuò)誤日志文件的路徑。示例代碼//將錯(cuò)誤信息記錄到php.ini中error_log配置的日志文件中error_log('errormessagea');//將錯(cuò)誤信息記錄到錯(cuò)誤日志文件error_log('errormessageb',3,'C:/web/php.log');4.1.2錯(cuò)誤信息HTTP4.2
先定一個(gè)小目標(biāo)!了解HTTP的概念,能夠說(shuō)出瀏覽器與Web服務(wù)器的交互過(guò)程。4.2.1HTTP概述HTTP由W3C推出,專(zhuān)門(mén)用于定義瀏覽器與Web服務(wù)器之間數(shù)據(jù)交換的格式。它不僅可以保證計(jì)算機(jī)正確快速地傳輸超文本文檔,還可以確定傳輸文檔中的哪部分或優(yōu)先展示哪部分內(nèi)容。4.2.1HTTP概述瀏覽器與Web服務(wù)器交互的過(guò)程:4.2.1HTTP概述HTTP在Web開(kāi)發(fā)中占據(jù)重要的位置的原因:①簡(jiǎn)單快速:瀏覽器向服務(wù)器發(fā)送請(qǐng)求時(shí),只需發(fā)送請(qǐng)求方式和路徑,HTTP服務(wù)器的程序規(guī)模小,通信速度較快。②靈活:HTTP允許傳輸任意類(lèi)型的數(shù)據(jù),包括文本、圖像、音頻、視頻等。③無(wú)連接:限制每次連接只處理一個(gè)請(qǐng)求,節(jié)省傳輸時(shí)間。④無(wú)狀態(tài):服務(wù)器只根據(jù)請(qǐng)求處理,不保存瀏覽器的狀態(tài)信息,可以減少服務(wù)器端的資源占用。4.2.1HTTP概述
先定一個(gè)小目標(biāo)!了解HTTP請(qǐng)求,能夠說(shuō)出請(qǐng)求數(shù)據(jù)的組成。4.2.2HTTP請(qǐng)求用戶(hù)通過(guò)瀏覽器訪問(wèn)某個(gè)URL地址,瀏覽器會(huì)向服務(wù)器發(fā)送請(qǐng)求數(shù)據(jù)。請(qǐng)求數(shù)據(jù)的組成:4.2.2HTTP請(qǐng)求請(qǐng)求行請(qǐng)求數(shù)據(jù)的第一行,包含請(qǐng)求方式、請(qǐng)求資源路徑和HTTP版本。請(qǐng)求頭向服務(wù)器傳遞附加消息,如瀏覽器可以接收的數(shù)據(jù)類(lèi)型、壓縮方法、語(yǔ)言和系統(tǒng)環(huán)境。請(qǐng)求體通過(guò)POST方式提交表單,用戶(hù)數(shù)據(jù)在請(qǐng)求體中發(fā)送。數(shù)據(jù)格式是name=value,多個(gè)數(shù)據(jù)使用&連接??招杏糜诜指粽?qǐng)求頭和請(qǐng)求體。HTTP請(qǐng)求方式:4.2.2HTTP請(qǐng)求請(qǐng)求方式說(shuō)明HEAD用于獲取指定資源的響應(yīng)頭信息而不獲取實(shí)際內(nèi)容GET用于從服務(wù)器獲取資源POST用于向服務(wù)器提交數(shù)據(jù)PUT用于向服務(wù)器更新或創(chuàng)建資源DELETE用于請(qǐng)求服務(wù)器刪除指定的資源OPTIONS用于查詢(xún)服務(wù)器支持的請(qǐng)求方式
先定一個(gè)小目標(biāo)!了解查看請(qǐng)求數(shù)據(jù),能夠說(shuō)出常見(jiàn)的請(qǐng)求頭字段含義。4.2.3查看請(qǐng)求數(shù)據(jù)以百度網(wǎng)站為例,查看請(qǐng)求數(shù)據(jù):4.2.3查看請(qǐng)求數(shù)據(jù)常見(jiàn)的請(qǐng)求頭字段和說(shuō)明:請(qǐng)求頭字段說(shuō)明Accept瀏覽器支持的數(shù)據(jù)類(lèi)型Accept-Charset瀏覽器采用的字符集Accept-Encoding瀏覽器支持的內(nèi)容編碼方式,通常使用數(shù)據(jù)壓縮算法Accept-Language瀏覽器所支持的語(yǔ)言,可以指定多個(gè)Host瀏覽器想要訪問(wèn)的服務(wù)器主機(jī)If-Modified-Since瀏覽器對(duì)資源的最后緩存時(shí)間Referer瀏覽器指向的Web頁(yè)的URLUser-Agent瀏覽器的系統(tǒng)信息,包括使用的操作系統(tǒng)、瀏覽器版本號(hào)等Cookie服務(wù)器使用Set-Cookie發(fā)送cookie信息Cache-Control瀏覽器的緩存控制Connection請(qǐng)求完成后,希望瀏覽器是保持連接還是關(guān)閉連接4.2.3查看請(qǐng)求數(shù)據(jù)
先定一個(gè)小目標(biāo)!了解HTTP響應(yīng),能夠說(shuō)出響應(yīng)數(shù)據(jù)的組成。4.2.4HTTP響應(yīng)服務(wù)器接收到請(qǐng)求數(shù)據(jù)后,將處理后的數(shù)據(jù)返回給瀏覽器,返回的數(shù)據(jù)被稱(chēng)為響應(yīng)數(shù)據(jù)。響應(yīng)數(shù)據(jù)的組成:響應(yīng)行響應(yīng)數(shù)據(jù)的第一行,告知瀏覽器本次響應(yīng)的狀態(tài)。響應(yīng)頭告知瀏覽器本次響應(yīng)的基本信息,包括服務(wù)程序名,內(nèi)容的編碼格式、緩存控制等。響應(yīng)體服務(wù)器返回給瀏覽器的實(shí)體內(nèi)容。空行用于分隔響應(yīng)頭和響應(yīng)體。4.2.4HTTP響應(yīng)以百度網(wǎng)站為例,查看響應(yīng)數(shù)據(jù):4.2.4HTTP響應(yīng)HTTP/1.1是協(xié)議版本200是響應(yīng)狀態(tài)碼OK是狀態(tài)的描述信息響應(yīng)狀態(tài)碼是服務(wù)器對(duì)瀏覽器請(qǐng)求處理結(jié)果和狀態(tài)的表示,它由3位十進(jìn)制數(shù)組成。根據(jù)響應(yīng)狀態(tài)碼最左邊的數(shù)字分類(lèi),共分為5個(gè)類(lèi)別,每個(gè)類(lèi)別的具體作用:1xx:成功接收請(qǐng)求,要求瀏覽器繼續(xù)提交下一次請(qǐng)求才能完成整個(gè)處理流程。2xx:成功接收請(qǐng)求并已完成整個(gè)處理流程。3xx:未完成請(qǐng)求,瀏覽器需要進(jìn)一步細(xì)化請(qǐng)求。4xx:瀏覽器的請(qǐng)求有錯(cuò)誤。5xx:服務(wù)器端出現(xiàn)錯(cuò)誤。4.2.4HTTP響應(yīng)常見(jiàn)的響應(yīng)狀態(tài)碼:狀態(tài)碼字段含義說(shuō)明200正常瀏覽器請(qǐng)求成功,響應(yīng)數(shù)據(jù)正常返回處理結(jié)果403禁止服務(wù)器理解瀏覽器的請(qǐng)求,但是拒絕處理,通常由服務(wù)器上文件或目錄的權(quán)限設(shè)置導(dǎo)致404找不到服務(wù)器中不存在瀏覽器請(qǐng)求的資源500服務(wù)器內(nèi)部錯(cuò)誤服務(wù)器內(nèi)部發(fā)生錯(cuò)誤,無(wú)法處理瀏覽器的請(qǐng)求4.2.4HTTP響應(yīng)常見(jiàn)的響應(yīng)頭字段和說(shuō)明:響應(yīng)頭字段說(shuō)明Server服務(wù)器的類(lèi)型和版本信息Date服務(wù)器的響應(yīng)時(shí)間Expires控制緩存的過(guò)期時(shí)間Location控制瀏覽器顯示哪個(gè)頁(yè)面Accept-Ranges服務(wù)器是否支持分段請(qǐng)求,支持則需給定請(qǐng)求范圍Cache-Control服務(wù)器控制瀏覽器如何進(jìn)行緩存Content-Disposition服務(wù)器控制瀏覽器以下載方式打開(kāi)文件4.2.4HTTP響應(yīng)1/2常見(jiàn)的響應(yīng)頭字段和說(shuō)明:響應(yīng)頭字段說(shuō)明Content-Encoding實(shí)體內(nèi)容的編碼格式Content-Length實(shí)體內(nèi)容的長(zhǎng)度Content-Language實(shí)體內(nèi)容的語(yǔ)言Content-Type實(shí)體內(nèi)容的類(lèi)型Last-Modified請(qǐng)求文檔的最后一次修改時(shí)間Transfer-Encoding文件傳輸編碼Set-Cookie發(fā)送Cookie相關(guān)的信息Connection是否需要持久連接4.2.4HTTP響應(yīng)2/2
先定一個(gè)小目標(biāo)!掌握設(shè)置響應(yīng)數(shù)據(jù)的方法,能夠在程序中設(shè)置響應(yīng)數(shù)據(jù)。4.2.5設(shè)置響應(yīng)數(shù)據(jù)響應(yīng)數(shù)據(jù)由服務(wù)器返回給瀏覽器,通常不需要人為干預(yù)。但有時(shí)開(kāi)發(fā)者會(huì)根據(jù)開(kāi)發(fā)需求,手動(dòng)更改響應(yīng)數(shù)據(jù),以實(shí)現(xiàn)某些特殊功能。在PHP中,通過(guò)header()函數(shù)設(shè)置響應(yīng)數(shù)據(jù)。示例代碼//設(shè)置響應(yīng)實(shí)體內(nèi)容類(lèi)型header('Content-Type:text/html;charset=UTF-8');//設(shè)置頁(yè)面重定向header('Location:login.php');4.2.5設(shè)置響應(yīng)數(shù)據(jù)服務(wù)器有多種響應(yīng)的實(shí)體內(nèi)容類(lèi)型。如果請(qǐng)求的是網(wǎng)頁(yè),響應(yīng)實(shí)體類(lèi)型就是HTML;如果請(qǐng)求的是圖片,響應(yīng)實(shí)體內(nèi)容類(lèi)型就是圖片;如果響應(yīng)體是文本,可以直接使用echo語(yǔ)句輸出。通過(guò)Content-Type字段設(shè)置響應(yīng)的實(shí)體內(nèi)容類(lèi)型。示例代碼//設(shè)定網(wǎng)頁(yè)的響應(yīng)實(shí)體內(nèi)容類(lèi)型header('Content-Type:text/html;charset=UTF-8');//設(shè)定圖片的響應(yīng)實(shí)體內(nèi)容類(lèi)型header('Content-Type:image/png');//設(shè)定文本的響應(yīng)實(shí)體內(nèi)容類(lèi)型header('Content-Type:text/plain');echo'Hello,World!'; //輸出響應(yīng)實(shí)體內(nèi)容4.2.5設(shè)置響應(yīng)數(shù)據(jù)在PHP中,使用http_response_code()函數(shù)可以設(shè)置HTTP響應(yīng)狀態(tài)碼,輸出響應(yīng)數(shù)據(jù)之前,將響應(yīng)狀態(tài)碼包含在響應(yīng)數(shù)據(jù)中。示例代碼http_response_code(200);//設(shè)置響應(yīng)狀態(tài)碼為200http_response_code(404);//設(shè)置響應(yīng)狀態(tài)碼為4044.2.5設(shè)置響應(yīng)數(shù)據(jù)多學(xué)一招:MIMEMIMEMIME是一個(gè)通用的內(nèi)容類(lèi)型表示方式,其寫(xiě)法為“大類(lèi)別/具體類(lèi)型”。常見(jiàn)的MIME類(lèi)型:類(lèi)型含義類(lèi)型含義text/plain普通文本(.txt)image/gifGIF圖像(.gif)text/xmlXML文檔(.xml)image/pngPNG圖像(.png)text/htmlHTML文檔(.html)image/jpegJPEG圖像(.jpg)表單傳值4.3
先定一個(gè)小目標(biāo)!熟悉表單傳值的方式,能夠說(shuō)出常用的傳值方式。4.3.1表單傳值方式表單是網(wǎng)頁(yè)上輸入信息的區(qū)域,用戶(hù)可以在表單中填寫(xiě)數(shù)據(jù)。在Web開(kāi)發(fā)中,經(jīng)常使用表單完成信息搜索、用戶(hù)登錄、用戶(hù)注冊(cè)等功能。4.3.1表單傳值方式表單的傳值方式有GET和POST兩種,可以通過(guò)<form>標(biāo)簽的method屬性來(lái)指定傳值方式。4.3.1表單傳值方式示例代碼<formaction="表單提交地址"method="POST"><!--表單內(nèi)容--></form>使用GET方式提交表單時(shí)的URL:http://localhost/index.php?id=1&type=2
先定一個(gè)小目標(biāo)!掌握超全局變量的使用,能夠使用這些變量接收表單數(shù)據(jù)。4.3.2接收表單數(shù)據(jù)使用PHP提供的超全局變量接收表單數(shù)據(jù),超全局變量:變量名說(shuō)明$GLOBALS用于訪問(wèn)全局作用域中的變量$_SERVER包含當(dāng)前腳本的請(qǐng)求信息和服務(wù)器環(huán)境變量$_SESSION包含當(dāng)前會(huì)話中存儲(chǔ)的數(shù)據(jù)$_COOKIE包含通過(guò)Cookie傳遞給當(dāng)前腳本的參數(shù)$_FILES包含通過(guò)HTTPPOST文件上傳方式傳遞給當(dāng)前腳本的文件信息$_GET接收GET方式提交的數(shù)據(jù)$_POST接收POST方式提交的數(shù)據(jù)$_REQUEST接收GET和POST方式提交的數(shù)據(jù)4.3.2接收表單數(shù)據(jù)使用超全局變量$_POST接收數(shù)據(jù):示例代碼<?phpvar_dump($_POST);?><formaction=""method="POST"><inputtype="text"name="name"value="Tom"><inputtype="submit"value="提交"></form>4.3.2接收表單數(shù)據(jù)輸出結(jié)果:array(1){["name"]=>string(3)"Tom"}
先定一個(gè)小目標(biāo)!掌握表單提交數(shù)組值的方法,能夠使用表單提交數(shù)組值。4.3.3表單提交數(shù)組值表單提交數(shù)組值:示例代碼<formaction="表單提交地址"method="POST"><inputtype="checkbox"name="hobby[]"value="basketball">籃球
<inputtype="checkbox"name="hobby[]"value="football">足球
<inputtype="checkbox"name="hobby[]"value="vollyball">排球
<inputtype="submit"value="提交"></form>選擇籃球和足球輸出結(jié)果:array(1){["hobby"]=>array(2){[0]=>string(10)"basketball"[1]=>string(8)"football"}}4.3.3表單提交數(shù)組值會(huì)話技術(shù)4.4
先定一個(gè)小目標(biāo)!了解Cookie的概念,能夠說(shuō)出Cookie在瀏覽器和服務(wù)器之間的傳輸過(guò)程。4.4.1Cookie簡(jiǎn)介Cookie是服務(wù)器為了辨別用戶(hù)身份而存儲(chǔ)在用戶(hù)本地終端上的數(shù)據(jù)。當(dāng)用戶(hù)第一次通過(guò)瀏覽器訪問(wèn)服務(wù)器時(shí),服務(wù)器會(huì)向?yàn)g覽器響應(yīng)一些信息,這些信息都被保存在Cookie中。當(dāng)用戶(hù)使用瀏覽器再次訪問(wèn)服務(wù)器時(shí),瀏覽器會(huì)將Cookie數(shù)據(jù)放在請(qǐng)求頭中發(fā)送給服務(wù)器。服務(wù)器根據(jù)請(qǐng)求頭中的Cookie數(shù)據(jù)判斷該用戶(hù)是否訪問(wèn)過(guò),進(jìn)而識(shí)別用戶(hù)的身份。4.4.1Cookie簡(jiǎn)介Cookie在瀏覽器和服務(wù)器之間的傳輸過(guò)程:4.4.1Cookie簡(jiǎn)介
先定一個(gè)小目標(biāo)!掌握Cookie的基本使用,能夠創(chuàng)建和獲取Cookie。4.4.2Cookie的基本使用方法1.創(chuàng)建Cookie使用setcookie()函數(shù)創(chuàng)建Cookie。4.4.2Cookie的基本使用方法語(yǔ)法格式boolsetcookie(string$name,//Cookie的名稱(chēng)(必須)
string$value='',//Cookie的值(可選)
int$expire=0,//Cookie的有效期(可選)
string$path='',//Cookie在服務(wù)器端的路徑(可選)
string$domain='',//Cookie的有效域名(可選)
bool$secure=false,//指定是否通過(guò)安全的HTTPS連接傳輸Cookie(可選)
bool$httponly=false//指定Cookie只能通過(guò)HTTP和HTTPS訪問(wèn)(可選))4.4.2Cookie的基本使用方法示例代碼<?phpsetcookie('name','value');1.在cookie.php文件中使用setcookie()函數(shù)創(chuàng)建Cookie2.訪問(wèn)cookie.php,查看設(shè)置Cookie后的響應(yīng)頭信息3.切換到“Cookies”標(biāo)簽頁(yè),查看保存的Cookie信息創(chuàng)建Cookie:2.獲取Cookie使用超全局變量$_COOKIE獲取Cookie。4.4.2Cookie的基本使用方法示例代碼var_dump($_COOKIE);//輸出結(jié)果:array(1){["name"]=>string(5)"value"}注意:第一次使用setcookie()函數(shù)創(chuàng)建Cookie時(shí),$_COOKIE中沒(méi)有Cookie數(shù)據(jù),只有瀏覽器下次請(qǐng)求并攜帶Cookie,才能通過(guò)$_COOKIE獲取到Cookie。多學(xué)一招:使用Cookie存儲(chǔ)多個(gè)值或數(shù)組使用Cookie存儲(chǔ)多個(gè)值或數(shù)組在Cookie名稱(chēng)后添加“[]”用于存儲(chǔ)多個(gè)值或數(shù)組:setcookie('user[name]','tom')
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 馬鞍山學(xué)院《學(xué)習(xí)筑夢(mèng)科技中國(guó)夢(mèng)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年三方借款協(xié)議書(shū)附借款合同履行監(jiān)督與報(bào)告義務(wù)3篇
- 2024年度雙方網(wǎng)絡(luò)安全合作協(xié)議書(shū)2篇
- 2024年度云計(jì)算環(huán)境下電子支付安全協(xié)議及技術(shù)優(yōu)化合同3篇
- 2025知識(shí)產(chǎn)權(quán)合同范本專(zhuān)賣(mài)店特許合同
- 2025年伊春道路貨物運(yùn)輸駕駛員考試
- 2024年度原材料采購(gòu)與回購(gòu)合同協(xié)議3篇
- 單位人力資源管理制度精彩匯編
- 2024年標(biāo)準(zhǔn)技術(shù)合作合同書(shū)樣本版B版
- 2025機(jī)場(chǎng)配電箱合同
- JGJT334-2014 建筑設(shè)備監(jiān)控系統(tǒng)工程技術(shù)規(guī)范
- 2024年網(wǎng)格員考試題庫(kù)1套
- 生命科學(xué)前沿技術(shù)智慧樹(shù)知到期末考試答案章節(jié)答案2024年蘇州大學(xué)
- 2023年小兒推拿保健師考試真題試卷(含答案)
- 高血壓護(hù)理常規(guī)課件
- 心臟介入手術(shù)談話技巧
- 海南省三亞市吉陽(yáng)區(qū)2022-2023學(xué)年六年級(jí)上學(xué)期期末數(shù)學(xué)試卷
- 辦公樓消防改造工程環(huán)境保護(hù)措施
- 2023-2024學(xué)年高一下學(xué)期家長(zhǎng)會(huì) 課件
- 溯源與解讀:學(xué)科實(shí)踐即學(xué)習(xí)方式變革的新方向
- 班克街教育方案
評(píng)論
0/150
提交評(píng)論