PHP/Javascript/CSS/jQuery常用知識(shí)大全詳細(xì)整理第2/2頁(yè)
101.常見(jiàn)框架
thinkPHP yii ZendFramework CakePhp sy
102. 常用魔術(shù)方法的觸發(fā)時(shí)機(jī)?
1)__autoload() :當(dāng)程序?qū)嵗硞€(gè)類(lèi),而該類(lèi)沒(méi)有在當(dāng)前文件中被引入。此時(shí)會(huì)觸發(fā)執(zhí)行__autoload()。程序希望通過(guò)該方法,自動(dòng)引入這個(gè)類(lèi)文件。該方法有一個(gè)參數(shù),即就是那個(gè)忘記引入的類(lèi)的名稱(chēng)。__autoload()方法的工作原理是什么?當(dāng)程序執(zhí)行到實(shí)例化某個(gè)類(lèi)的時(shí)候,如果在實(shí)例化前沒(méi)有引入這個(gè)類(lèi)文件,那么就自動(dòng)執(zhí)行__autoload()函數(shù)。這個(gè)函數(shù)會(huì)根據(jù)實(shí)例化的類(lèi)的名稱(chēng)來(lái)查找這個(gè)類(lèi)文件的路徑,當(dāng)判斷這個(gè)類(lèi)文件路徑下確實(shí)存在這個(gè)類(lèi)文件后,就執(zhí)行include或者require來(lái)載入該類(lèi),然后程序繼續(xù)執(zhí)行,如果這個(gè)路徑下不存在該文件時(shí)就提示錯(cuò)誤。使用自動(dòng)載入的魔術(shù)函數(shù)可以不必要寫(xiě)很多個(gè)include或者require函數(shù)。
2)__construct() :這個(gè)是魔術(shù)構(gòu)造方法。構(gòu)造方法是實(shí)例化對(duì)象的時(shí)候自動(dòng)執(zhí)行的方法,作用就是初始化對(duì)象。該方法可以沒(méi)有參數(shù),也可以有多個(gè)參數(shù)。如果有參數(shù),那么new這個(gè)對(duì)象的時(shí)候要記得寫(xiě)上相應(yīng)的參數(shù)。在php5以前,沒(méi)有魔術(shù)構(gòu)造方法,普通構(gòu)造方法是一個(gè)跟類(lèi)名同名的方法來(lái)實(shí)現(xiàn)構(gòu)造的。如果一個(gè)類(lèi)中既寫(xiě)了魔術(shù)構(gòu)造方法,又定義了普通構(gòu)造方法。那么php5以上版本中,魔術(shù)方法起作用,普通構(gòu)造方法不起作用。反之,在php5以前版本中,不認(rèn)識(shí)魔術(shù)構(gòu)造方法,只是把該方法當(dāng)做普通的方法。
3)__destruct() :這個(gè)是魔術(shù)析構(gòu)方法。析構(gòu)方法的作用和構(gòu)造方法正好相反,是對(duì)象被銷(xiāo)毀時(shí)被自動(dòng)調(diào)用的,作用是釋放內(nèi)存。析構(gòu)方法沒(méi)有參數(shù)。
4)__call() :當(dāng)程序調(diào)用一個(gè)不存在或不可見(jiàn)的成員方法時(shí),自動(dòng)觸發(fā)執(zhí)行__call()。它有兩個(gè)參數(shù),分別是未訪(fǎng)問(wèn)到的方法名稱(chēng)和方法的參數(shù)。而第二個(gè)參數(shù)是數(shù)組類(lèi)型。
5)__get() :當(dāng)程序調(diào)用一個(gè)未定義或不可見(jiàn)的成員屬性時(shí),自動(dòng)觸發(fā)執(zhí)行__get()。它有一個(gè)參數(shù),表示要調(diào)用的屬性的名稱(chēng)。
6)__set():當(dāng)程序試圖寫(xiě)入一個(gè)不存在或不可見(jiàn)的成員屬性時(shí),PHP就會(huì)自動(dòng)執(zhí)行__set()。它包含兩個(gè)參數(shù),分別表示屬性名稱(chēng)和屬性值。
7)__tostring() :當(dāng)程序使用echo或print輸出對(duì)象時(shí),會(huì)自動(dòng)調(diào)用該方法。目的是希望通過(guò)該方法將對(duì)象轉(zhuǎn)化為字符串,再輸出。__tostring() 無(wú)參數(shù),但是該方法必須有返回值。
8)__clone() :當(dāng)程序clone一個(gè)對(duì)象的時(shí)候,能觸發(fā)__clone()方法,程序希望通過(guò)這個(gè)魔術(shù)方法實(shí)現(xiàn):不僅僅單純地克隆對(duì)象,還需要克隆出來(lái)的對(duì)象擁有原來(lái)對(duì)象的所有屬性和方法。
103. MVC的概念是什么?
MVC(即模型-視圖-控制器)是80年代發(fā)明的一種軟件設(shè)計(jì)模式或者說(shuō)編程思想。
M指模型層,V是指視圖層(顯示層或者用戶(hù)界面),C是指控制層。
使用mvc的目的是實(shí)現(xiàn)M和V分離,從而使得一個(gè)程序可以輕松使用不同的用戶(hù)界面。
C存在的目的則是在M和V之間起到調(diào)節(jié)作用,確保M和V的同步,一旦M改變,V應(yīng)該能同步更新。
將M和V分離,就可以做到同一個(gè)網(wǎng)頁(yè),在不同節(jié)日到來(lái)的時(shí)候能顯示不同的頁(yè)面風(fēng)格,這只需要提前制作多個(gè)視圖層模板頁(yè)面,
而無(wú)需更改M層程序。
MVC做到了編程中的分工合作,代碼的可重用性得到最大化體現(xiàn),程序邏輯更加清晰而富有條理,便于后期維護(hù)管理。
104、 訪(fǎng)問(wèn)權(quán)限修飾符有哪幾種,對(duì)比解釋
答:1、public 表示公共的,在本類(lèi)中和子類(lèi)中以及類(lèi)外,可以對(duì)其調(diào)用
2、protected表示受保護(hù)的,可以在本類(lèi)中和子類(lèi)中調(diào)用
3、private表示私有的,只能在本類(lèi)中調(diào)用
4、var,效果等同于public
105、 Class關(guān)鍵詞前可以有哪些修飾詞
a) Final修飾,表示該類(lèi)是最終的,無(wú)法繼承
b) Abstract修飾,表示該類(lèi)是抽象類(lèi)
106、 作用域操作符在那些場(chǎng)合下使用
答:作用于操作符的使用場(chǎng)合
a) 本類(lèi)中:
i. self::類(lèi)常量
ii. self::靜態(tài)屬性
iii. self::方法() parent::方法()
b) 子類(lèi)中:
i. parent::類(lèi)常量
ii. parent::靜態(tài)屬性(public或者protected)
iii. parent::方法()(public或者protected)
c) 類(lèi)外:
i. 類(lèi)名::類(lèi)常量
ii. 類(lèi)名::靜態(tài)屬性(public)
iii. 類(lèi)名::靜態(tài)方法(public)
107、 $this,self, parent分別代表什么?哪些場(chǎng)合下使用
答:$this代表的是當(dāng)前對(duì)象 self代表的是當(dāng)前的類(lèi) parent代表的是當(dāng)前類(lèi)的父類(lèi)
使用場(chǎng)合:
$this只能使用在當(dāng)前類(lèi)中,通過(guò)$this->可以調(diào)用當(dāng)前類(lèi)中的屬性和方法;
self只能在當(dāng)前類(lèi)中使用,通過(guò)作用域操作符::訪(fǎng)問(wèn)當(dāng)前類(lèi)中的類(lèi)常量、當(dāng)前類(lèi)中的靜態(tài)屬性、當(dāng)前類(lèi)中的方法;
parent只能使用在有父類(lèi)的當(dāng)前類(lèi)中,通過(guò)作用域操作符::訪(fǎng)問(wèn)父類(lèi)中的類(lèi)常量、父類(lèi)中的靜態(tài)屬性、父類(lèi)中的方法。
108、 說(shuō)明是接口、抽象類(lèi)二者有何相同和不同的地方?
1、接口是幫助php實(shí)現(xiàn)功能意義上的多繼承的,用interface來(lái)聲明,其方法沒(méi)有方法體,使用implemens關(guān)鍵詞來(lái)實(shí)現(xiàn)接口。
接口中只能包含抽象方法和類(lèi)常量,不可以包含成員屬性。
2、抽象類(lèi)是一種不能被實(shí)例化的類(lèi),只能作父類(lèi),用abstract class來(lái)定義,抽象類(lèi)和普通類(lèi)可以沒(méi)有區(qū)別,類(lèi)中可以包含成員屬性、類(lèi)常量、方法。
子類(lèi)得用extends來(lái)繼承,而且只能是單繼承。
兩者相同點(diǎn)是都不可以被實(shí)例化,都是需要被繼承才可以使用。
兩者的最大區(qū)別是接口可以實(shí)現(xiàn)多繼承,而抽象類(lèi)只能是單繼承。
接口中不能包含成員屬性,而抽象類(lèi)中可以有成員屬性。
接口中的抽象方法必須是public或者無(wú)訪(fǎng)問(wèn)修飾詞,接口中的抽象方法不能用abstract來(lái)修飾。
抽象類(lèi)中的方法可以是普通方法,也可以是抽象方法,如果是抽象方法,一定需要使用abstract來(lái)修飾。
109、 解釋PHP中單例模式?
又叫做單態(tài)模式、單元素模式、singleton pattern。單例模式指在PHP的應(yīng)用程序的范圍內(nèi)只對(duì)指定的類(lèi)創(chuàng)建一個(gè)實(shí)例。使用單例模式的類(lèi)稱(chēng)為單例類(lèi)。在php中單例類(lèi)必須要有一個(gè)私有的構(gòu)造方法,還要有一個(gè)私有的魔術(shù)克隆方法(該方法體中為空)和一個(gè)私有的靜態(tài)的成員屬性$_instance.私有構(gòu)造方法防止除自身以外的類(lèi)來(lái)實(shí)例化它。私有的方法體為空的克隆方法防止該類(lèi)被克隆。$_instance用來(lái)存儲(chǔ)被自身實(shí)例化后的對(duì)象。還必須要有一個(gè)公共的靜態(tài)的方法getInstance()。該方法返回已經(jīng)存儲(chǔ)了實(shí)例對(duì)象的$_instance。
單例:一個(gè)類(lèi)至始至終只能實(shí)例化一個(gè)對(duì)象,這樣的類(lèi)就是單例類(lèi)
單例類(lèi)的優(yōu)點(diǎn):① 節(jié)省空間 ② 節(jié)省資源
實(shí)現(xiàn)單例類(lèi)的四個(gè)要點(diǎn):①私有的構(gòu)造函數(shù)②私有的__clone的方法③私有的靜態(tài)屬性,屬性有以保存類(lèi)的實(shí)例④公共的靜態(tài)方法來(lái)實(shí)例化對(duì)象
無(wú)限級(jí)分類(lèi):
①數(shù)據(jù)庫(kù)設(shè)計(jì):region_id(自增ID) region_name(地區(qū)名稱(chēng)) parent-id(上級(jí)地區(qū)id) region_path(全路徑)
②程序設(shè)計(jì):全路徑的作用:a根據(jù)全路徑順序取數(shù)據(jù) b用作信息層級(jí)顯示
110、 什么是SQL注入?
SQL注入攻擊是黑客對(duì)數(shù)據(jù)庫(kù)進(jìn)行攻擊的常用手段之一。一部分程序員在編寫(xiě)代碼的時(shí)候,
沒(méi)有對(duì)用戶(hù)輸入數(shù)據(jù)的合法性進(jìn)行判斷,注入者可以在表單中輸入一段數(shù)據(jù)庫(kù)查詢(xún)代碼并提交,
程序?qū)⑻峤坏男畔⑵礈惿梢粋€(gè)完整sql語(yǔ)句,服務(wù)器被欺騙而執(zhí)行該條惡意的SQL命令。注入者根據(jù)程序返回的結(jié)果,
成功獲取一些敏感數(shù)據(jù),甚至控制整個(gè)服務(wù)器,這就是SQL注入。
111、 如何防止SQL注入?
要對(duì)提交的信息進(jìn)行過(guò)濾,對(duì)單引號(hào)進(jìn)行轉(zhuǎn)義。
首先可以在php.ini中設(shè)置,讓所有的單引號(hào)在提交后都進(jìn)行轉(zhuǎn)義?;蛘呤褂胊ddslashes().
112、 FCKEditor自動(dòng)過(guò)濾的解決辦法?
如果您需要編輯模板頁(yè),默認(rèn)的FCK設(shè)置是會(huì)去掉<HTML></HTML><BODY></BODY>標(biāo)簽,而且會(huì)給你加上<P></P>標(biāo)簽的,如果需要保留的話(huà),只要更改下設(shè)置可以了。
在fckconfig.js里面有:FCKConfig.FullPage = false ;
改為:FCKConfig.FullPage = true;
如果想去掉自動(dòng)添加<P>的代碼就可以在這里設(shè)置
默認(rèn)是
FCKConfig.EnterMode = 'p' ; // p | div | br
FCKConfig.ShiftEnterMode = 'br' ; // p | div | br
改成
FCKConfig.EnterMode = 'br' ; // p | div | br
FCKConfig.ShiftEnterMode = 'p' ; // p | div | br
113、 $_REQUEST、$_GET、$_POST、$_COOKIE 的關(guān)系和區(qū)別:
1.關(guān)系:$_REQUEST包含了$_GET、$_POST、$_COOKIE等的所有內(nèi)容,是它們的集合體。
2.通過(guò)$_REQUEST獲取變量值,PHP頁(yè)面因?yàn)椴淮_定它是哪種傳值方式,
因此會(huì)根據(jù)php.ini中的配置來(lái)接收值。
php.ini里可以設(shè)置,variables_order = “GPC”。其含義是GET,POST,COOKIE.
所以PHP頁(yè)面會(huì)先從$_GET中獲取,再?gòu)?_POST中獲取,然后從$_COOKIE中獲取。
新獲得的值會(huì)覆蓋之前獲取到的值。
因此從表現(xiàn)形式上看,$_REQUEST最后是獲取$_COOKIE中的值,如果$_COOKIE中沒(méi)有值,
會(huì)獲取$_POST中的值,如果$_POST沒(méi)有獲取到 ,就去$_GET中獲取。
如果$_GET中也沒(méi)有該值,那么$_REQUEST就返回null。
114、 什么是多條件查詢(xún)(復(fù)合查詢(xún)),如何實(shí)現(xiàn)多條件查詢(xún)?
如何實(shí)現(xiàn)萬(wàn)能查詢(xún)呢?查詢(xún)的時(shí)候要填寫(xiě)查詢(xún)條件,這些條件會(huì)通過(guò)表單進(jìn)行提交。
首先需要檢查提交的條件是否為空。如果不為空,就認(rèn)為這個(gè)值是要被當(dāng)作條件,
我們就可以使用字符串連接的方式來(lái)組合一個(gè)sql查詢(xún)語(yǔ)句。
當(dāng)執(zhí)行后獲取查詢(xún)結(jié)果。
115. 文件上傳需要注意哪些細(xì)節(jié)?怎么把文件保存到指定目錄?怎么避免上傳文件重名問(wèn)題?
1). 首現(xiàn)要在php.ini中開(kāi)啟文件上傳;
2). 在php.ini中有一個(gè)允許上傳的最大值,默認(rèn)是2MB。必要的時(shí)候可以更改;
3). 上傳表單一定要記住在form標(biāo)簽中寫(xiě)上enctype="multipart/form-data";
4). 提交方式 method 必須是 post;
5). 設(shè)定 type="file" 的表單控件,并且必須具有name屬性值;
6). 為了上傳成功,必須保證上傳文件的大小是否超標(biāo)、文件類(lèi)型是否符合要求,上傳后存放的路徑是否存在;
7). 表單提交到接收頁(yè)面,接收頁(yè)面使用$_FILES來(lái)接收上傳的文件。$_FILES是個(gè)多維數(shù)組。第一維下標(biāo)是上傳控件的name,二維下標(biāo)分別為name/type/tmp_name/size/error。分別代表文件名、文件類(lèi)型、上傳到臨時(shí)目錄下的臨時(shí)文件名、文件大小、是否有錯(cuò)誤。如果是批量上傳,那么二維下標(biāo)就是數(shù)組,而并非是字符串。
8). 文件上傳后是被放置在服務(wù)器端臨時(shí)路徑下,需要使用move_uploaded_file ()函數(shù),才可以將上傳后的文件保存到指定目錄。
9). 為了避免上傳文件重名,可以通過(guò)上傳的文件名獲取到文件后綴,然后使用時(shí)間戳+文件后綴的方式為文件重新命名。
116. 使用GD2庫(kù)創(chuàng)建圖像的步驟?
1). 創(chuàng)建一個(gè)畫(huà)布:imagecreate();
2). 設(shè)置畫(huà)布背景顏色,使用RGB設(shè)置顏色:imagecolorallocate();
3). 設(shè)置文字顏色:imagecolorallocate();
4). 在畫(huà)布上書(shū)寫(xiě)文字:imagestring();
5). 以 JPEG 格式將圖像輸出到瀏覽器或文件:【根據(jù)圖片格式不同,函數(shù)還可以是imagepng()、imagegif()等】 imagejpeg();
6). 清除圖像資源:imagedestroy();
117. GD2庫(kù)生成縮略圖的步驟是什么?
1). 讀取希望生成縮略圖的源圖像,創(chuàng)建圖像對(duì)象:【根據(jù)圖片格式不同,函數(shù)也相應(yīng)不同】
$src_image = imagecreatefromjpeg();
2). 獲取原圖像的寬度和高度$srcW,$srcH,根據(jù)縮放比例計(jì)算出新圖像的寬度和高度$dstW、$dstH:
3). 創(chuàng)建一個(gè)真色彩的圖像對(duì)象,寬度和高度設(shè)置成剛才計(jì)算出的寬度和高度:
$dst_image = imagecreatetruecolor($dstW,$dstH);
4). 拷貝圖像并調(diào)整大小: imagecopyresized();
5). 將圖像輸出:【根據(jù)圖片格式不同,函數(shù)也相應(yīng)不同】 imagejpeg();
6). 清除圖像資源(將源圖像資源和目標(biāo)圖像資源都清除) imagedestroy();
118. GD2庫(kù)給圖片增加水印如何做?
1. 添加簡(jiǎn)單的文本水?。?BR> 利用imagestring()函數(shù)就可以在圖片上寫(xiě)文本水印。
2. 增加一個(gè)圖形水印:
1). 讀取希望增加水印的源圖片,創(chuàng)建圖像對(duì)象:【根據(jù)圖片格式不同,函數(shù)也相應(yīng)不同】
$image = imagecreatefromjpeg();
2). 創(chuàng)建一個(gè)水印圖片的圖像對(duì)象:
$watermark = imagecreatefrompng();
3). 拷貝并合并圖像:
imagecopymerge();
4). 將圖像輸出:【根據(jù)圖片格式不同,函數(shù)也相應(yīng)不同】
imagejpeg();
5). 清除圖像資源(將源圖像資源和水印圖像資源都清除)
imagedestroy();
119. 什么是事務(wù)?什么是回滾?事務(wù)的作用是什么?
事務(wù)就是組合起來(lái)的幾個(gè)獨(dú)立的sql操作。如果其中一項(xiàng)失敗,那么就讓這幾個(gè)組合起來(lái)的sql操作都回退到未執(zhí)行狀態(tài)。這就是事務(wù)的回滾。mysql中MyISAM存儲(chǔ)引擎的表不支持事務(wù),只有InnoDB 存儲(chǔ)引擎的表才支持事務(wù),為了讓事務(wù)正常執(zhí)行,就需要讓參與事務(wù)的所有數(shù)據(jù)表都設(shè)置成innoDB類(lèi)型。事務(wù)被包裝在了 BEGIN 和 COMMIT 語(yǔ)句之間。在沒(méi)有使用 COMMIT 語(yǔ)句的情況下,對(duì)數(shù)據(jù)庫(kù)的操作不是永久的,一旦運(yùn)行了 ROLLBACK,就會(huì)被回退。只有執(zhí)行了COMMIT,數(shù)據(jù)表中的信息才被改動(dòng)。事務(wù)的目的就是為了保證數(shù)據(jù)的完整性。
120. 模擬SESSION機(jī)制實(shí)現(xiàn)數(shù)據(jù)庫(kù)存放會(huì)話(huà)數(shù)據(jù)有什么作用?【備用】
如果使用默認(rèn)的SESSION機(jī)制,大家都知道默認(rèn)的SESSION_ID是存放在COOKIE中,用戶(hù)的身份是靠SESSION_ID來(lái)識(shí)別的,而COOKIE文件是存放在用戶(hù)瀏覽器的客戶(hù)端,這樣就會(huì)帶來(lái)一個(gè)問(wèn)題,當(dāng)用戶(hù)在辦公室選擇一些商品到購(gòu)物車(chē),在準(zhǔn)備下訂單付款的時(shí)候,用戶(hù)選擇了支付寶在線(xiàn)的支付方式,恰巧辦公室的電腦上面沒(méi)有安裝支付寶的數(shù)字證書(shū),而在用戶(hù)家里的電腦安裝過(guò)數(shù)字證書(shū),所以呢,用戶(hù)就需要回家去支付。但是回家登錄商城之后,發(fā)現(xiàn)購(gòu)物車(chē)中精心挑選的商品都不存在了。這是為什么呢?問(wèn)題就在家里電腦上的并沒(méi)有存放SESSION_ID的cookie文件,因而就無(wú)法正確的讀取服務(wù)器上對(duì)應(yīng)session文件中的數(shù)據(jù),所以無(wú)法將原來(lái)的選擇的商品息讀取過(guò)來(lái)。這樣的購(gòu)物車(chē)功能給用戶(hù)的用戶(hù)體驗(yàn)式非常糟糕的,所以我們就需要采取模擬SESSION機(jī)制使用數(shù)據(jù)庫(kù)來(lái)存放會(huì)話(huà)數(shù)據(jù)。
121. 什么是無(wú)限極分類(lèi)?
要實(shí)現(xiàn)無(wú)限極分類(lèi),數(shù)據(jù)庫(kù)建表是關(guān)鍵。
表結(jié)構(gòu)中至少需要三個(gè)字段,如果想避免遞歸循環(huán),那么需要四個(gè)字段。
1. id ,當(dāng)前數(shù)據(jù)的唯一標(biāo)識(shí);
2. typename ,類(lèi)型名稱(chēng);
3. parentid , 當(dāng)前類(lèi)型的上一層父類(lèi)型的id;
4. path , 其中存儲(chǔ)當(dāng)前類(lèi)型的id和它所有父級(jí)類(lèi)型的id。
這些id之間采用“-”隔開(kāi)。
5. 當(dāng)通過(guò)以下sql語(yǔ)句就可以實(shí)現(xiàn),相同頂級(jí)類(lèi)下的信息都在一起集中顯示。
select * from 表名 where 條件 order by path;
無(wú)限極分類(lèi)的原理是什么?
要實(shí)現(xiàn)無(wú)限極分類(lèi),數(shù)據(jù)庫(kù)表結(jié)構(gòu)是關(guān)鍵。
表結(jié)構(gòu)中至少需要三個(gè)字段,如果想避免遞歸循環(huán),那么需要四個(gè)字段。
1. id ,當(dāng)前數(shù)據(jù)的唯一標(biāo)識(shí);
2. typename ,類(lèi)型名稱(chēng);
3. parentid , 當(dāng)前類(lèi)型的上一層父類(lèi)型的id;
4. path , 其中存儲(chǔ)當(dāng)前類(lèi)型的id和它所有父級(jí)類(lèi)型的id。
這些id之間采用“-”隔開(kāi)。
5. 當(dāng)通過(guò)以下sql語(yǔ)句就可以實(shí)現(xiàn),相同頂級(jí)類(lèi)下的信息都在一起集中顯示。
select * from 表名 where 條件 order by path;
122. 分頁(yè)原理是什么?
數(shù)據(jù)分頁(yè)需要以下幾個(gè)條件:
1. 參與分頁(yè)的總條數(shù) 【$msg_count】 ,該值通過(guò)數(shù)據(jù)庫(kù)查詢(xún)可以獲取到;
2. 每頁(yè)顯示的條數(shù)【$pagesize】 ,這個(gè)數(shù)值由自己定義;
3. 當(dāng)前頁(yè)的頁(yè)碼數(shù) 【$page】,該數(shù)值通過(guò)地址欄傳遞和接收;
4. 可以通過(guò)以上資料計(jì)算出總頁(yè)數(shù) 【$pagecount】 ,此處需要借助ceil();
【$pagecount = ceil($msg_count/$pagesize);】
5. 數(shù)據(jù)庫(kù)查詢(xún)借助sql語(yǔ)句中的【limit】來(lái)實(shí)現(xiàn)數(shù)據(jù)的變化:
例如:
select * from 表名 where 條件 limit $startnum , $pagesize;
而$startnum = ($page-1)*$pagesize;
123、 如何在smarty模板語(yǔ)言中使用php代碼?
借助于兩個(gè)smarty內(nèi)建函數(shù)。
1. inluce_php 函數(shù)用于在模板中包含 php 腳本。例如:
{include_php file="test.php"}
2. php 標(biāo)簽允許在模板中直接嵌入 php 腳本。例如:
{php}
echo "這個(gè)是php內(nèi)建函數(shù)的作用";
{/php}
124、 請(qǐng)列出至少五個(gè)smarty中的變量調(diào)節(jié)符并說(shuō)明功能?
default 例如:{$arr|default:'xxxx'} ,默認(rèn)變量調(diào)節(jié)器,當(dāng)變量為空時(shí)顯示給定的默認(rèn)值
truncate 例如:{$articleTitle|truncate:10} , 切割字符串長(zhǎng)度為指定的長(zhǎng)度;
count_characters 例如:{$articleTitle|count_characters} ,獲取字符串長(zhǎng)度;
strip_tags 例如: {$articleTitle|strip_tags} ,去除字符串中的所有html標(biāo)簽;
date_format 例如:{$smarty.now|date_format(‘')} ,格式化時(shí)間戳。
125、 寫(xiě)程序?qū)崿F(xiàn)如下功能:
a.如何判斷一個(gè)字符串中是否存在一個(gè)字符?
echo strstr('abcdefgcd' , 'cd');
echo strpos('ab0defgcd' , 'cd');
b.如何判斷一個(gè)字符串中一個(gè)字符出現(xiàn)的次數(shù)?
echo substr_count('abcdefgcd' , 'cd');
c.如何去掉一個(gè)字符串的最后一個(gè)字符
echo substr('abcdefgcd' , 0 , -1);
126、 如何使用smarty的緩存、步驟?什么叫單模板多緩存?
如果給整個(gè)網(wǎng)站開(kāi)啟緩存,那么$smarty->caching=1,此時(shí)緩存的時(shí)間為smarty.class.php中默認(rèn)的時(shí)間,也就是3600秒。如果對(duì)每一個(gè)頁(yè)面獨(dú)立設(shè)置緩存,那么$smarty->caching=2 ,緩存時(shí)間就會(huì)跟display的參數(shù)模板頁(yè)相掛鉤,也就是可以實(shí)現(xiàn)對(duì)每個(gè)模板頁(yè)設(shè)置不同的緩存時(shí)間。
用法例如:
if(!$smarty->is_cached('index.html')) {
//此處可以執(zhí)行數(shù)據(jù)庫(kù)操作
$smarty->cache_lifetime = 3600*6;
}
$smarty->display('index.html');
對(duì)于例如新聞單條這樣的頁(yè)面,新聞的模板都是一個(gè),如果開(kāi)啟緩存,那么所有的新聞單頁(yè)的緩存都是一個(gè),根本不會(huì)隨著id的變化而變換內(nèi)容。所以為了區(qū)分不同的頁(yè)面緩存,需要使用單模板多緩存技術(shù)。具體做法是以id作為display的第二個(gè)參數(shù)來(lái)實(shí)現(xiàn)。此外對(duì)于具有分頁(yè)的列表頁(yè),也必須在display中使用第二個(gè)參數(shù),可以使用新聞?lì)愋蚷d和當(dāng)前頁(yè)面合并成第二個(gè)參數(shù)。
127、 寫(xiě)一個(gè)遞歸函數(shù)完成以下功能:向函數(shù)中傳一個(gè)多維數(shù)組,對(duì)數(shù)組中所有的值做判斷
,如果值是'number'則設(shè)置該值為0?(提示:該題考的是遞歸的應(yīng)用,因?yàn)閭魅氲臄?shù)組不確定是多少維的,所以需要遞歸判斷)
function recursive_array($arr) {
if(is_array($arr)) {
foreach($arr as $key=>$value) {
if(is_array($value)) {
$arr[$key] = recursive_array($value);
} else {
if($value=='number') {
$arr[$key] = '0'; }
}}}
return $arr;
}
128、 使用jquery寫(xiě)一個(gè)全選的例子?
//全選與取消全選
function selectAll(flag) {
for(var i=0; i<$("#fonds input").size(); i++) {
$("#fonds input").get(i).checked=flag;
}}
//判斷復(fù)選框已經(jīng)被勾選了多少個(gè)?
function checkFonds() {
var count=0;
for(var i=0; i<$("#fonds input").size(); i++) {
if($("#fonds input").get(i).checked==true) {
count++;
}}
alert(count);
}
//利用后代選擇器和get()來(lái)獲取指定的控件
$(“div a”).get(2)
129、 請(qǐng)說(shuō)明smarty中fetch方法的功能?
Fetch方法可以獲取到頁(yè)面所有的內(nèi)容,并且賦值到一個(gè)變量中。
如果第四個(gè)參數(shù)為true,則等同于display,直接輸出到瀏覽器中。
如果第四個(gè)參數(shù)為false,則不輸出。
Display方法就是第四個(gè)參數(shù)為true的fetch方法。
Display = Fetch() + echo()
130、 寫(xiě)出關(guān)于文件上傳的相關(guān)函數(shù)?
strrchr($filename , '.'); explode('.' , $filename);
end($arr); strrpos($filename , '.');
substr($filename , $pos+1); pathinfo($filename , PATHINFO_EXTENSION);
date(‘YmdHis') time() rand();
mt_rand() move_uploaded_file()
131、 如何將SESSION存放在數(shù)據(jù)庫(kù)中,可以結(jié)合數(shù)據(jù)表設(shè)計(jì)說(shuō)明.
默認(rèn)情況下php.ini中session.save_handler = files,也就是session是以文件形 式存儲(chǔ)的。
如果想更改為數(shù)據(jù)庫(kù)或其它存儲(chǔ)方式,那么需要更改設(shè)置,讓 session.save_handler = user。
除了在php.ini中配置外,還可以在PHP頁(yè)面中單獨(dú)配置,用
ini_set ('session.save_handler, 'user')來(lái)設(shè)置session的存儲(chǔ)方式,設(shè)置為用戶(hù)自定義存儲(chǔ)方式。
設(shè)置好存儲(chǔ)方式后,需要使用session_set_save_handler()函數(shù)。
該函數(shù)是設(shè)置用戶(hù)級(jí)別的session保存過(guò)程的函數(shù)。該函數(shù)有6個(gè)參數(shù),這6個(gè)參數(shù)其實(shí)是6個(gè)自定義函數(shù)的名稱(chēng),分別代表對(duì)session的開(kāi)啟,關(guān)閉,讀,寫(xiě) ,銷(xiāo)毀,gc(垃圾回收)。
示例代碼如下:
function open () { }
function close() { }
function read () { }
function write () {}
function destroy () {}
function gc () {}
session_set_save_handler ("open", "close", "read", "write", "destroy", "gc");
session_start();
現(xiàn)在你就可以象往常一樣地使用session了。
數(shù)據(jù)庫(kù)結(jié)構(gòu)如下:
Session_id , session_value ,expire_time , 分別存儲(chǔ)sessionid的id和值以及失效時(shí)間。
132、 常用的正則表達(dá)式寫(xiě)法:
中文:/^[\u4E00-\u9FA5]+$/
手機(jī)號(hào)碼:/^(86)?0?1\d{10}$/
EMAIL:
/^[\w-]+[\w-.]?@[\w-]+\.{1}[A-Za-z]{2,5}$/
密碼(安全級(jí)別中):
/^(\d+[A-Za-z]\w*|[A-Za-z]+\d\w*)$/
密碼(安全級(jí)別高):
/^(\d+[a-zA-Z~!@#$%^&(){}][\w~!@#$%^&(){}]*|[a-zA-Z~!@#$%^&(){}]+\d[\w~!@#$%^&(){}]*)$/
——————————————————————————
PHP初
——————————————————————————
order順序
var(variables)變量
model典型 樣式 模型
module模數(shù);模塊;組件
enctype
SEO搜索引擎優(yōu)化(Search Engine Optimization)
Search搜索
Engine 引擎
Optimization最佳化,最優(yōu)化
mod_rewrite模塊重寫(xiě)
CMS 內(nèi)容管理系統(tǒng)(content manage system)
electronic commerce(電子商務(wù))
gc(garbage collection)垃圾回收
---------------Apache與WAMP安裝---------------
1.wamp安裝
apache (2.2版本) mysql(5.067版本) php(5.2版本)
LAMP Linux下的安裝
負(fù)責(zé)版本控制 SVN
一臺(tái)機(jī)器能安裝多個(gè)apache服務(wù) 但是只能安裝一個(gè)MySQL服務(wù)
-------------PHP上-------------
PHP: personal home page 個(gè)人家庭主頁(yè) 94年產(chǎn)生的 5.2.6版本
ASP: active server page 93
JSP: java server page
類(lèi)里面定義常量叫類(lèi)常量 用const定義
類(lèi)常量必須有初始值
define('','','false/true')里有三個(gè)參數(shù),默認(rèn)為false時(shí)區(qū)分大小寫(xiě),反之不區(qū)分大小寫(xiě)
在類(lèi)里面叫做方法 在類(lèi)外叫做函數(shù)
常量默認(rèn)為大小寫(xiě)敏感。
::作用域操作符
標(biāo)量和非標(biāo)量類(lèi)型的區(qū)別:標(biāo)量只能存一個(gè)數(shù)據(jù),非標(biāo)量能存多個(gè)數(shù)據(jù)
(屬性 變量名 類(lèi)常量)區(qū)分大小寫(xiě)
(變量 類(lèi)名 系統(tǒng)自帶函數(shù) 自定義函數(shù))不區(qū)分大小寫(xiě)
當(dāng)$_POST['user_name']等沒(méi)加‘'是會(huì)先當(dāng)作常量來(lái)編譯
3.函數(shù)
可變函數(shù):函數(shù)的名字是一個(gè)變量
可選參數(shù):參數(shù)有默認(rèn)值
遞歸(recursive)函數(shù)體內(nèi)有一個(gè)循環(huán)體,自己調(diào)用自己,但他跟死循環(huán)有區(qū)別,死循環(huán)是沒(méi)有盡頭的, 他是無(wú)限循環(huán),遞歸有盡頭,他最終會(huì)獲得一個(gè)值
function pager( $page $msg_count $pagesize $url="?"){
}----》$url="?"即為可選參數(shù)
數(shù)組的合并 array_merge()
$arr1+$arr2
兩數(shù)組相加: 只要是具有相同的下標(biāo),則只保留首次出現(xiàn)的元素,后者舍去
array_merge:索引數(shù)組會(huì)將后者的元素附加到前者后面;若是關(guān)聯(lián)數(shù)組,相同下標(biāo),后者覆蓋前者
explode() 取數(shù)組最后一個(gè)元素
8.文件的操作
mkdir新建目錄
rmdir刪除目錄
skandir輸出指定路徑下的文件或目錄
fopen(資源)— 打開(kāi)文件或者 URL
fclose— 關(guān)閉一個(gè)已打開(kāi)的文件
fgets — 一次讀取一行
fgetc — 一次只讀取一個(gè)字符
fgetss — 一次讀取一行并過(guò)濾掉 HTML 標(biāo)記
file_get_contents — 將整個(gè)文件讀入一個(gè)字符串
fread-讀取文件
file_put_contents— 將一個(gè)字符串寫(xiě)入文件
fwrite-寫(xiě)入文件
unlink-刪除文件
pathinfo — 返回文件路徑的信息
array_push — 將一個(gè)或多個(gè)單元壓入數(shù)組的末尾(入棧)
array_unshift — 在數(shù)組開(kāi)頭插入一個(gè)或多個(gè)單元
9.其它函數(shù)
輸出控制函數(shù):ob(output buffer) ob_flush
加密函數(shù) md5
數(shù)學(xué)類(lèi)函數(shù):abs絕對(duì)值,rand隨機(jī)數(shù),ceil取整,floor,mt_rand生成更好的隨機(jī)數(shù)
轉(zhuǎn)換函數(shù):explode 使用一個(gè)字符串分割另一個(gè)字符串,implode
時(shí)間函數(shù):date(),strtotime (將字符串轉(zhuǎn)換為時(shí)間戳)
處理地址欄: url_encode url_decode
10.亂碼問(wèn)題
ASCII(American Standard Code for Information Interchange)81年產(chǎn)生
ANSI 美國(guó)國(guó)家標(biāo)準(zhǔn)學(xué)會(huì)( American National Standards Institute)
utf-8(-8代表一次傳輸8個(gè)字符)可變字節(jié)編碼(中文3個(gè)字節(jié))(utf:Unicode轉(zhuǎn)換格式(UCS Transformation Format)
utf-16(-16代表一次傳輸16個(gè)字符)
GBK. 國(guó)家標(biāo)準(zhǔn)擴(kuò)展碼(Guo-Biao Kuozhan)90年產(chǎn)生(雙字節(jié)編碼)
GB2312 因?yàn)閲?guó)際排行2312位(81年產(chǎn)生)
BIG5
unicode (國(guó)際編碼)可變字節(jié)編碼
Latin_1
utf-8+ bom
ISO:國(guó)際標(biāo)準(zhǔn)化組織(International Standardization Organization)
11.數(shù)據(jù)庫(kù)操作
數(shù)據(jù)庫(kù)優(yōu)化:char(查詢(xún)速度快)
varchar
引擎:myisam(mysql indexed sequential access method)索引順序訪(fǎng)問(wèn)方法
支持事務(wù)的引擎:BDB ,innodb
innodb:是以inno開(kāi)頭的一家公司的商標(biāo)
表類(lèi)型就是表的存儲(chǔ)引擎
dll:動(dòng)態(tài)數(shù)據(jù)連接庫(kù) 封裝的類(lèi)庫(kù)
修飾符:public,var,protected,private,static,final,abstract
訪(fǎng)問(wèn)權(quán)限修飾符:public,private,protected
public:類(lèi)成員訪(fǎng)問(wèn)沒(méi)有限制,多有外部成員都可以訪(fǎng)問(wèn)
protected:受保護(hù)的,不能被類(lèi)外部成員訪(fǎng)問(wèn),該類(lèi)的直接子類(lèi)可以訪(fǎng)問(wèn),可以實(shí)現(xiàn)對(duì)成員屬性的讀、寫(xiě)操作
private:私有的,只能類(lèi)里邊的成員自己訪(fǎng)問(wèn),類(lèi)外部的成員都不能訪(fǎng)問(wèn)
一個(gè)屬性被修飾為私有的(private),那么這個(gè)屬性在類(lèi)的外部是不可以讀取和修改的,現(xiàn)在有一種方法 可以設(shè)置該屬性既是私有的,還可以被類(lèi)的外部成員讀取即__get()和__set()
修飾class的修飾符:final,abstract(抽象)
final被它修飾的類(lèi)是不能被繼承的
定義屬性必須要加修飾符:可以是public和var
定義方法時(shí)可以有修飾符public,可以不寫(xiě),默認(rèn)為public
如果父類(lèi)中的方法被聲明為final,則子類(lèi)無(wú)法覆蓋該方法; 如果一個(gè)類(lèi)被聲明為final,則不能被繼承。
final只能出現(xiàn)在class類(lèi)和方法中
方法前可以有public,private,protected,static,final,abstract修飾。
繼承性:耦合性越低越好
const修飾,一定要有初始值 ( smarty的保留變量:{$smarty.now},{$smarty.const},{$smarty.post},{$smarty.get},{$smarty.cookies},{$smarty.config},{$smarty.session},){$smarty.capture}
調(diào)用屬性時(shí),如果前有$后邊就不能有,后有前不能有,如:$this->abc
self::$abc
當(dāng)用parent調(diào)用父類(lèi)方法時(shí),將方法自動(dòng)轉(zhuǎn)化為靜態(tài)的
多態(tài)性:由繼承 重寫(xiě)(覆蓋)(重新寫(xiě)一遍)(override重寫(xiě))造成的
php不支持重載(重復(fù)載入),php為弱變量語(yǔ)言(overload重載)
抽象:一個(gè)類(lèi)包含抽象方法就是抽象類(lèi),抽象類(lèi)中不一定有抽象方法
抽象類(lèi)的定義abstract
接口里可以有抽象類(lèi),還可以有類(lèi)常量,通過(guò)interface來(lái)定義一個(gè)接口,
實(shí)現(xiàn)多個(gè)接口時(shí),接口中的方法不能有重名。
接口中定義的所有方法都必須是public,這是接口的特性。
接口里的方法必須被重寫(xiě)
靜態(tài):static 不能與構(gòu)造方法共存,static不能new對(duì)象,構(gòu)造方法可以new對(duì)象,方法體中不能用$this
在php5以前的版本中,當(dāng)普通構(gòu)造方法和__construct(魔術(shù)方法)共存在時(shí),它會(huì)調(diào)用普通構(gòu)造方法,它對(duì)__construct(魔術(shù)方法)是不識(shí)別的,在php5以后的版本中,當(dāng)共存時(shí)他會(huì)先調(diào)用__construct(魔術(shù)方法)。析構(gòu)方法是最后被執(zhí)行的,被自動(dòng)調(diào)用的方法
單例(單態(tài))singleton
——————————————————————————
PHP中
——————————————————————————
2.jQuery
包括javascript框架和prototype.js框架
選擇器:
1.基本選擇器:
①、$('#result')=jQuery('#result')=document.getElementById('result')
<div id='result'>
<div class='result'>
②、class選擇器 $('.result')
③、元素選擇器$('div')
2.子代選擇器:$('#myform < input')
3.后代選擇器:$('#myform input')
4.組合選擇器:$('#myform < span < input')
3.Ajax
ajax的用處是用來(lái)異步j(luò)s和xml 不僅可以獲取xml數(shù)據(jù),還可獲得hmtl和json數(shù)據(jù)
ajax的優(yōu)點(diǎn):1.提升用戶(hù)的體驗(yàn)2.占用帶寬小3.減小服務(wù)器的負(fù)載
ajax就是把B頁(yè)面的內(nèi)容,顯示到A頁(yè)面的指定位置,實(shí)現(xiàn)異步傳輸
$.ajax() 返回其創(chuàng)建的 XMLHttpRequest 對(duì)象。
$.ajax({
url:, data:, type:, datatype:, success:function(這個(gè)參數(shù)里,存在被傳回的頁(yè)面的所有內(nèi)容){} });
$.post('請(qǐng)求地址','傳遞參數(shù)','回調(diào)函數(shù)');
$.get('請(qǐng)求地址','傳遞參數(shù)','回調(diào)函數(shù)');
post傳值文件沒(méi)有大小限制,保密性好,必須有form表單
get傳值安全性不高,有大小限制
當(dāng)?shù)刂窓诶镉兄形臅r(shí),用urlencode(編碼 URL 字符串)
urlencode — 編碼 URL 字符串
urldecode(解碼已編碼的 URL 字符串)
4.會(huì)話(huà)控制
session:unset()和array() 是連同內(nèi)存和session文件內(nèi)容一起刪除,而session_destroy只是將文件刪除
cookie沒(méi)有生命周期的叫會(huì)話(huà)cookie,隨著瀏覽器的關(guān)閉,cookie消失
cookie有兩種存在方式,一種是以文件形式存在,另一種是保存在內(nèi)存里
cookie里面只能存字符串
會(huì)話(huà)控制主要是為了跨頁(yè)面?zhèn)髦?BR>序列化是把其他的類(lèi)型轉(zhuǎn)換成字符串類(lèi)型
5.smarty
代碼重用(include,require,include_once,require_once)
include require 比 require_once include_once 性能高
加載類(lèi)文件用 require_once(最好) include_once
6.PDO
dsn(data source name)
//數(shù)據(jù)源
$dsn = 'mysql:host=127.0.0.1;dbname=java1008a';
die('到此結(jié)束'); 等同于 echo '到此結(jié)束';die;
----------------------------------------------------------------------------------
2.b/s與c/s簡(jiǎn)單比較,區(qū)別:
--a、運(yùn)行環(huán)境不同(廣域網(wǎng)、局域網(wǎng))
--b、安全級(jí)別不同(低/高)
--c、用戶(hù)群不同(全部用戶(hù)/局部用戶(hù))
--d、系統(tǒng)升級(jí)不同(無(wú)縫升級(jí)/整體升級(jí))
--e、用戶(hù)開(kāi)啟不同(瀏覽器/特制軟件)
--f、軟件界面特點(diǎn)不同(信息流/用戶(hù)體驗(yàn))
比如:b/s就是網(wǎng)上的微博、博客;c/s就是在網(wǎng)吧打的網(wǎng)絡(luò)游戲(奇跡、傳奇等)
3.php是什么:運(yùn)行在服務(wù)器端的腳本語(yǔ)言
--Hypertext Preprocessor
--personal home page
4.php語(yǔ)言能做什么
--圖形化用戶(hù)界面程序
--服務(wù)器端運(yùn)行腳本程序
3.php外部變量$_POST[]、$_GET[];
特殊運(yùn)算符
'.'是連接符
".="是連接賦值
"@"屏蔽錯(cuò)誤信息 $link=@mySQl_connect(主機(jī),用戶(hù)名,密碼)
5.流程控制(順序、選擇、循環(huán))
******************************************************************************
******************************************************************************
第三單元【字符串】
1.字符串的三種定義方式(單引號(hào)、雙引號(hào)、定界符)
---單引號(hào)定義(轉(zhuǎn)義\'和\\)
---雙引號(hào)定義(轉(zhuǎn)義\n \r \t \$ \\ \")
---定界符方法<<<eof
2.函數(shù)部分
explode/implode
substr()**
str_replace/trim/ltrim/rtrim
strstr(str, search)獲得指定字符串最開(kāi)始出現(xiàn)到最后的內(nèi)容
strrchr(str, search)獲得指定字符串最后出現(xiàn)到最后的內(nèi)容
strpos(str, search)獲得指定字符串最開(kāi)始出現(xiàn)的位置
strrpos(str, search)獲得指定字符串最后出現(xiàn)的位置
ucfirst(str)將字符串第一個(gè)字母大寫(xiě)
ucwords(str)將字符串的每個(gè)單詞的第一個(gè)字母大寫(xiě)
strlen(str)獲得字符串長(zhǎng)度
strcmp(str1, str2)比較兩個(gè)字符串大小,
返回負(fù)數(shù)表示 str1 小于 str2;
返回正數(shù)表示 str1 大于 str2;
返回零表示二字符串相同
urlencode(str)替換所有非字母數(shù)字的字符,變?yōu)?后面跟兩位16進(jìn)制數(shù),空格變?yōu)?號(hào)
urldecode(str)對(duì)已%##編碼的URL進(jìn)行解析還原
parse_url(str)解析完整的url轉(zhuǎn)變?yōu)闉閿?shù)組
parse_str(str,out)解析請(qǐng)求字符串轉(zhuǎn)變?yōu)閿?shù)組
htmlspecialchars()轉(zhuǎn)換html代碼為實(shí)體代碼
printf/sprintf %b %d %c %x %s %f %X
– b 整數(shù)轉(zhuǎn)成二進(jìn)位。
– c 整數(shù)轉(zhuǎn)成對(duì)應(yīng)的 ASCII 字符。
– d 整數(shù)轉(zhuǎn)成十進(jìn)位。
– f 單倍精確度數(shù)字轉(zhuǎn)成浮點(diǎn)數(shù)。
– o 整數(shù)轉(zhuǎn)成八進(jìn)位。
– s 轉(zhuǎn)成字符串。
– x 整數(shù)轉(zhuǎn)成小寫(xiě)十六進(jìn)位。
– X 整數(shù)轉(zhuǎn)成大寫(xiě)十六進(jìn)位。
1.數(shù)組和棧的操作
array_push(目標(biāo)數(shù)組,字符串)將字符串壓入數(shù)組的最后
array_pop(目標(biāo)數(shù)組)將數(shù)組最后的元素彈出并返回
2.數(shù)組和隊(duì)列的操作
array_unshift(目標(biāo)數(shù)組,字符串)將字符串放到數(shù)組的開(kāi)始位置
array_shift(目標(biāo)數(shù)組)刪除數(shù)組的第一個(gè)元素并返回
3.數(shù)組和指針的操作key() current() next() prev() reset() end()
4.預(yù)定義數(shù)組($_GET $_POST $_FILES $_COOKIE $_SESSION)
******************************************************************************
******************************************************************************
第六單元【其他常用函數(shù)】
date(format,[timestamp])//格式化時(shí)間信息,并返回
time()//返回當(dāng)前時(shí)間戳信息
mktime(hour,minute,second,month,day,year)
mktime(小時(shí),分鐘,秒,月,天,年)//取得一個(gè)日期的 Unix 時(shí)間戳
max()//取得最大值
-echo max(1, 3, 5, 6, 7); // 7
-echo max(array(2, 4, 5)); // 5
-echo max(0, '1hello'); // 1hello
-echo max('hello', 0); // hello
-echo max(-1, 'hello'); // hello
-echo max(array(2, 4, 8), array(2, 5, 7)); // array(2, 5, 7)
-echo max('string', array(2, 5, 7), 42); // array(2, 5, 7)數(shù)組和非數(shù)組比較數(shù)組總認(rèn)為最大
mt_rand(65,94)//獲得隨機(jī)數(shù)
round()//四舍五入取整
flush()//輸出準(zhǔn)備區(qū)內(nèi)容
urlencode('張三')//返回字符串中,除了-_.之外的所有非字母數(shù)字部分為%后接兩位
16進(jìn)制數(shù),空格轉(zhuǎn)化為+
urldecode()//對(duì)已經(jīng)編碼的部分反編碼
var_dump()//輸出變量的詳細(xì)信息(八種數(shù)據(jù)類(lèi)型數(shù)據(jù)都可以輸出)
chr(mt_rand(65,94))隨機(jī)獲得字母
ord(chr(mt_rand(65,94)))將字母轉(zhuǎn)化為數(shù)字
basename(路徑名)獲得路徑中文件名部分
strtolower轉(zhuǎn)換小寫(xiě)
第七單元【php連接mysql】
*mysql_connect(主機(jī),用戶(hù)名,密碼) 打開(kāi)一個(gè)到 MySQL 服務(wù)器的連接
*mysql_select_db(數(shù)據(jù)庫(kù),連接數(shù)據(jù)庫(kù)資源) 選擇 MySQL 數(shù)據(jù)庫(kù)
*mysql_query("set names utf8");設(shè)定字符集
*mysql_close() 關(guān)閉 MySQL 鏈接
*mysql_query(語(yǔ)句) 發(fā)送并執(zhí)行一條sql語(yǔ)句
mysql_fetch_row(結(jié)果資源)從結(jié)果集中取得一行結(jié)果(索引數(shù)組)
mysql_fetch_assoc(結(jié)果資源)從結(jié)果集中取得一行結(jié)果(關(guān)聯(lián)數(shù)組)
*mysql_fetch_array(結(jié)果資源)從結(jié)果集中取得一行結(jié)果(索引/關(guān)聯(lián)數(shù)組)
mysql_fetch_object(結(jié)果資源)從結(jié)果集中取得一行結(jié)果(對(duì)象數(shù)組)
mysql_errno()返回錯(cuò)誤號(hào)碼
*mysql_error()返回錯(cuò)誤信息
*mysql_num_rows(結(jié)果資源)用于計(jì)算查詢(xún)結(jié)果中所得行的數(shù)目
*mysql_affected_rows()獲得受影響的結(jié)果數(shù)目
*mysql_insert_id()傳回最后一次使用 INSERT 指令產(chǎn)生的自動(dòng)增長(zhǎng) ID 值
mysql_result(結(jié)果集,索引行,字段)指定獲取結(jié)果
mysql_free_result(結(jié)果資源)釋放結(jié)果集
mysql_num_fields(結(jié)果資源)用于計(jì)算查詢(xún)結(jié)果中所得列的數(shù)目
mysql_fetch_field(結(jié)果資源)從結(jié)果集中取得列的結(jié)果,以對(duì)象形式返回
mysql_pconnect()永久連接數(shù)據(jù)庫(kù)
1.留言板建立數(shù)據(jù)庫(kù)bbs,建立兩張表leave_word和back_word(留言表和回復(fù)表)
leave_word:
字段 數(shù)據(jù)類(lèi)型
id int 主鍵、自增
title varchar(20) 標(biāo)題
content text 內(nèi)容
itime datetime 添加時(shí)間
back_word:
id int 主鍵、自增
leave_id int 外鍵(留言id)
content text 內(nèi)容
btime datetime 回復(fù)時(shí)間
4.刪除留言,對(duì)無(wú)效、無(wú)用的留言實(shí)現(xiàn)刪除功能(這時(shí)需要用get方式傳遞被刪除留言id值)
5.修改留言,對(duì)需要修改(get方式傳遞被刪除留言id值,再利用隱藏域方式傳遞給接收頁(yè)面)
6.留言詳細(xì)顯示功能,有的留言?xún)?nèi)容比較多,在明細(xì)頁(yè)面不可能全部顯示出來(lái)(這時(shí)利用get方式傳遞留言id)
7.在詳細(xì)頁(yè)面可以實(shí)現(xiàn)回復(fù)功能和回復(fù)留言展示,步驟:制作一個(gè)回復(fù)表單和接收數(shù)據(jù)頁(yè)面
3.構(gòu)造方法和析構(gòu)方法
構(gòu)造函數(shù):實(shí)例化對(duì)象首先第一個(gè)需要做的事情就是構(gòu)造函數(shù)。一個(gè)小孩出生到5歲之前,所有的事情都是父母幫助做的,包括起名字、穿衣服、吃飯等等。
析構(gòu)函數(shù):一個(gè)對(duì)象被使用完后需要做一些善后工作,這些善后工作是不需要人為干預(yù)的,例如資源釋放、變量刪除等。例如:一個(gè)小狗死后,主人非常愛(ài)惜它,就把它埋在了家后園的一顆樹(shù)下。小狗被埋這件事情是主人做的,不是狗做的。這就是析構(gòu)函數(shù)。
3.類(lèi)的重寫(xiě)
子類(lèi)和父類(lèi)之間的事情,就是說(shuō)父類(lèi)有的方法,子類(lèi)不但可以直接使用,還可以在子類(lèi)中
重新定義具體內(nèi)容,例如有一個(gè)父親會(huì)駕駛汽車(chē),那么他的兒子也會(huì)駕駛汽車(chē),但他的兒子
可以不駕駛汽車(chē),而駕駛飛機(jī),這就是類(lèi)方法的重寫(xiě)。
D 1.final(最后的)關(guān)鍵字使用
該關(guān)鍵字修飾的類(lèi)不能被繼承
該關(guān)鍵字修飾的方法不能被重寫(xiě)
2.static(靜態(tài))關(guān)鍵字使用(類(lèi)的內(nèi)部、外部、子類(lèi))
實(shí)例化對(duì)象在內(nèi)存中的分配有講到大的數(shù)據(jù)在內(nèi)存被分配到堆空間里邊?,F(xiàn)在有一個(gè)例子:有一個(gè)
"學(xué)生"這個(gè)類(lèi),里邊有一個(gè)成員屬性是"國(guó)家",標(biāo)識(shí)該對(duì)象是屬于哪個(gè)國(guó)家的,比如美國(guó)、英國(guó)、德國(guó)等 ,這個(gè)類(lèi)在實(shí)例化對(duì)象時(shí)候,每個(gè)對(duì)象在內(nèi)存中都會(huì)分配一個(gè)空間用于存放國(guó)家這個(gè)成員屬性,如果
有100個(gè)對(duì)象,那么在內(nèi)容中會(huì)分配100個(gè)相應(yīng)的空間。如果這個(gè)類(lèi)的使用對(duì)象是在"中國(guó)"境內(nèi),那么
每個(gè)對(duì)象的國(guó)家屬性就會(huì)是一樣的,即"中國(guó)",相應(yīng)的在內(nèi)存中會(huì)有100個(gè)空間存放100個(gè)相同的內(nèi)容
這會(huì)造成空間浪費(fèi),其實(shí)到這里我們可以知道100個(gè)相同的內(nèi)容用一個(gè)空間存放就可以,反正都是一樣的,
這就產(chǎn)生了靜態(tài)化概念"static"。
用static修飾的成員屬性,該屬性就不是對(duì)象的,而是類(lèi)的。
3.self和parent關(guān)鍵字使用
在類(lèi)的內(nèi)部訪(fǎng)問(wèn)類(lèi)中的成員(屬性和方法),可以用"$this",該關(guān)鍵字泛指對(duì)象,這是訪(fǎng)問(wèn)一般的類(lèi)
成員,如果訪(fǎng)問(wèn)的成員是用static關(guān)鍵字修飾的,就不能用"$this"了,因?yàn)橛胹tatic修飾的類(lèi)
成員是被類(lèi)本身?yè)碛?,不屬于任何?duì)象了,這時(shí)候需要用"self"關(guān)鍵字修飾 self::成員
在類(lèi)的外部訪(fǎng)問(wèn)類(lèi)本身?yè)碛械某蓡T可以這樣 類(lèi)名::成員屬性。
在子類(lèi)中訪(fǎng)問(wèn)父類(lèi)擁有的成員可以用parent關(guān)鍵字 parent::成員屬性
4.const(常量)關(guān)鍵字使用
在php中可以定義常量,類(lèi)外部用define定義,類(lèi)內(nèi)部用const定義。
常量的擁有者是類(lèi)本身,類(lèi)內(nèi)部訪(fǎng)問(wèn)常量用 self::常量
類(lèi)外部訪(fǎng)問(wèn)常量用 類(lèi)名::常量
子類(lèi)訪(fǎng)問(wèn)常量 parent::常量
6.魔術(shù)方法clone、__call、__autoload使用
clone:在一個(gè)項(xiàng)目里邊我們有時(shí)候需要兩個(gè)或多個(gè)完全一樣的初始化對(duì)象,這時(shí)候可以使用clone技術(shù)
不用clone技術(shù)也可以,不過(guò)每個(gè)新的對(duì)象都需要初始化屬性值,這樣比較繁瑣,也容易出錯(cuò),
使用clone就比較簡(jiǎn)單,克隆出來(lái)的多個(gè)對(duì)象彼此是獨(dú)立的,互不相干。
$p2 = clone $p1;
__call:在類(lèi)的使用過(guò)程中,如果一個(gè)對(duì)象調(diào)用的方法不在類(lèi)里邊,那么這時(shí)候程序要報(bào)錯(cuò),然后程序退
出不能繼續(xù)運(yùn)行。這樣做用戶(hù)體驗(yàn)非常不好,如果有一種方法可以使得程序報(bào)錯(cuò)完后可以繼續(xù)運(yùn)
行,這樣的程序給人更智能、用戶(hù)體驗(yàn)更好的感覺(jué),這時(shí)候就可以用__call
public function __call($method_name,$args){
echo "你訪(fǎng)問(wèn)的方法:";
echo $method_name;
echo "參數(shù):";
print_r($args);
echo "不存在";
}
__autoload:開(kāi)發(fā)一個(gè)軟件系統(tǒng),往往里邊會(huì)有很多類(lèi),在初始化類(lèi)對(duì)象之前需要先include這個(gè)對(duì)
象對(duì)應(yīng)的類(lèi)文件。所有的類(lèi)不能都放到一個(gè)文件(文件臃腫,不易維護(hù)),這樣就會(huì)在程
序開(kāi)始處有很多的include列表,這樣做非常繁瑣,出現(xiàn)一個(gè)新的類(lèi)就需要被include,
有沒(méi)有一種方法可以使得被include的類(lèi)文件在實(shí)例化對(duì)象時(shí)候才引入,否則不動(dòng)作,
答案是有的,這時(shí)候可以用魔術(shù)方法__autoload
function __autoload($className){
include($className.'.php');
}
8.子類(lèi)繼承父類(lèi)時(shí)候成員修飾符限制,子類(lèi)的修飾級(jí)別大于父類(lèi)。例如父類(lèi)的修飾符是protected,
則子類(lèi)修飾級(jí)別是protected或public。父類(lèi)是public的,子類(lèi)也必須是public的
1.抽象類(lèi)
在類(lèi)里邊定義的沒(méi)有方法體的方法就是抽象方法,有抽象方法的類(lèi)被稱(chēng)為抽象類(lèi)。抽象類(lèi)不能實(shí)例化對(duì)象。
所謂沒(méi)有方法體就是方法在聲明時(shí)候沒(méi)有花括號(hào)和里邊的內(nèi)容。
作用之處:
例如:我有一個(gè)類(lèi)"動(dòng)物",里邊有方法"吃食"(還可以有許多其他的方法)
動(dòng)物這個(gè)類(lèi)可以有許多子類(lèi)例如:狗、魚(yú)、鳥(niǎo)等,這些子類(lèi)有一個(gè)共性就是都有吃食這個(gè)方法
一般的解決方法是:定義3個(gè)類(lèi),里邊都有吃食方法。這樣實(shí)現(xiàn)沒(méi)有問(wèn)題的,但是如果其中一個(gè)
類(lèi)沒(méi)有吃食方法,這時(shí)候程序是不給報(bào)錯(cuò)的。我們現(xiàn)在要做的就是3個(gè)類(lèi)中任何一個(gè)沒(méi)有吃食方法
系統(tǒng)就要報(bào)錯(cuò)。這時(shí)候就需要用到抽象類(lèi)了。
抽象類(lèi)按照字面意思理解就是對(duì)3個(gè)類(lèi)的進(jìn)一步抽象。抽象出來(lái)吃食方法。
抽象類(lèi)技術(shù)特性:
a、抽象類(lèi)不能實(shí)例化
b、類(lèi)的成員方法是抽象的,則這個(gè)類(lèi)也是抽象的
c、抽象方法體內(nèi)沒(méi)有實(shí)現(xiàn)細(xì)節(jié),具體實(shí)現(xiàn)留給子類(lèi)實(shí)現(xiàn)
d、繼承抽象類(lèi)的子類(lèi)必須實(shí)現(xiàn)父類(lèi)的抽象類(lèi),除非自己也是抽象類(lèi)。
2.接口(插座實(shí)例)
當(dāng)一個(gè)抽象類(lèi)里邊的全部方法都是抽象方法時(shí)候,這個(gè)抽象類(lèi)就是"接口"。
接口技術(shù)特性:
a、interface聲明
b、全部接口方法是public的,因此可以省略
c、接口只定義方法,沒(méi)有具體方法實(shí)現(xiàn)
d、實(shí)現(xiàn)類(lèi)用implements實(shí)現(xiàn)接口,全部接口方法都要實(shí)現(xiàn)
e、接口可以多實(shí)現(xiàn),中間用逗號(hào)分開(kāi)
f、接口是對(duì)抽象類(lèi)的抽象,抽象類(lèi)是對(duì)類(lèi)的抽象,類(lèi)是對(duì)事物的抽象。
g、接口不能實(shí)例化
(1)、抽象類(lèi)和接口有什么不同
抽象類(lèi)只能單繼承,接口可以多實(shí)現(xiàn)
抽象類(lèi)里面可以有抽象方法和普通方法,而接口里只有抽象方法
抽象類(lèi)里面可以有自己的屬性,而接口里面只能有常量
接口里面的方法必須是public的,而抽象類(lèi)不同
(2)、抽象類(lèi)和接口的相似之處
抽象類(lèi)里面的抽象方法在繼承的時(shí)候必須都要重寫(xiě),接口里面的方法也必須都要實(shí)現(xiàn)。
抽象類(lèi)和接口都不能直接實(shí)例化,
抽象類(lèi)需要繼承(extends),接口需要實(shí)現(xiàn)(implements)。
抽象類(lèi)和接口都體現(xiàn)了多態(tài)的特性。
3.jquery
jquery是js的封裝包,里邊有很多集成的函數(shù)可以讓我們使用,jquery的宗旨就是寫(xiě)更少的代碼實(shí)現(xiàn)更多的功能
使用的方法:
1.引進(jìn)jquery包
<script type="text/javascript" src='jquery-1.4.2.js'><script>
2.測(cè)試jquery是否加載成功
$(function(){
alert("jquey加載成功");
})
3.獲取頁(yè)面的元素
$('#div');通過(guò)id獲取頁(yè)面元素
$('.div');通過(guò)class獲取頁(yè)面元素
jquery中的事件
1.$('#mydiv').click(function(){});鼠標(biāo)點(diǎn)擊事件【要寫(xiě)在onload事件里邊】
2.$('#mydiv').hover(function(){},function(){});鼠標(biāo)移動(dòng)到對(duì)象事件
3.$('#mydiv').attr();獲得對(duì)象屬性信息
4.$('#mydiv').attr('checked');查看單復(fù)選框的選定情況!
5.$('#mydiv').css();獲得對(duì)象的屬性信息
6.$('#mydiv').css(樣式,值);給對(duì)象賦予樣式
7.$('#mydiv').addClass('trb');給元素class屬性賦值trb;
8.$('#mydiv').removeClass('trb');使元素失去class屬性;
9.$('#mydiv').submit(function(){});提交事件;
10.$('#mydiv').keyup(function(){});鍵盤(pán)敲擊事件;
在項(xiàng)目中的使用:表單的驗(yàn)證
相關(guān)文章
詳解PHP Swoole長(zhǎng)連接常見(jiàn)問(wèn)題
長(zhǎng)連接就是指在基于tcp的通訊中,一直保持連接,不管當(dāng)前是否發(fā)送或者接收數(shù)據(jù)。本文將詳細(xì)介紹PHP Swoole長(zhǎng)連接的常見(jiàn)問(wèn)題。2021-05-05php中g(shù)et_defined_constants函數(shù)用法實(shí)例分析
這篇文章主要介紹了php中g(shù)et_defined_constants函數(shù)用法,實(shí)例分析了get_defined_constants函數(shù)的功能、定義及使用技巧,需要的朋友可以參考下2015-05-05PHP開(kāi)發(fā)中的錯(cuò)誤收集,不定期更新。
PHP開(kāi)發(fā)中的錯(cuò)誤收集,不定期更新。 php開(kāi)發(fā)的朋友需要用得到。2011-02-02PHP大小寫(xiě)問(wèn)題:函數(shù)名和類(lèi)名不區(qū)分,變量名區(qū)分
這篇文章主要介紹了PHP大小寫(xiě)問(wèn)題,php中變量名是區(qū)分大小寫(xiě)的,而函數(shù)名與類(lèi)名是不區(qū)分的2013-06-06PHP實(shí)現(xiàn)簡(jiǎn)單ajax Loading加載功能示例
這篇文章主要介紹了PHP實(shí)現(xiàn)簡(jiǎn)單ajax Loading加載功能的方法,結(jié)合實(shí)例形式分析了ajax加載的原理、操作技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-12-12詳解PHP中時(shí)間處理類(lèi)Carbon常用方法的使用
Carbon是php的日期處理類(lèi)庫(kù),繼承了PHP的Datetime類(lèi)。本文為大家詳細(xì)介紹了Carbon中常用的一些方法的使用,感興趣的小伙伴可以了解一下2022-05-05php實(shí)現(xiàn)將上傳word文件轉(zhuǎn)為html的方法
這篇文章主要介紹了php實(shí)現(xiàn)將上傳word文件轉(zhuǎn)為html的方法,涉及php針對(duì)word文件操作的相關(guān)技巧,需要的朋友可以參考下2015-06-06使用php語(yǔ)句將數(shù)據(jù)庫(kù)*.sql文件導(dǎo)入數(shù)據(jù)庫(kù)
這篇文章主要介紹了如何使用php語(yǔ)句將數(shù)據(jù)庫(kù)*.sql文件導(dǎo)入數(shù)據(jù)庫(kù),需要的朋友可以參考下2014-05-05