PHP動態網站開發PPT完整全套教學課件_第1頁
PHP動態網站開發PPT完整全套教學課件_第2頁
PHP動態網站開發PPT完整全套教學課件_第3頁
PHP動態網站開發PPT完整全套教學課件_第4頁
PHP動態網站開發PPT完整全套教學課件_第5頁
已閱讀5頁,還剩179頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

全套可編輯PPT課件《PHP動態網站開發》課件CONTENTS目錄項目1配置PHP開發環境01項目2PHP語言快速入門02項目3PHP面向對象編程03項目4PHP數據處理04項目5構建PHP交互網頁05項目6PHP文件處理06項目7PHP圖像處理07項目8MySQL數據庫管理08項目9通過PHP訪問MySQL09項目10開發新聞發布系統10項目1配置PHP開發環境項目目標了解phpStudy及其組成掌握phpStudy的安裝方法掌握配置Apache服務器的方法掌握配置MySQL服務器的方法掌握在DW中創建PHPMySQL站點的方法CONTENTS目錄任務1.1安裝phpStudy01任務1.2配置phpStudy02任務1.3創建PHPMySQL站點03任務1.1安裝phpStudy1.1.1PHP開發環境的組成1.Apache服務器Apache是Apache軟件基金會開發的開放源碼Web服務器。Apache是最流行的Web服務器軟件之一,占據了互聯網應用服務器70%以上的份額。它可跨平臺使用,幾乎運行在所有計算機平臺上;安全性好,功能強大,性能穩定,可免費使用。2.PHP語言PHP是一種通用開源腳本語言。PHP在語法上吸收了C、Java和Perl語言的特點,易于學習,廣泛應用于Web開發領域。PHP是將程序嵌入到HTML文檔中執行的,執行效率高。3.MySQL數據庫MySQL是一款最流行的關系型數據庫管理系統應用軟件,由瑞典MySQLAB公司開發,目前屬于Oracle旗下產品。4.數據庫管理工具phpMyAdminphpMyAdmin是一個用PHP編寫的MySQL數據庫管理工具,基于Web方式部署在網站服務器上。5.PHP代碼優化工具ZendOptimizerZendOptimizer(簡稱ZO)用優化代碼的方法來提高PHP應用程序的執行速度。任務1.2配置phpStudy1.2.1設置phpStudy運行模式1.設置phpStudy運行模式打開phpStudy控制面板;在“運行模式”下選擇“系統服務”或“非服務模式”;單擊“應用”按鈕。2.控制Apache和MySQL的運行狀態當Apache和MySQL都處于運行狀態時,通過單擊“停止”按鈕,可以停止Apache和MySQL的運行;通過單擊“重啟”按鈕,可以先停止而后再啟動Apache和MySQL的運行。當Apache和MySQL都處于停止狀態時,通過單擊“啟動”按鈕,可以使Apache和MySQL進入運行狀態。3.單獨控制某個服務器的運行或停止用鼠標右鍵單擊相應按鈕,然后在彈出菜單中選擇所需要的命令。例如,當Apache和MySQL都處于運行狀態時,如果要停止Apache的運行,可以用右鍵單擊“停止”按鈕,然后選擇“停止Apache”命令。任務1.2配置phpStudy1.2.2切換PHP版本(1)打開phpStudy控制面板。(2)單擊綠色文字“切換版本”,從彈出菜單中選擇所需要的PHP版本。每當選擇新的PHP版本時,phpStudy都會自動重啟。此時可以在phpStudy控制菜單中單擊“查看phpinfo”命令,然后在PHP服務器配置信息頁中查看當前的版本號。1.2.3站點域名管理(1)打開phpStudy控制面板。(2)用鼠標右鍵單擊任務欄通知區域的phpStudy圖標并選擇“站點域名管理”命令。(3)在如圖1.11所示的“站點域名設置”對話框中,輸入網站的域名、目錄和端口。(4)單擊“保存設置并生成配置文件”按鈕。保存成功后,將自動重啟程序,以使所做的設置生效。(5)如果要刪除站點,可以用鼠標右鍵單擊該站點并選擇“刪除站點”命令。(6)如果要導入導出站點信息,可以用鼠標右鍵單擊站點列表并選擇“導出全部站點”或“導入站點”命令。任務1.2配置phpStudy1.2.4創建虛擬目錄通過站點發布信息時,通常應將相關文件保存在站點主目錄中。如果希望在主目錄之外的其他位置保存文件,則應在站點中創建虛擬目錄。創建虛擬目錄的方法:打開Apache配置文件httpd.conf,然后添加一條Alias指令。Alias指令用于映射指向文件系統某個物理目錄的URL,也就是在Apache網站中創建一個虛擬目錄。語法格式如下:AliasURL-pathfile-path|directory-path其中參數URL-path表示虛擬路徑,參數file-path或directory-path表示本地文件系統中的物理路徑。舉例Alias/demo/"D:/phpdocs/"<Directory"D:/phpdocs/">Orderallow,denyAllowfromall</Directory>任務1.2配置phpStudy1.2.5配置MySQL服務器配置MySQL服務器:(1)打開phpStudy控制面板。(2)用鼠標右鍵單擊任務欄通知區域中的phpStudy圖標,然后選擇“MySQL工具”>“設置或修改密碼”命令。(3)在“phpStudy設置”對話框中,設置端口、最大連接數以及字符集并選擇數據庫引擎,然后單擊“應用”按鈕。這些設置將保存到MySQL配置文件my.ini中。(4)要修改root用戶訪問MySQL服務器的登錄密碼,可以輸入原密碼和新密碼,然后單擊“修改”按鈕。假如忘記了MySQL服務器登錄密碼,則可以在phpStudy控制菜單中選擇“MySQL工具>重置密碼(忘記時)”,然后輸入新的密碼。驗證MySQL服務器登錄密碼使用MySQL命令行工具運行phpMyAdmin管理工具運行MySQL可視化管理工具MySQL-Font任務1.3創建PHPMySQL站點1.3.1創建PHPMySQL站點(1)啟動DW,選擇“站點”>“新建站點”命令。(2)設置站點名稱和站點本地文件夾(應為站點主目錄)。(3)在站點設置對話框中選擇“服務器”類別,然后單擊加號按鈕,添加新服務器。(4)在服務器設置對話框中選擇“基本”選項卡,設置服務器名稱(如PHP)、連接方法(如“本地/網絡”)、服務器文件夾(應為站點主目錄或虛擬目錄)以及WebURL。(5)在服務器設置對話框中選擇“高級”選項卡,從“服務器模型”列表中選擇“PHPMySQL”,然后單擊“保存”按鈕。(6)返回站點設置對話框,選中站點列表中的“測試”復選框。(7)單擊“保存”按鈕。任務1.3創建PHPMySQL站點1.3.2創建PHP動態網頁1.設置首選參數在創建PHP動態網頁之前,還需要對DW程序的相關首選參數進行設置。為此,可從“編輯”菜單中選擇“首選參數”命令,然后在“首選參數”對話框中選擇“新建文檔”類別,設置默認文檔為“PHP”,默認文檔類型為“HTML5”,默認編碼為“簡體中文(GB2312)”,單擊“確定”按鈕。2.新建文件夾如果要在站點中創建文件夾,可以用鼠標右鍵單擊站點根目錄或其他目錄,然后從彈出菜單中選擇“新建文件夾”命令,并對文件夾名稱進行設置。3.新建文件如果要在站點中創建PHP動態網頁,可以用鼠標右鍵單擊目標文件夾,然后從彈出菜單中選擇“新建文件”命令,并對新文件進行命名。默認情況下,文件擴展名為“.php”。雙擊該文件名,即可在DW文檔窗口中打開該文件,然后在代碼視圖或設計視圖中編輯文檔,也可以在實時視圖中查看PHP動態網頁的運行結果。如果要在瀏覽器中查看PHP動態網頁的運行結果,按F12鍵即可。要創建HTML靜態網頁,將文件擴展名改為“.html”即可。項目2PHP語言快速入門項目目標了解PHP基本知識掌握PHP數據類型的用法掌握常量與變量的用法掌握運算符與表達式的用法掌握流程控制語句的用法掌握函數的用法CONTENTS目錄任務2.1了解PHP基本知識01任務2.2使用PHP數據類型02任務2.3使用變量與常量03任務2.4使用運算符與表達式04任務2.5使用流程控制語句05任務2.6使用函數06任務2.1了解PHP基本知識2.1.1PHP動態網頁的組成(1)HTML標簽。PHP文件中可以包含各種標準的HTML標簽,通過這些HTML標簽可以構建HTML文檔結構并添加各種內容。(2)CSS樣式表。在PHP文件中可以包含CSS樣式定義,用于設置網頁的外觀。既可以在文檔首部通過<style>...</style>嵌入CSS樣式定義,也可以通過<link>標記鏈接外部CSS樣式表文件,此外還可以在HTML標簽中通過style屬性設置CSS樣式。(3)客戶端腳本。一般情況下可以在文檔首部通過<script>...</script>標簽來添加基于JavaScript腳本語言的客戶端腳本程序,用于執行表單數據檢查等操作。(4)PHP定界符。用于區分PHP代碼與其他內容。(5)PHP代碼。符合PHP語法的各種語句,這些語句運行于服務器端,用來執行各種各樣的操作,例如收集表單數據、發送/接收Cookies以及訪問數據庫等。任務2.1了解PHP基本知識2.1.2創建PHP代碼塊PHP定界符的4種形式(1)<?php...?>:這是PHP定界符的標準形式,建議讀者使用這種形式。在Dreamweaver中,可以利用插入面板快速插入PHP定界符,如圖2.1所示。(2)<?...?>:這是<?php...?>定界符的簡寫形式。若要在文檔中使用這種類型的定界符,必須在配置文件php.ini中設置short_open_tag=On,然后重啟Apache服務器。(3)<%...%>:這是ASP語言的定界符。若要在PHP文件中使用這種形式的定界符,必須在配置文件php.ini中設置asp_tags=On,然后重啟Apache服務器。(4)<scriptlanguage="php">...</script>:這是一個HTML標簽,其作用是指定由PHP語言引擎來解釋<script>與</script>標記之間的腳本。在PHP代碼中,每個語句以分號結束;所有用戶自定義函數、類和關鍵詞(例如if、else、echo等)都對大小寫不敏感。在PHP代碼中,變量名均以$符號開頭,而且所有變量都對大小寫敏感。例如,$username、$UserName和$USERNAME分別表示不同的變量。任務2.1了解PHP基本知識2.1.3編寫PHP注釋(1)C++風格的單行注釋“//”//這是一行注釋文字(2)UNIXShell風格的單行注釋“#”

#這是另一行注釋文字(3)C風格的多行注釋“/*…*/”/*這是一行注釋文字這是另一行注釋文字*/任務2.1了解PHP基本知識2.1.4PHP與HTML混合編寫PHP語句在語法上是完全獨立的單元,但也可以使一個語句跨越兩個PHP代碼塊,并在這兩個代碼塊之間包含HTML代碼或其他非PHP代碼,此時PHP將直接輸出上一個結束標記與下一個開始標記之間的任何非PHP代碼。當需要輸出大量HTML內容時,退出PHP解析模式比使用echo()、print()或此類函數輸出這些內容更為有效。2.1.5PHP與JavaScript協同工作PHP動態網頁中可以同時包含PHP服務器端腳本和JavaScript客戶端腳本,而且這兩種腳本可以協同工作。當訪問者通過客戶端瀏覽器發出對某個PHP動態網頁的請求后,由PHP在運行中按照HTML的語法格式動態生成頁面,并由服務器將整個頁面的數據發送給客戶端瀏覽器,該頁面中可能包含<script>標簽,由此動態生成由瀏覽器執行的客戶端JavaScript腳本。使用PHP生成或操作客戶端腳本,可以增強其有效性。例如,可以編寫服務器端腳本,根據服務器特有的變量、用戶瀏覽器類型或HTTP請求參數對客戶端腳本加以組合。通過將PHP服務器端腳本語句包含在JavaScript客戶端腳本中,可以在請求時動態初始化和更改客戶端腳本。任務2.2使用PHP數據類型2.2.1使用整型數整型數是集合Z={...,?2,?1,0,1,2,...}中的一個數。整型數包括正整數、負整數和零。一個整型數可以用10進制,16進制或8進制符號表示,前面可以加上可選的符號(?或+)。若用8進制,則必須在數字前加上前綴0;若用16進制,則必須在數字前加上前綴0x。2.2.2使用浮點數浮點數也稱為雙精度數或實數,其取值范圍和精度遠遠大于整型數。在32位操作系統中,浮點數的取值范圍為1.7E-308~1.7E+308(即1.7×10–308~1.7×10308)。浮點數可以用小數形式或科學計數法表示,在科學計數法中用E或e表示以10為底的冪。任務2.2使用PHP數據類型2.2.3使用字符串1.用單引號定義字符串用單引號(')括起字符串是表示一個字符串的最簡單方法。在用單引號定義的字符串中,如果要表示一個單引號,需要用反斜線(\)進行轉義,即表示為“\'”;如果要在單引號之前或字符串結尾需要出現一個反斜線,則需要用兩個反斜線(\\)表示。如果試圖轉義任何其他字符,反斜線本身也會被顯示出來。與下面的兩種語法有所不同,在單引號字符串中出現的變量名不會被變量值替代,轉義序列也不會被解釋。2.用雙引號定義字符串如果用雙引號(")括起字符串,則會使PHP處理更多特殊字符的轉義序列。如果試圖轉義任何其他字符,反斜線本身也會被顯示出來。在用雙引號定義的字符串中,變量名會被變量值替代,有時使用花括號將變量名括起來,以便于變量解析。3.用定界符定義字符串在處理長字符串時,也可以使用定界符語法(“<<<”)來定義字符串,即在“<<<”之后提供一個標識符,接著是字符串的內容,然后用同樣的標識符來結束字符串。語法如下:<<<標識符字符串內容標識符任務2.2使用PHP數據類型2.2.4使用布爾型布爾型用于表示真值,其取值可以是true或false。布爾值通常用于控制程序的執行流程。如果要定義一個布爾值,可以使用關鍵字true或false,這兩個關鍵字是不區分大小寫的,因此也可以使用True和False,或者使用TRUE和FALSE。2.2.5使用特殊類型1.資源資源是一種特殊變量,保存了對外部資源的一個引用。資源是通過專門的函數來建立和使用的。由于資源類型變量保存為打開文件、數據庫連接、圖形畫布區域等的特殊句柄,因此無法將其他類型的值轉換為資源。2.NULL特殊的NULL值表示一個變量沒有值。NULL類型只有一個值,就是大小寫敏感的關鍵字NULL。在下列情況下,一個變量被認為是NULL:被賦值為NULL;尚未被賦值;通過調用函數unset()而被銷毀。任務2.2使用PHP數據類型2.2.6數據類型轉換1.強制類型轉換在PHP語言中,要將一個值轉換為其他數據類型,可以在該值前面添加一個目的類型關鍵字并通過圓括號將該關鍵字括起來,語法如下:(type)value2.整型轉換如果要顯式示地將一個值轉換為整型,則可以使用(int)或(integer)進行強制轉換,還可以通過函數intval將一個值轉換成整型。3.字符串轉換在PHP中,可以用(string)標記或者strval函數將一個值轉換為字符串。當某個表達式需要字符串時,字符串的轉換會在表達式范圍內自動完成。4.布爾轉換如果要將一個值轉換成布爾值,可以用(bool)或(boolean)來強制轉換。不過,在很多情況下不需要用強制轉換,因為當運算符、函數或者流程控制需要一個布爾型參數時,該值會被自動轉換。5.測試數據類型在PHP語言中,可以使用gettype()函數來測試一個值的數據類型。任務2.3使用變量與常量2.3.1定義變量在PHP語言中規定,變量用一個美元符號($)后面跟變量名來表示,而且變量名是區分大小寫的。變量名與其他標識符一樣都遵循相同的命名規則:一個有效的變量名由字母或下畫線開頭,后面可以跟上任意數量的字母、數字或下畫線。命名變量通常與變量賦值操作一起進行。在PHP中,可以在同一個變量中存儲不同類型的數據。例如,可能首先把一個整型數存儲在某個變量中,然后又把一個字符串存儲到該變量中。在實際應用中,要了解變量值所屬的數據類型可以通過調用下列PHP函數來實現。(1)使用is_xxx()函數可以檢查變量或對象是否屬于某種數據類型,如果是則返回true,否則返回false。(2)使用gettype()函數測試一個變量的數據類型。(3)使用var_dump()函數顯示變量的相關信息。(4)使用print_r()函數顯示關于變量的易于理解的信息。任務2.3使用變量與常量2.3.2檢查變量是否被設置為了保證PHP代碼的安全運行,使用變量之前最好檢查一下該變量是否已被定義。(1)empty()函數。用于檢查一個變量是否為空,語法如下:boolempty(mixed$var)如果參數var是非空或非零的值,則empty()函數返回false。空字符串("")、0、"0"、NULL、false、array()、var$var;以及沒有任何屬性的對象都將被認為是空的。如果參數var為空,則empty()函數返回true。(2)isset()函數。用于檢測變量是否被設置,語法如下:boolisset(mixed$var[,mixed$var[,$...]])如果參數var存在則返回true,否則返回false。isset()函數只能用于變量,傳遞任何其他參數都將造成解析錯誤。如果使用isset()函數測試一個被設置成NULL的變量,將返回false。同時要注意,一個NULL字節("\0")并不等同于PHP的NULL常數。任務2.3使用變量與常量2.3.3可變變量與變量引用1.可變變量如果要動態地創建一個變量名,則可以使用“可變變量”語法來實現,即在其值要作為變量名使用的變量前面加一個美元符號$。如果在一個變量名前面放兩個美元符號$,則PHP將取右面變量的值作為變量名。例如:<?php$x="str";$$x="demo"; //$$x等效于$strecho"$x$str"; //輸出結果為“strdemo”?>2.變量引用在PHP中,通過變量引用可以使不同變量指向同一個內容。如果要引用一個變量,則可以在該變量名前面加一個&符號。例如:<?php$a=1;$b=2;$a=&$b;

//使$a和$b指向同一個變量$a=3;

//改變$a時$b隨之而變echo"$a$b"; //輸出結果為“33”?>任務2.3使用變量與常量2.3.4使用常量1.自定義常量在PHP語言中,可以用define()函數來定義常量。語法如下:booldefine(string$name,mixed$value[,bool$case_insensitive=false])2.預定義常量__LINE__:返回文件中的當前行號。__FILE__:返回文件的完整路徑和文件名。如果用在包含文件中,則返回包含文件名。__DIR__:文件所在的目錄。__FUNCTION__:返回函數名稱。__CLASS__:返回類的名稱。自PHP5起該常量返回該類被定義時的名稱(區分大小寫)。__METHOD__:返回該方法被定義時的名稱(區分大小寫)。__NAMESPACE__:當前命名空間的名稱(大小寫敏感)。PHP_VERSION:返回PHP的版本號。PHP_OS:返回執行PHP解析器的操作系統名稱。任務2.4使用運算符與表達式2.4.1使用算術運算符算術運算符包括加號(+)、減號(-)、乘號(*)、除號(/)和取模運算符(%),分別用于執行加、減、乘、除以及求余數運算。其中“-”除了作為減號使用外,也可以作為一元運算符(負號)使用,即對一個數取相反數;除號(“/”)總是返回浮點數,即使兩個運算數是整數或由字符串轉換成的整數也是如此。當被除數$a為負值時,取模$a%$b的結果也是負值。2.4.2使用賦值運算符基本的賦值運算符是“=”,其作用是把右邊表達式的值賦給左邊的運算數。還可以將其他運算符與賦值運算符組合起來構成復合賦值運算符。2.4.3使用遞增/遞減運算符++$x(前加) 首先在$x的值上加1,然后返回$x$x++(后加) 首先返回$x,然后在$x的值上加1??$x(前減) 首先在$x的值上減1,然后返回$x$x??(后減) 首先返回$x,然后將$x的值減1任務2.4使用運算符與表達式2.4.4使用字符串運算符在PHP中有兩個字符串運算符:一個是連接運算符(“.”),它返回兩個操作數連接后的字符串;另一個是連接賦值運算符(“.=”),它將右邊操作數附加到左邊的操作數之后。2.4.5使用位運算符位運算符允許對整型數中指定的位進行置位,即對二進制位從低位到高位對齊后進行運算。執行位運算時會將操作數轉換為二進制整數,然后按位進行相應的運算,運算的結果以十進制整數表示。如果兩個運算數都是字符串,則位運算符將對字符的ASCII值進行操作。PHP位運算符&(按位與) $x&$y 把$x和$y中都為1的位設置為1|(按位或) $x|$y 把$x或$y中為1的位設置為1^(按位異或) $x^$y 把$x和$y中不同的位設置為1~(按位取反) ~$x(單目運算符) 把$x中為0的位設置為1,為1的位設置為0<<(向左移位)$x<<$y 把$x中的位向左移動$y次(每一次移動都表示“乘以2”)<<(向右移位)$x>>$y 把$x中的位向右移動$y次(每一次移動都表示“除以2”)任務2.4使用運算符與表達式2.4.6使用比較運算符==(等于) $x==$y 若$x等于$y,則為true;否則為false===(全等) $x===$y 若$x等于$y且兩者類型相同,則為true;否則為false!=(不等于) $x!=$y 若$x不等于$y,則為true;否則為false<>(不等于) $x<>$y 若$x不等于$y,則為true;否則為false!==(非全等) $x!==$y 若$x不等于$y或兩者類型不同,則為true;否則為false<(小于) $x<$y 若$x小于$y,則為true;否則為false>(大于) $x>$y 若$x大于$y,則為true;否則為false<=(小于或等于) $x<=$y 若$x小于或等于$y,則為true;否則為false>=(大于或等于) $x>=$y 若$x大于或等于$y,則為true;否則為false2.4.7使用條件運算符(expr1)?(expr2):(expr3)條件表達式(expr1)?(expr2):(expr3)的值按照以下規則計算:當表達式expr1的值為true時,條件表達式的值為expr2;在expr1求值為false時,條件表達式的值為expr3。條件運算符用于快速構造條件語句,可以視為if...else語句的簡寫形式。任務2.4使用運算符與表達式2.4.8使用邏輯運算符and(邏輯與) $xand$y 若$x和$y均為true,則為trueor(邏輯或) $xor$y 若$x或$y任一為true,則為truexor(邏輯異或) $xxor$y 若$x或$y任一為true但不同時為true,則為true!(邏輯非) !$x 若$x為true,則為false&&(邏輯與) $x&&$y 若$x和$y均為true,則為true||(邏輯或) $x||$y 若$x或$y任一為true,則為true2.4.9使用表達式表達式是PHP語言的重要基礎之一。通過在表達式后面添加一個分號(;)將構成一個語句。最基本的表達式形式是常量和變量,稍微復雜的表達式是函數。在PHP中,表達式可以說是無處不在的。除了常見的算術表達式之外,還有各種各樣的其他表達式。任務2.4使用運算符與表達式4.4.10運算符優先級一個表達式中包含多種運算符時,運算符的優先級決定計算的先后順序,運算符的結合方向也對表達式的計算有影響,此外還可以使用圓括號來提高某些優先級低的運算符。任務2.5使用流程控制語句2.5.1使用選擇語句1.使用if語句if(expr)statements使用else來擴展if語句:if(expr)statementselseelsestatements使用elseif來擴展if語句:if(expr1)statementselseif(expr2)elseifstatementselseelsestatements2.使用switch語句switch(expr){caseexpr1:statements1break;caseexpr2:statements2break;...default:defaultstatementsbreak;}任務2.5使用流程控制語句2.5.2使用循環語句1.使用while語句while(expr)statements2.使用do-while語句do{statements}while(expr);3.使用for語句for(expr1;expr2;expr3)

statements任務2.5使用流程控制語句2.5.3使用跳轉語句1.使用break語句break語句結束當前for、foreach、while、do-while或switch語句的執行,在該語句可以添加一個可選的數字參數,以決定跳出幾重循環。2.使用continue語句continue語句用在各種循環結構中,用來跳過本次循環中剩余的代碼并在條件求值為真時開始執行下一次循環。continue也可以用在switch語句中。在continue語句中,可以使用一個可選的數字參數,以決定跳過幾重循環到循環結尾。任務2.5使用流程控制語句2.5.4包含文件語句1.include語句includefilepath;include(filepath);2.include_once語句include_once語句用于在腳本執行期間包含并運行指定文件,其功能與include語句類似,唯一的區別在于:如果該文件中的代碼已經被包含了,則不會再次包含。3.require語句requirefilename;require(filename);require語句與include語句功能類似,唯一的區別在于:如果找不到文件,則include語句產生一個警告,而require語句則導致一個致命錯誤。如果想在丟失文件時停止處理頁面,則應該使用require語句。4.require_once語句require_once語句用于在腳本執行期間包含并運行指定文件,其功能與require語句類似,所不同的是,如果該文件中的代碼已經被包含了,則不會再次包含。任務2.6使用函數2.6.1了解PHP內部函數影響PHP行為的擴展

數學擴展

音頻格式操作

非文本內容的MIME輸出

身份認證服務

進程控制擴展

日歷和事件相關擴展

其他基本擴展

命令行特有的擴展

其他服務

壓縮與歸檔擴展

搜索引擎擴展

信用卡處理

面向服務器的擴展

加密擴展

Session擴展

數據庫擴展

文本處理

文件系統相關擴展

變量和類型有關的擴展國際化與字符編碼支持

Web服務

圖像生成和處理 Windows平臺下的擴展

郵件相關擴展 XML操作1.檢查函數是否存在:

boolfunction_exists(string$function_name)2.檢查模塊中包含的函數:

arrayget_extension_funcs(string$module_name)3.檢查所有已定義函數:

arrayget_defined_functions(void)任務2.6使用函數2.6.2使用自定義函數在PHP語言中,通過關鍵字function來定義函數,語法如下:functionfunction_name($arg1,$arg2,...$argN){statementsreturnexpr;}其中function_name是要創建函數的名稱。命名函數時應遵循與變量命名相同的規則,但函數名不能以美元符號($)開頭。函數名不區分大小寫,不過在調用函數的時候,通常使用其在定義時相同的形式。$arg1~$argN是函數的參數,通過這些參數可向函數傳遞信息。一個函數可以有多個參數,它們之間用逗號分隔。不過,函數的參數是可選的,也可以不為函數指定參數。參數可以是各種數據類型,例如整型、浮點型、字符串以及數組等。statements表示在函數中執行的一組語句,稱為函數體。任何有效的PHP代碼都有可以在函數內部使用,甚至包括其他函數和類的定義。return語句用于立即結束此函數的執行并將它的參數作為函數的值返回,也用于終止腳本文件的執行。任何類型都可以返回,其中包括列表和對象。這導致函數立即結束它的運行,并且將控制權傳遞回它被調用的行。return()是語言結構而不是函數,僅在參數包含表達式時才需要用括號將其括起來。任務2.6使用函數2.6.3傳遞函數的參數1.通過引用傳遞參數在默認情況下,函數參數通過值傳遞,這意味著即使在函數內部改變參數的值,也不會改變函數外部的值。如果希望函數的一個參數通過引用傳遞,則可以在函數定義中該參數的前面預先加上引用符號“&”。2.設置參數的默認值定義函數時,還可以為函數的參數設置默認值。默認值既可以是標量類型,也可以是數組和特殊類型,例如數組和NULL。但默認值必須是常量表達式,而不能是變量、類成員或函數調用。當使用默認參數時,任何默認參數必須放在任何非默認參數的右側;否則函數可能不會按照預期的情況工作。3.使用可變長度參數列表在用戶自定義函數中可使用可變長度參數列表。定義可變長度參數列表時,可用下列函數獲取參數的信息。(1)使用func_num_args()函數返回傳遞給函數的參數數目,語法如下:intfunc_num_args(void)(2)使用func_get_arg()函數從參數列表中獲取一個參數,語法如下:mixedfunc_get_arg(int$arg_num)(3)使用func_get_args()函數返回一個由函數參數列表組成的數組,語法如下:arrayfunc_get_args(void)任務2.6使用函數2.6.4設置函數的返回值函數的返回值通過使用可選的return語句返回。返回值可以是任何類型,其中包括列表和對象。執行return語句時,函數立即結束運行并將控制權傳遞回它被調用的行。如果在一個函數中調用return語句,將立即結束此函數的執行,并將return語句的參數作為函數的值返回給調用代碼。2.6.5使用變量作用域變量作用域即變量定義的上下文背景,也就是變量的生效范圍。(1)變量的作用域與包含文件。大多數PHP變量不僅在當前PHP文件中生效,其作用域也將包含include和require引入的文件。(2)局部變量。在用戶自定義函數中,將引入一個局部函數范圍。在默認情況下,任何用于函數內部的變量將被限制在局部函數范圍內,這種變量稱為局部變量。(3)全局變量。在任何函數外部定義的變量是全局變量。若要在函數內部使用全局變量,可以先用global關鍵字來聲明全局變量,然后對全局變量進行訪問。(4)使用靜態變量。靜態變量使用關鍵字來static來聲明,它僅在局部函數域中存在,但當程序執行離開此作用域時,其值并不丟失。任務2.6使用函數2.6.6使用可變函數PHP語言支持可變函數的概念。這意味著如果一個變量名后有圓括號,PHP將尋找與變量的值同名的函數,并且嘗試執行它。可變函數也稱為變量函數,它可以用來實現包括回調函數、函數表在內的一些用途。可變函數不能用于語言結構,例如echo()、print()、unset()、isset(),empty()、include()、require()以及類似的語句。2.6.7使用匿名函數匿名函數也稱為閉包函數,它允許臨時創建一個沒有指定名稱的函數。匿名函數經常用作回調函數的參數。當然,也有其他應用的情況。匿名函數僅在PHP5.3.0及以上版本有效。匿名函數也可以作為變量的值來使用。PHP會自動將表達式轉換成內置類Closure的對象實例。將一個Closure對象賦值給一個變量的方式與普通變量賦值的語法是一樣的,最后也要加上分號。項目3PHP面向對象編程項目目標掌握類與對象的用法掌握實現繼承與多態的方法CONTENTS目錄任務3.1使用類和對象01任務3.2實現繼承與多態02任務3.1使用類和對象3.1.1創建類和對象1.使用關鍵字class來聲明一個類:classclass_name{//在此處定義類的屬性和方法}其中class_name表示類名,可以是任何非PHP保留字的名字;在花括號之間包含類的成員定義,類的成員主要包括屬性、方法和常量。不能將一個類定義分隔到多個文件或PHP代碼塊中。類是對象的模板,通過類的實例化可以創建對象,對象占用一定的存儲空間。被創建的對象稱為類的一個實例。2.使用new運算符創建對象:$instance=newclass_name();其中new表示申請空間操作符,class_name表示類名。上述賦值語句創建類的一個對象實例,并將該對象的一個引用賦給變量instance。3.訪問對象的屬性和方法:$instance->property$instance->method()其中instance為對象變量,指向用new運算符創建的對象;“->”為對象成員訪問符號,用在對象與其成員之間;property表示對象的屬性,method表示對象的方法(可能包含參數)。任務3.1使用類和對象3.1.2為類添加成員1.為類添加屬性classclass_name{public|protected|private$property_name[=initializer];}2.為類添加方法classclass_name{[public|protected|private]functionmethod_name([mixed$args[,$...]]){//在此處編寫方法體代碼

}}3.為類添加常量constconstant_name=value;任務3.1使用類和對象3.1.3為類添加構造方法和析構方法構造方法和析構方法是類中的兩個特殊方法成員。前者在每次創建對象時自動調用,后者在某個對象的所有引用都被刪除或者當對象被顯式銷毀時執行。1.為類添加構造方法void__construct([mixed$args[,$...]]){//在此處編寫方法體的代碼}2.為類添加析構方法void__destruct(void){//在此處編寫方法體的代碼}使用語言結構unset來銷毀給定的變量:voidunset(mixed$var[,mixed$var[,$...]])任務3.1使用類和對象3.1.4為類添加靜態成員使用static關鍵字可以將類的屬性或方法聲明為靜態的,這樣,無需對類進行實例化即可訪問這些屬性或方法。一個聲明為靜態的屬性不能由類的實例化對象來訪問,但可以由對象通過“->”操作符來訪問靜態方法。靜態屬性和靜態方法不能在派生類中重新定義。聲明靜態成員時,static關鍵字必須放在訪問修飾符之后。為了與PHP4保持兼容,如果未指定訪問修飾符,則類的屬性和方法默認為public。由于靜態方法不需要通過對象即可調用,所以偽變量$this在靜態方法中不可用。靜態屬性不可以由對象通過->操作符來訪問。如果要在靜態方法內部訪問靜態屬性,則可以使用以下語法來實現:self::$property其中::(一對半角冒號)是范圍解析操作符,可以在未聲明任何實例的情況下訪問類中的函數或者基類中的屬性或方法。關鍵字self指向當前類,用于在類的內部對成員或方法進行訪問。在類定義的外部,可以通過以下語法來訪問類的靜態屬性或靜態方法:class_name::$propertyclass_name::method()任務3.1使用類和對象3.1.5自動加載對象在應用開發中,通常要對每個類的定義建立一個PHP源文件。這樣一來,就不得不在每個腳本開頭編寫一個長長的包含文件列表,以包含所需的類文件。在PHP5中,可以定義一個__autoload函數,它會在試圖使用尚未被定義的類時自動調用。這個函數被稱為魔術函數,通過調用它,腳本引擎在PHP出錯失敗前有了最后一個機會來加載所需的類。__autoload函數嘗試加載未定義的類,語法如下:void__autoload(string$class_name)其中class_name表示待加載的類名。通過定義__autoload函數可以啟用類的自動加載。這個函數沒有返回值。任務3.1使用類和對象3.1.6迭代對象PHP5提供了一種迭代對象的功能,就像使用數組那樣,可以通過foreach循環語句來遍歷對象中的屬性。語法如下:foreach($objas$key=>$value){//每次循環中對象的屬性名和屬性值

//分別被賦給變量$key和$value}如果在類方法中內部進行迭代,則可以使用偽變量$this來指向當前對象,此時將得到所有屬性的值;如果在類外部對對象進行迭代,則只能得到外部可見的那些屬性的值。任務3.1使用類和對象3.1.7克隆對象在PHP中,對象賦值總是通過引用形式實現的。當把一個對象已經創建的實例賦給一個新變量時,通過新變量可以訪問同一對象實例。當通過新變量更改對象的屬性值時,原變量所引用向對象的屬性值隨之發生變化。若要生成對象的一個副本,則應以克隆方式來實現。語法如下:$copy_of_object=clone$object;此時,變量copy_of_object引用的對象將獨立于變量object引用的對象。對象克隆是PHP5的新特性之一。克隆對象時將調用對象正本的__clone()方法,而對象的__clone方法是不能夠直接被調用的。當創建對象的副本時,PHP5將會檢查__clone()方法是否存在。如果存在,則調用該方法,否則調用默認的__clone()方法,復制對象的所有屬性。通過定義__clone()方法,可以設置對象副本的屬性值,使其不同于對象正本。任務3.1使用類和對象3.1.8比較對象在PHP4中,對象比較的規則十分簡單:如果兩個對象是同一個類的實例,并且它們有相同的屬性和值,則這兩個對象相等。這個比較規則適用于用相等運算符(==)和全等運算符(===)對兩個對象進行比較。在PHP5中,對象的比較要比PHP4中復雜,也比其他面向對象語言復雜。可分為下列兩種情況:(1)當使用相等運算符(==)時,將以一種簡單方式來比較對象變量,即:如果具有相同的屬性和值,而且是同一個類的實例,則兩個對象相同。(2)當使用全等運算符(===)時,只有當兩個對象變量引用同一個類的同一個實例時,這兩個對象變量才是相同的。任務3.2實現繼承與多態3.2.1實現類的繼承使用關鍵字extends來擴展一個類:classderived_classextendsbase_class{//在此處定義類的成員}其中derived_class表示新建的類,稱為派生類或子類;base_class表示新類所繼承的類,稱為基類或父類。當擴展一個類時,派生類就會繼承基類的所有公有和保護方法。但是派生類的方法會覆蓋基類的方法。如果派生類中定義了構造方法,則不會暗中調用其基類的構造方法。若要執行基類的構造方法,需要在派生類的構造方法中通過以下語法來調用:parent::__construct();其中parent指的是派生類在extends聲明中所指的基類的名字。這樣做可以避免在多個地方使用基類的名字。如果派生類中定義了析構造方法,基類的析構函數不會被PHP引擎暗中調用。若要執行基類的析構函數,則必須在派生類的析構方法中顯式調用:parent::__destruct();在派生類的方法中,可以通過以下語法來調用基類的方法:parent::__method();任務3.2實現繼承與多態3.2.2使用抽象類PHP5支持抽象類和抽象方法。抽象類不能直接被實例化,必須先繼承該抽象類,然后再實例化派生類。在抽象類中至少要包含一個抽象方法。如果一個類方法被聲明為抽象的,則其中就不能包括具體的功能實現。抽象類和抽象方法使用abstract關鍵字來聲明,語法如下:abstractclassclass_name{[public|protected]functionmethod_name([mixed$args[,$...]]);//類的其他成員(包括非抽象方法)}如果一個類中包含有抽象方法(哪怕只有一個),就必須將這個類聲明為抽象的。抽象方法也是使用abstract關鍵字來聲明的,但是只能聲明方法的簽名(或稱為方法頭),而能不提供方法的具體實現代碼。聲明抽象方法的語法不同于聲明一般方法。抽象方法沒有包含在花括號{}中的主體部分,并且用半角分號(;)來結束。如果在派生類中覆蓋了所有的抽象方法,則派生類就變成一個普通的類。如果沒有覆蓋所有的抽象方法,則派生類仍然是抽象類。任務3.2實現繼承與多態3.2.3使用final關鍵字PHP5新增了一個final關鍵字。如果基類中的某個方法被聲明為final,則派生類無法覆蓋該方法;如果一個類被聲明為final,則這個類就不能被繼承。如果在類定義中使用private關鍵字修飾一個屬性或方法,則該屬性或方法不能被繼承。如果使用protected關鍵字修飾一個屬性或方法,則該屬性或方法可以被繼承,但類的外部是不可見的。任務3.2實現繼承與多態3.2.4使用接口使用接口可以指定某個類必須實現哪些方法,但不需要定義這些方法的具體內容。接口是通過interface關鍵字來定義的,就像定義一個標準的類一樣,但其中定義所有的方法都是空的。語法如下:interfaceinterface_name{publicfunctionmethod_name([mixed$args[,$...]]);}其中interface_name表示接口名;method_name表示接口中的方法名稱;$args表示接口方法的參數。接口中定義的所有方法都必須是public,而且都是空的,即不需要定義這些方法的具體內容。定義一個接口后,可以在定義類時使用implements操作符來實現該接口,語法如下:classclass_nameimplementsinterface_name{//在此處類的屬性和方法}其中class_name表示類名;interface_name表示通過該類要實現的接口,該接口中的所有方法必須在類體中實現,否則會報一個嚴重錯誤。通過類實現接口時,必須使用與接口中所定義的方法完全一致的方式,否則會導致致命錯誤。項目4PHP數據處理項目目標掌握字符串處理方法掌握日期/時間處理方法掌握數組處理方法CONTENTS目錄任務4.1字符串處理01任務4.2日期/時間處理02任務4.3數組處理03任務4.1字符串處理4.1.1字符串的格式化輸出(1)使用print()函數輸出一個字符串:intprint(string$arg)(2)使用printf()函數輸出一個格式化的字符串并返回輸出字符串的長度:intprintf(string$format[,mixed$args[,mixed...]])(3)使用sprintf()函數返回一個格式化的字符串:stringsprintf(string$format[,mixed$args[,mixed$...]])任務4.1字符串處理4.1.2了解常用字符串函數stringaddslashes(string$str)使用反斜線引用字符串stringchr(int$ascii)返回指定的字符arrayexplode(string$separator,string$str[,int$limit])使用一個字符串分割另一個字符串stringhtmlentities(string$str[,int$flags[,string$charset]])

將字符串中的一些HTML標記轉換為HTML實體并返回處理后的字符串stringhtmlspecialchars(string$str[,int$flags[,string$charset]])將字符串中的一些特殊字符替換為HTML文本實體并返回經過處理的字符串stringimplode(string$glue,array$pieces)

將數組元素連接成一個字符串并返回該字符串stringlcfirst(string$str)將一個字符串的首字符轉換為小寫stringltrim(string$str[,string$charlist])去除字符串左邊的空格或其他字符并返回處理后的字符串任務4.1字符串處理4.1.2了解常用字符串函數stringltrim(string$str[,string$charlist])去除字符串左邊的空格或其他字符并返回處理后的字符串stringmoney_format(string$format,float$number)將一個數字格式化為一個貨幣字符串stringnl2br(string$str[,bool$is_xhtml])在字符串所有新行之前插入HTML換行標記并返回處理后的字符串intord(string$str)返回字符串str中第一個字符的ASCII碼值voidparse_str(string$str[,array&$arr])將字符串str解析成變量stringrtrim(string$str[,string$charlist])刪除字符串末端的空白字符(或者其他字符)并返回改變后的字符串arraystr_getcsv(string$input[,string$delimiter[,string$enclosure[,string$escape]]])解析CSV字符串為一個數組并返回一個包含讀取到的字段的索引數組stringstr_pad(string$input,int$pad_length[,string$pad_string[,int$pad_type]])

使用字符串pad_string填充字符串input為指定長度,pad_length并返回input被從左端、右端或者同時兩端被填充到指定長度后的結果任務4.1字符串處理4.1.3HTML文本格式化(1)使用nl2br()函數可將字符串中的所有換行符:stringnl2br(string$str[,bool$is_xhtml=true])(2)使用htmlspecialchars()函數可將字符串中的一些特殊字符替換為HTML文本實體并返回經過處理的字符串:stringhtmlspecialchars(string$str[,int$flags[,string$encoding[,bool$double_encode=true]]])(3)使用htmlentities()函數將字符串中的一些HTML標簽轉換為HTML實體并返回經過處理的字符串:stringhtmlentities(string$string[,int$flags[,string$encoding[,bool$double_encode=true]]])(4)使用strip_tags()函數從字符串中去除所有PHP和HTML標簽并返回經過處理的字符串:stringstrip_tags(string$str[,string$allowable_tags])任務4.1字符串處理4.1.4連接和分割字符串(1)使用implode()函數將數組元素連接成一個字符串并返回該字符串:stringimplode(string$glue,array$pieces)(2)使用explode()函數以指定字符串分割一個字符串并返回一個數組:arrayexplode(string$separator,string$str[,int$limit])(3)使用strtok()函數將一個字符串按另一個字符串值分割成若干個字符串:stringstrtok(string$str,string$token)任務4.1字符串處理4.1.5查找和替換字符串(1)使用strpos()函數從一個字符串中查找另一個字符串首次出現的位置:intstrpos(string$haystack,mixed$needle[,int$offset=0])(2)使用strrpos()函數在一個字符串中查找另一個字符串的最后一次出現:intstrrpos(string$haystack,mixed$needle[,int$offset=0])(3)使用str_replace()函數在一個字符串中查找一個子串的所有出現并使用新字符串替換該子串:mixedstr_replace(mixed$search,mixed$replace,mixed$subject[,int&$count])(4)使用substr_replace()函數替換子串的文本內容并返回替換后的字符串:mixedsubstr_replace(mixed$str,string$replacement,int$start[,int$length])任務4.1字符串處理4.1.6從字符串中取子串(1)使用substr()函數從指定字符串中返回一個子串,語法如下:stringsubstr(string$str,int$start[,int$length])(2)使用strstr()函數在一個字符串中查找一個子串的首次出現并返回字符串的一部分或false,語法如下:stringstrstr(string$haystack,mixed$needle[,bool$before_needle])(3)使用strrchr()函數在一個字符串中查找另一個字符串的最后一次出現并返回字符串的一部分,語法如下:stringstrrchr(string$haystack,string$needle)任務4.2日期/時間處理4.2.1設置默認時區(1)在php.ini中設置date.timezone選項。設置中國標準時間的代碼為:date.timezone=PRCdate.timezone選項設置對所有PHP腳本均有效。(2)使用內置函數date_default_timezone_set()來設置用于一個腳本中所有日期時間函數的默認時區,語法如下:booldate_default_timezone_set(string$timezone_identifier)設置中國標準時間的代碼:date_default_timezone_set("Asia/Shanghai");任務4.2日期/時間處理4.2.2獲取日期和時間使用getdate()函數可以取得日期/時間信息,語法如下:arraygetdate([int$timestamp])任務4.2日期/時間處理4.2.3格式化日期/時間使用date()函數可以獲取一個本地日期/時間并進行格式設置,語法如下:stringdate(string$format[,int$timestamp])其中參數format指定日期/時間的顯示格式;timestamp是一個整數,表示時間戳。任務4.3數組處理4.3.1創建數組1.用語言結構array()創建數組$array_name=array([key=>]value,...);通過數組名和索引來引用數組內的任何一個元素的值:$array_name[key]引用二維數組:$array_name[key1][key2]2.用方括號語法新建或修改數組$array_name[key]=value;$array_name[]=value;任務4.3數組處理4.3.2遍歷數組在PHP語言中,可以通過foreach循環語句來遍歷數組。該語句僅用于數組。當試圖將該語句用于其他數據類型或者一個未初始化的變量時會產生錯誤。foreach語句有以下兩種語法格式:foreach(array_expras$value)statementsforeach(array_expras$key=>$value)statements第一種語法格式遍歷給定的array_expr數組。在每次循環中,當前元素的值被賦給變量value,并且數組內部的指針向前移一步,因此在下一次循環中將會得到下一元素。第二種語法格式是第一種語法格式的擴展,其作用與第一種語法格式作用相同,但當前元素的鍵名會在每次循環中賦給變量key。這種語法格式還能用于遍歷對象。任務4.3數組處理4.3.3使用預定義數組PHP提供了一些預定義數組,它們可以在PHP代碼中直接使用,而不需要進行初始化。這些數組包含來自Web服務器(如果可用)、運行環境以及用戶輸入的數據,而且在全局范圍內自動生效,因此也稱為超全局變量。一些常用的預定義數組在表4.5中列出。任務4.3數組處理4.3.4使用數組函數boolarray_key_exists(mixed$key,array$search)檢查給定的鍵名或索引是否存在于數組中。mixedarray_pop(array&arr)彈出并返回arr數組的最后一個元素(出棧),將數組arr的長度減1。intarray_push(array&$arr,mixed$var[,mixed$...])將一個或多個傳入的單元壓入數組arr的末尾(入棧)。arrayarray_reverse(array$arr[,bool$preserve_keys])返回一個元素順序相反的新數組mixedarray_shift(array&$arr) 將數組arr的第一個元素移出并作為結果返回,將arr的長度減1并將所有其他元素向前移動一位numberarray_sum(array$arr) 計算數組arr中所有值的和并以整數或浮點數返回arrayarray_unique(array$arr)

接受數組arr作為輸入并返回沒有重復值的新數組intarray_unshift(array&$arr,mixed$var[,mixed$...])將傳入的單元插入到數組arr的開頭arrayarray_values(array$input)返回數組input中所有的值并給其建立數字索引項目5構建PHP交互網頁項目目標掌握獲取表單變量的方法掌握驗證表單的方法掌握獲取URL參數的方法掌握管理會話的方法掌握Cookie的用法CONTENTS目錄任務5.1獲取表單變量01任務5.2驗證表單數據02任務5.3獲取URL參數03任務5.4會話管理04任務5.5使用Cookie05任務5.1獲取表單變量5.1.1創建HTML表單在網頁中制作一個基本的表單至少需要3個元素,即form、input和button元素。form元素用于為用戶輸入創建HTML表單,input元素用于收集用戶輸入的信息,button元素用于向服務器提交所輸入的信息。1.使用form元素form元素用于在網頁中定義一個表單。其中通常包含各種表單控件元素。主要屬性accept-charsetactionautocompleteenctypemethodnamenovalidatetarget2.使用input元素input元素用于收集用戶輸入的數據。主要屬性namedisabledformvaluetype提交表單時,input元素的name和value屬性值將被編碼成名稱-值并發送到服務器。3.使用button元素button元素用于定義提交按鈕,通過它可將表單數據發送給服務器。主要屬性namedisabledformtypevalue

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論