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