您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“PHP/Javascript/CSS/jQuery常用知識(shí)有哪些”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“PHP/Javascript/CSS/jQuery常用知識(shí)有哪些”這篇文章吧。
1. 變量如何定義?如何檢查變量是否定義?如何刪除一個(gè)變量?怎樣檢測(cè)變量是否設(shè)置?
$定義 isset()// 檢測(cè)變量是否設(shè)置
defined()// 檢測(cè)常量是否設(shè)置
unset()//銷(xiāo)毀指定的變量
empty()// 檢測(cè)變量是否為空
2. 什么是可變變量?
一個(gè)變量的變量名可以動(dòng)態(tài)的設(shè)置和使用。
$a = 'hello' , $$a = 'world', ${$a}=hello world
3. 變量賦值方式有哪幾種?
1)直接賦值 2)變量間賦值 3)引用賦值
4. 引用和拷貝有什么區(qū)別?
拷貝是將原來(lái)的變量?jī)?nèi)容復(fù)制下來(lái),拷貝后的變量與原來(lái)的變量使用各自的內(nèi)存,互不干擾。
引用相當(dāng)于是變量的別名,其實(shí)就是用不同的名字訪問(wèn)同一個(gè)變量?jī)?nèi)容。當(dāng)改變其中一個(gè)變量的值時(shí),另一個(gè)也跟著發(fā)生變化。
5. php中變量有哪些基本數(shù)據(jù)類(lèi)型?
php支持8種原始數(shù)據(jù)類(lèi)型包括:
四種標(biāo)量類(lèi)型(布爾型boolean,整型interger,浮點(diǎn)型float/double , 字符串string)
兩種復(fù)合類(lèi)型(數(shù)組array , 對(duì)象object)
兩種特殊類(lèi)型(資源resource,NULL)
6. 其它類(lèi)型轉(zhuǎn)換為boolean類(lèi)型時(shí),哪些被認(rèn)為是false?
布爾值false,整型值0, 浮點(diǎn)型值0.0, 空白字符串, 字符串'0', 空數(shù)組,特殊數(shù)據(jù)類(lèi)型NULL, 沒(méi)有設(shè)定的變量。
empty()函數(shù)在哪些情況下返回true?
布爾值false,整型值0, 浮點(diǎn)型值0.0, 空白字符串, 字符串'0', array()空數(shù)組,特殊數(shù)據(jù)類(lèi)型NULL, 沒(méi)有任何屬性的對(duì)象,沒(méi)有賦值的變量。
7. 如果定義了一個(gè)變量$a ,但是沒(méi)有賦初始值
那么$a==0嗎? $a==false嗎? $a==''嗎?
$a==NULL嗎? $a===NULL嗎? 答:echo=>什么都沒(méi)有 , var_dump=>NULL
empty($b)==true嗎?———————————— echo=>1 , var_dump=>bool(true)
此時(shí)如果輸出$a++是多少?——————— echo=>什么都沒(méi)有 , var_dump=>NULL
如果輸出++$a又是多少?————————— echo=>1 , var_dump=>int(1)
8. 字符串怎么轉(zhuǎn)成整數(shù),有幾種方法?怎么實(shí)現(xiàn)?
強(qiáng)制類(lèi)型轉(zhuǎn)換: (整型)字符串變量名;
直接轉(zhuǎn)換:settype(字符串變量,整型);
intval(字符串變量);
9. 標(biāo)量數(shù)據(jù)和數(shù)組的最大區(qū)別是什么?
一個(gè)標(biāo)量只能存放一個(gè)數(shù)據(jù),而數(shù)組可以存放多個(gè)數(shù)據(jù)。
10. 常量如何定義? 如何檢測(cè)一個(gè)常量是否被定義?常量的值只能是哪些數(shù)據(jù)類(lèi)型?
define()//定義常量 , defined()//檢查常量是否定義
常量的值只能是標(biāo)量類(lèi)型的數(shù)據(jù)。
11. 常量分為系統(tǒng)內(nèi)置常量和自定義常量。請(qǐng)說(shuō)出最常見(jiàn)的幾個(gè)系統(tǒng)內(nèi)置常量?
__FILE__ , __LINE__ , PHP_OS , PHP_VERSION
12. 如果定義了兩個(gè)相同的常量,前者和后者哪個(gè)起作用?
前者起作用,因?yàn)槌A恳坏┒x就不能被重新定義或者取消定義。
13. 常量和變量有哪些區(qū)別?
1)常量前沒(méi)有$符號(hào);
2)常量只能通過(guò)define()定義,而不能通過(guò)賦值語(yǔ)句定義;
3)常量可以在任何地方定義和訪問(wèn),而變量有全局和局部之分;
4)常量一旦定義就不能被重新定義或者取消定義,而變量而通過(guò)賦值方式重新定義;
5)常量的值只能是標(biāo)量數(shù)據(jù),而變量的數(shù)據(jù)庫(kù)類(lèi)型有8種原始數(shù)據(jù)類(lèi)型。
14. PHP中常用的幾個(gè)預(yù)定義的全局?jǐn)?shù)組變量是哪些?
有9大預(yù)定義的內(nèi)置數(shù)組變量:
$_POST, $_GET, $_REQUEST, $_SESSION, $_COOKIE, $_FILES,$_SERVER, $_ENV, $GLOBALS
15. 在實(shí)際開(kāi)發(fā)中,常量最常用于哪些地方?
1)連接數(shù)據(jù)庫(kù)的信息定義成常量,如數(shù)據(jù)庫(kù)服務(wù)器的用戶(hù)名、密碼、數(shù)據(jù)庫(kù)名、主機(jī)名;
2)將站點(diǎn)的部分路徑定義成常量,如web絕對(duì)路徑,smarty的安裝路徑,model、view或者controller的文件夾路徑;
3)網(wǎng)站的公共信息,如網(wǎng)站名稱(chēng),網(wǎng)站關(guān)鍵詞等信息。
16. 函數(shù)的優(yōu)越性有哪些?
提高程序的可維護(hù)性 提高軟件的可靠性 提高程序的可重用性 提高程序的開(kāi)發(fā)效率
17. 如何定義一個(gè)函數(shù)?函數(shù)名區(qū)分大小寫(xiě)嗎?
1)使用 function 關(guān)鍵字;
2)函數(shù)命名規(guī)則和變量一樣,以字母或者下劃線開(kāi)頭,而不能以數(shù)字開(kāi)頭;
3)函數(shù)名不區(qū)分大小寫(xiě);
4)函數(shù)名不可以使用已經(jīng)聲明過(guò)的或者系統(tǒng)自建的函數(shù)名稱(chēng)。
18. 什么是變量的能見(jiàn)度 或者 說(shuō)是變量作用域?
就是變量在程序中的可作用范圍。根據(jù)變量的能見(jiàn)度,變量分為局部變量和全局變量。
19. 什么是局部變量和全局變量?函數(shù)內(nèi)是否可以直接調(diào)用全局變量?
局部變量是函數(shù)內(nèi)部定義的變量,其作用域是所在的函數(shù)。如果函數(shù)外還有一個(gè)跟局部變量名字一樣的變量,程序會(huì)認(rèn)為它們兩個(gè)是完全不同的兩個(gè)變量。當(dāng)退出函數(shù)的時(shí)候,其中的局部變量就同時(shí)被清除。全局變量是定義在所有函數(shù)以外的變量,其作用域是整個(gè)php文件,但是在用戶(hù)自定義的函數(shù)內(nèi)部是無(wú)法使用的。如果一定要在用戶(hù)自定義的函數(shù)內(nèi)部使用全局變量,那么就需要使用global關(guān)鍵字聲明。也就是說(shuō)如果在函數(shù)內(nèi)的變量前加上golbal來(lái)修飾,那么函數(shù)內(nèi)部就可以訪問(wèn)到這個(gè)全局變量,不僅可以利用這個(gè)全局變量進(jìn)行運(yùn)算而且可以對(duì)這個(gè)全局變量進(jìn)行重新賦值。全局變量還可以使用 $GLOBALS['var'] 來(lái)調(diào)用。
21. 什么是靜態(tài)變量?
如果一個(gè)函數(shù)內(nèi)定義的變量前使用關(guān)鍵字static來(lái)聲明,那么該變量就是靜態(tài)變量。
一般函數(shù)內(nèi)的變量在函數(shù)調(diào)用結(jié)束后,其存儲(chǔ)的數(shù)據(jù)將被清除,所占的內(nèi)存空間也被釋放。而使用靜態(tài)變量時(shí),該變量會(huì)在函數(shù)第一次被調(diào)用時(shí)被初始化,初始化后該變量也不會(huì)被清除,當(dāng)再次調(diào)用該函數(shù)時(shí),這個(gè)靜態(tài)變量不再被初始化,而能保存上次函數(shù)執(zhí)行完后的值??梢哉f(shuō)靜態(tài)變量在所有對(duì)該函數(shù)的調(diào)用之間共享。
22. php中函數(shù)傳遞參數(shù)的方式有哪些??jī)烧哂惺裁磪^(qū)別?
按值傳遞和按地址傳遞(或按引用傳遞)
(1)按值傳遞: 待傳遞的變量,與傳遞給函數(shù)之后的變量是存儲(chǔ)在不同的空間中。所以函數(shù)體內(nèi)對(duì)
該變量值做的修改,不影響原本的變量值。
(2)按地址傳遞: 使用 & 符號(hào),表明該參數(shù)是以地址的方式傳遞值。并不會(huì)將主程序中的指定數(shù)值或目標(biāo)變量傳遞給函數(shù),而是把該數(shù)值或變量的內(nèi)存儲(chǔ)存區(qū)塊地址導(dǎo)入函數(shù)之中,所以函數(shù)體內(nèi)的該變量和主程序中的該變量在內(nèi)存中是同一個(gè)。函數(shù)體做的修改,直接影響到函數(shù)體外部的該變量的值。
23. 什么是遞歸函數(shù)?如何進(jìn)行遞歸調(diào)用?
遞歸函數(shù)其實(shí)就是調(diào)用自身的函數(shù),但是必須滿足以下兩個(gè)條件:
1)在每一次調(diào)用自身時(shí),必須是更接近于最終結(jié)果;
2)必須有一個(gè)確定的遞歸終止條件,不會(huì)造成死循環(huán)。
舉例說(shuō)明:
在實(shí)際工作中往往會(huì)在遍歷文件夾的時(shí)候使用。
如果有個(gè)例子是希望獲取到目錄windows下所有的文件,那么先遍歷windows目錄,如果發(fā)現(xiàn)其中還有文件夾,那么就會(huì)調(diào)用自身,繼續(xù)往下尋找,依次類(lèi)推,
直到遍歷到再也沒(méi)有文件夾為止,這也就是意味著遍歷出來(lái)了所有的文件。
24. 判斷一個(gè)函數(shù)是否存在?
function_exists( string $function_name ) 如果存在,返回true, 不存在則返回 false。
25. func()和@func()之間有什么區(qū)別?
第二個(gè)函數(shù)調(diào)用失敗不會(huì)報(bào)錯(cuò),第一個(gè)會(huì)報(bào)錯(cuò)
26. include()和require()函數(shù)的用法和區(qū)別是什么?include_once()和require_once()呢?
include和require出現(xiàn)錯(cuò)誤后的錯(cuò)誤級(jí)別不一樣
include_once()和require_once()在加載之前要判斷是否已經(jīng)導(dǎo)入
27. 說(shuō)出前置++和后置++的區(qū)別?
前置++是先將變量增加1,然后在將值賦值給原來(lái)的變量;
后置++是先返回變量的當(dāng)前值,然后再將變量的當(dāng)前值增加1.
28. 字符串運(yùn)算符“.”與算術(shù)運(yùn)算符“+”有什么區(qū)別?
當(dāng)“a”“b”之間使用.時(shí)認(rèn)為是連字符。如果兩者間是+的時(shí)候php會(huì)認(rèn)為是一次運(yùn)算。
1)如果+號(hào)兩邊的字符串是數(shù)字組成的,那么會(huì)將字符串自動(dòng)轉(zhuǎn)為整型;
2)如果+號(hào)兩邊是純粹的字母,那么會(huì)輸出0;
3)如果+號(hào)兩邊的字符串是以數(shù)字開(kāi)頭的,那么會(huì)截取字符串開(kāi)頭的數(shù)字,然后進(jìn)行運(yùn)算。
29. 什么是三目(或三元)運(yùn)算符?
根據(jù)一個(gè)表達(dá)式的結(jié)果在另兩個(gè)表達(dá)式中選擇一個(gè)。
例如: ($a==true) ? 'good':'bad';
30. 控制流程語(yǔ)句有哪些?
1:三種程序結(jié)構(gòu) 順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)
2:分支: if/esle/esleif/ switch/case/default
3: switch 需要注意的:
case子句中的常量可以是整型、字符串型常量、 或者常量表達(dá)式,不允許是變量。
同一個(gè)switch子句中,case的值不能相同,否則只能取到首次出現(xiàn)case中的值。
4: 循環(huán) for while do...while
do...while 后面必須加入分號(hào)結(jié)尾。
while 和 do...while 的區(qū)別
5:break 和 continue 的區(qū)別。
break可以終止循環(huán)。
continue沒(méi)有break強(qiáng)大,只能終止本次循環(huán)而進(jìn)入到下一次循環(huán)中。
31. 數(shù)組的概念是什么?數(shù)組根據(jù)索引分為哪兩種,如何區(qū)分?數(shù)組的賦值方式有哪兩種?
數(shù)組是一個(gè)可以存儲(chǔ)一組或一系列數(shù)值的變量(復(fù)合型變量)
索引數(shù)組(索引值為數(shù)字,以0開(kāi)始)和關(guān)聯(lián)數(shù)組(以字符串作為索引值)
數(shù)組的賦值方式有哪兩種?
數(shù)組的聲明方式主要有兩種。
1.通過(guò)array()函數(shù)聲明數(shù)組;
可以通過(guò)key=>value的方式分別定義索引和值,也可以不定義數(shù)組的索引下標(biāo),只給出數(shù)組的元素值。
2.直接為數(shù)組元素賦值,不需要調(diào)用array()函數(shù)。例如:
$arr[0] = 1; $arr[1] = 2;
特別注意:
數(shù)組的下標(biāo)如果是等價(jià)于整數(shù)的字符串值(但不能以0開(kāi)頭),則會(huì)被當(dāng)作整數(shù)對(duì)待。
例如: $array[3] 與 $array['3'] 引用的是相同的一個(gè)元素,而 $array['03'] 引用的則就是另外的一個(gè)元素了。
32.數(shù)組如何遍歷?
①for循環(huán)
②foreach循環(huán) ,這是最常用的遍歷方式。用法如下:foreach($arr as $key=>$value){}
③list each 和while 配合起來(lái)循環(huán)
33. foeach數(shù)組的時(shí)候指針是如何指向的?
list()/each()/while()循環(huán)數(shù)組的時(shí)候指針如何指向的呢?
當(dāng)foreach開(kāi)始執(zhí)行的時(shí)候,數(shù)組內(nèi)部的指針會(huì)自動(dòng)指向第一個(gè)單元。因?yàn)閒oreach所操作的是指定數(shù)組的拷貝,而不是該數(shù)組本身。而each()一個(gè)數(shù)組后,數(shù)組指針將停留在數(shù)組中的下一個(gè)單元或者碰到數(shù)組結(jié)尾時(shí)停留在最后一個(gè)單元。如果要再次使用each()遍歷數(shù)組,必須要使用reset().
reset()將數(shù)組的內(nèi)部指針倒回到第一個(gè)單元并返回第一個(gè)數(shù)組單元的值。
34. 如何計(jì)算數(shù)組長(zhǎng)度(或者說(shuō)計(jì)算數(shù)組中所有元素的個(gè)數(shù))?字符串怎么取長(zhǎng)度?
count() -- 計(jì)算數(shù)組中的元素個(gè)數(shù)。
可以使用count(數(shù)組名)或者count(數(shù)組名,1),如果有第二個(gè)參數(shù),并且是數(shù)字1,則表示遞歸統(tǒng)計(jì)數(shù)組元素的個(gè)數(shù)。如果第二個(gè)參數(shù)是數(shù)字0,則等同于只有一個(gè)參數(shù)的count()函數(shù)。
sizeof() -- count() 的別名(count — 計(jì)算數(shù)組中的單元數(shù)目或?qū)ο笾械膶傩詡€(gè)數(shù))
字符串:strlen()— 獲取字符串長(zhǎng)度
mb_strlen()— Get string length
35. 數(shù)組中相關(guān)的常用函數(shù)有哪些?
1) count --(sizeof別名)— 計(jì)算數(shù)組中的單元數(shù)目或?qū)ο笾械膶傩詡€(gè)數(shù)
例如:int count ( mixed $var [, int $mode ] ) $var 通常都是數(shù)組類(lèi)型,任何其它類(lèi)型都只有一個(gè)單元。 $mode 默認(rèn)值為0. 1為開(kāi)啟遞歸地對(duì)數(shù)組計(jì)數(shù)
2) in_array ( mixed $needle , array $haystack [, bool $strict ] ) — 檢查數(shù)組中是否存在某個(gè)值。如果 needle 是字符串,則比較是區(qū)分大小寫(xiě)的。如果第三個(gè)參數(shù) strict 的值為 TRUE 則 in_array() 函數(shù)還會(huì)檢查 needle 的類(lèi)型是否和 haystack 中的相同。
3) array_merge(array $array1 [, array $array2 [, array $... ]] ) 將一個(gè)或多個(gè)數(shù)組的單元合并起來(lái),一個(gè)數(shù)組中的值附加在前一個(gè)數(shù)組的后面。返回作為結(jié)果的數(shù)組。
特別注意:如果輸入的數(shù)組中有相同的字符串鍵名,則該鍵名后面的值將覆蓋前一個(gè)值。然而,如果數(shù)組包含數(shù)字鍵名,后面的值將不會(huì)覆蓋原來(lái)的值,而是附加到后面。
如果只給了一個(gè)數(shù)組并且該數(shù)組是數(shù)字索引的,則鍵名會(huì)以連續(xù)方式重新索引
4) 數(shù)組與字符串之間的轉(zhuǎn)換
(1)explode ( string $separator , string $string [, int $limit ] ) 使用一個(gè)分隔字符來(lái)分隔一個(gè)字符串。
(2)implode ( string $glue , array $arr ) 使用一個(gè)連接符將數(shù)組中的每個(gè)單元連接為一個(gè)字符串。join 為 implode 的別名
5) sort(array &$array [, int $sort_flags ]) — 對(duì)數(shù)組按照值排序,當(dāng)本函數(shù)結(jié)束時(shí)數(shù)組單元將被從最低到最高重新安排。
36. 數(shù)組合并函數(shù)array_merge()和數(shù)組加法運(yùn)算$arr + $arr2 的區(qū)別是什么?
array_merge()->使用array_merge(),如果是關(guān)聯(lián)數(shù)組合并,如果數(shù)組的鍵名相同,那么后面的值將覆蓋前者;如果是數(shù)字索引數(shù)組合并,則不覆蓋,而是后者附加到前者后面。"+"->使用數(shù)組加法運(yùn)算,與array_merge()不同,加法運(yùn)算不管是關(guān)聯(lián)數(shù)組還是數(shù)字索引數(shù)組,都是將相同鍵名的的值舍棄,也就是只保留首次出現(xiàn)該鍵名的元素,后來(lái)的具有相同鍵名的元素都不會(huì)被加進(jìn)來(lái)。
37. 字符串定義的時(shí)候單引號(hào)和雙引號(hào)有什么區(qū)別?
單引號(hào)加載速度比雙引號(hào)加載速度快
38. echo(),print(),print_r()的區(qū)別?
(1)echo 是語(yǔ)法,Output one or more strings,沒(méi)有返回值;
(2)print 是函數(shù),不能輸出數(shù)組和對(duì)象,Output a string,print有返回值;
(3)print_r 是函數(shù),可以輸出數(shù)組。print_r是個(gè)比較有意思的函數(shù),可以輸出stirng、int、float、 array、object等,輸出array時(shí)會(huì)用結(jié)構(gòu)表示,print_r輸出成功時(shí)返回true;而且print_r可以通過(guò)print_r($str,true)來(lái),使print_r不輸出而返回print_r處理后的值。此外,對(duì)于echo和print,基本以使用echo居多,因?yàn)槠湫时萷rint要高。
39. 按照功能分類(lèi)說(shuō)說(shuō)都有哪些字符串處理函數(shù)?這些函數(shù)的作用是什么?
A. 字符串輸出函數(shù)
(1)echo $a,$b,$c......; 是一個(gè)語(yǔ)言結(jié)構(gòu),而不是一個(gè)真正的函數(shù)。
(2)print($a) 本函數(shù)輸出字符串。若成功則返回 1,失敗返回 0
(3)print_r($a)
(4)var_dump($a); 能輸出類(lèi)型、長(zhǎng)度、值
B. 去除字符串首尾空格的函數(shù): trim ltrim rtrim(別名:chop) 使用第二個(gè)參數(shù),還可以去除指定的字符。
C. 轉(zhuǎn)義字符串函數(shù):addslashes()
D. 獲取字符串長(zhǎng)度的函數(shù):strlen()
E. 截取字符串長(zhǎng)度的的函數(shù):substr()
F. 檢索字符串函數(shù): strstr() , strpos()
G. 替換字符串函數(shù):str_replace()
40. 請(qǐng)給出以下問(wèn)題的正確答案?
1).$arr = array('james', 'tom', 'symfony');請(qǐng)將$arr數(shù)組的值用','分割并合并成字符串輸出? echo implode(‘,',$arr);
2).$str = ‘jack,james,tom,symfony'; 請(qǐng)將$str用','分割,并把分割后的值放到$arr數(shù)組中? $arr = explode(‘,',$str);
3).$arr = array(3,7,2,1,'d','abc'); 請(qǐng)將$arr按照從大到小的順序排序,并保持其鍵值不變? arsort($arr); print_r($arr);
4).$mail = “gaofei@163.com”; 請(qǐng)將此郵箱的域(163.com)取出來(lái)并打印,看最多能寫(xiě)出幾種方法?
echo strstr($mail,'163');
echo substr($mail,7);
$arr = explode("@",$mail); echo $arr[1];
5). 如果有一個(gè)字符串,該字符串是“123,234,345,”。請(qǐng)問(wèn)如何切割掉這個(gè)字符串最后一個(gè)逗號(hào)?
6). 獲取隨機(jī)數(shù)的函數(shù)有哪幾個(gè)?mt_rand() 和 rand()哪個(gè)執(zhí)行速度快?
41.頁(yè)面字符出現(xiàn)亂碼,怎么解決?
1.首先考慮當(dāng)前文件是不是設(shè)置了字符集。查看是不是meta標(biāo)簽中寫(xiě)了charset,如果是php頁(yè)面還可以看看是不是
在header()函數(shù)中指定了charset;
例如:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
header(“content-type:text/html;charset=utf-8”);
2.如果設(shè)置了字符集(也就是charset),那么判斷當(dāng)前文件保存的編碼格式是否跟頁(yè)面設(shè)置的字符集保持一致,
兩者必須保持統(tǒng)一;
3.如果涉及到從數(shù)據(jù)庫(kù)提取數(shù)據(jù),那么判斷數(shù)據(jù)庫(kù)查詢(xún)時(shí)的字符集是否跟當(dāng)前頁(yè)面設(shè)置的字符集一致,兩者必須統(tǒng)一,
例如:mysql_query(“set names utf8”)。
42. 正則表達(dá)式是什么?php中有哪些常用的跟正則相關(guān)的函數(shù)?請(qǐng)寫(xiě)出一個(gè)email的正則,中國(guó)手機(jī)號(hào)碼和座機(jī)號(hào)碼的正則表達(dá)式?
正則表達(dá)式是用于描述字符排列模式的一種語(yǔ)法規(guī)則。正則表達(dá)式也叫做模式表達(dá)式。
網(wǎng)站開(kāi)發(fā)中正則表達(dá)式最常用于表單提交信息前的客戶(hù)端驗(yàn)證。
比如驗(yàn)證用戶(hù)名是否輸入正確,密碼輸入是否符合要求,email、手機(jī)號(hào)碼等信息的輸入是否合法
在php中正則表達(dá)式主要用于字符串的分割、匹配、查找和替換操作。
preg系列函數(shù)可以處理。具體有以下幾個(gè):
string preg_quote ( string str [, string delimiter] )
轉(zhuǎn)義正則表達(dá)式字符 正則表達(dá)式的特殊字符包括:. \\ + * ? [ ^ ] $ ( ) { } = ! < > | :。
preg_replace -- 執(zhí)行正則表達(dá)式的搜索和替換
mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit]
preg_replace_callback -- 用回調(diào)函數(shù)執(zhí)行正則表達(dá)式的搜索和替換
mixed preg_replace_callback ( mixed pattern, callback callback, mixed subject [, int limit] )
preg_split -- 用正則表達(dá)式分割字符串
array preg_split ( string pattern, string subject [, int limit [, int flags]] )
常用的正則表達(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~!@#$%^&(){}]*)$/
44. preg_replace()和 str_ireplace()兩個(gè)函數(shù)在使用上有什么不同?preg_split()和split()函數(shù)如何使用?
preg_replace — 執(zhí)行正則表達(dá)式的搜索和替換
str_ireplace — str_replace() 的忽略大小寫(xiě)版本 str_replace — 子字符串替換
preg_split — 用正則表達(dá)式分割字符串
split — 用正則表達(dá)式將字符串分割到數(shù)組中
45. 獲取當(dāng)前時(shí)間戳的函數(shù)主要有哪些?用PHP打印出今天的時(shí)間,格式是2010-12-10 22:21:21?
用PHP打印出前一天的時(shí)間格式是2010-12-10 22:21:21?如何把2010-12-25 10:30:25變成unix時(shí)間戳?
echo date ("Y-m-d H:i:s" ,strtotime(‘-1,days'));
date('Y-m-d H:i:s',time());
$unix_time = strtotime("2009-9-2 10:30:25");//變成unix時(shí)間戳
echo date("Y-m-d H:i:s",$unix_time);//格式化為正常時(shí)間格式
46. 在url中用get傳值的時(shí)候,若中文出現(xiàn)亂碼,應(yīng)該用哪個(gè)函數(shù)對(duì)中文進(jìn)行編碼?
用戶(hù)在網(wǎng)站表單提交數(shù)據(jù)的時(shí)候,為了防止腳本攻擊(比如用戶(hù)輸入<script>alert(111);</script>),php端接收數(shù)據(jù)的時(shí)候,應(yīng)該如何處理?
使用urlencode()對(duì)中文進(jìn)行編碼,使用urldecode()來(lái)解碼。
使用htmlspecialchars($_POST[‘title'])來(lái)過(guò)濾表單傳參就可以避免腳本攻擊。
48. 說(shuō)說(shuō)mysql_fetch_row() 和mysql_fetch_assoc()和mysql_fetch_array之間有什么區(qū)別?
第一個(gè)是返回結(jié)果集中的一行作為索引數(shù)組,第二個(gè)是返回關(guān)聯(lián)數(shù)組,而第三個(gè)既可以返回索引數(shù)組也可以返回關(guān)聯(lián)數(shù)組,取決于它的第二個(gè)參數(shù) MYSQL_BOTH MYSQL_NUM MYSQL_ASSOC 默認(rèn)為MYSQL_BOTH
$sql =”select * from table1”;
$result = mysql_query($sql);
mysql_fetch_array($result, MYSQL_NUM);
49. 請(qǐng)說(shuō)出目前學(xué)過(guò)的返回是資源的函數(shù)?
答: fopen(打開(kāi)文件)
imagecreatefromjpeg(png gif) — 從 JPEG 文件新建一圖像
imagecreatetruecolor — 新建一個(gè)真彩色圖像
imagecopymerge — 拷貝并合并圖像的一部分
imagecopyresized — 拷貝部分圖像并調(diào)整大小
mysql_connect — 打開(kāi)一個(gè)到 MySQL 服務(wù)器的連接
mysql_query();只有這執(zhí)行select的時(shí)候成功,才返回資源,失敗返回FALSE
50. 打開(kāi)、關(guān)閉文件分別是什么函數(shù)? 文件讀寫(xiě)是什么函數(shù)?刪除文件是哪個(gè)函數(shù)?
判斷一個(gè)文件是否存在是哪個(gè)函數(shù)?新建目錄是哪個(gè)函數(shù)?
51. 文件上傳需要注意哪些細(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" 的表單控件;
6.要注意上傳文件的大小MAX_FILE_SIZE、文件類(lèi)型是否符合要求,上傳后存放的路徑是否存在。
可以通過(guò)上傳的文件名獲取到文件后綴,然后使用時(shí)間戳+文件后綴的方式為文件重新命名,這樣就避免了重名??梢宰约涸O(shè)置上傳文件的保存目錄,與文件名拼湊形成一個(gè)文件路徑,使用move_uploaded_file(),就可以完成將文件保存到指定目錄。
52. $_FILES是幾維數(shù)組?第一維和第二維的索引下標(biāo)分別是什么?批量上傳文件的時(shí)候需要注意什么?
二維數(shù)組。第一維是上傳控件的name,二維下標(biāo)分別為name/type/tmp_name/size/error.
53. header()函數(shù)主要的功能有哪些?使用過(guò)程中注意什么?
答:
header()發(fā)送http頭信息
-header("content-type:text/html; charset=utf-8");-------------------//當(dāng)前頁(yè)面輸出內(nèi)容是html,編碼為utf-8格式
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-header("content-type:image/png gif jpeg");----------------------------------//當(dāng)前頁(yè)面輸出內(nèi)容的格式是圖片
-header("refresh:5;url=http://www.1004javag.com/five/string.php");--//頁(yè)面5秒后要跳轉(zhuǎn)到新網(wǎng)址
-header("location:http://1004javag.com/five/string.php");-----------//頁(yè)面重定向
54. 文件下載的時(shí)候如果使用header()函數(shù)?
答:header("content-type: application/octet-stream;charset=UTF-8"); //在這里加utf-8和在上面定義有什么區(qū)別?、??
header("accept-ranges: bytes");
header("accept-length: ".filesize($filedir.$filename));
header("content-disposition: attachment; filename=".$filedir.$filename);
55. 什么是ajax?ajax的原理是什么?ajax的核心技術(shù)是什么?ajax的優(yōu)缺點(diǎn)是什么?
ajax是asynchronous javascript and xml的縮寫(xiě),是javascript、xml、css、DOM等多個(gè)技術(shù)的組合。 '$'是jQuery的別名.
頁(yè)面中用戶(hù)的請(qǐng)求通過(guò)ajax引擎異步地與服務(wù)器進(jìn)行通信,服務(wù)器將請(qǐng)求的結(jié)果返回給這個(gè)ajax引擎,
最后由這個(gè)ajax引擎來(lái)決定將返回的數(shù)據(jù)顯示到頁(yè)面中的指定位置。Ajax最終實(shí)現(xiàn)了在一個(gè)頁(yè)面的指定位置可以加載另一個(gè)頁(yè)面所有的輸出內(nèi)容。
這樣就實(shí)現(xiàn)了一個(gè)靜態(tài)頁(yè)面也能獲取到數(shù)據(jù)庫(kù)中的返回?cái)?shù)據(jù)信息了。所以ajax技術(shù)實(shí)現(xiàn)了一個(gè)靜態(tài)網(wǎng)頁(yè)在不刷新整個(gè)頁(yè)面的情況下與服務(wù)器通信,
減少了用戶(hù)等待時(shí)間,同時(shí)也從而降低了網(wǎng)絡(luò)流量,增強(qiáng)了客戶(hù)體驗(yàn)的友好程度。
Ajax的優(yōu)點(diǎn)是:
1. 減輕了服務(wù)器端負(fù)擔(dān),將一部分以前由服務(wù)器負(fù)擔(dān)的工作轉(zhuǎn)移到客戶(hù)端執(zhí)行,利用客戶(hù)端閑置的資源進(jìn)行處理;
2. 在只局部刷新的情況下更新頁(yè)面,增加了頁(yè)面反應(yīng)速度,使用戶(hù)體驗(yàn)更友好。
Ajax的缺點(diǎn)是不利于seo推廣優(yōu)化,因?yàn)樗阉饕鏌o(wú)法直接訪問(wèn)到ajax請(qǐng)求的內(nèi)容。
ajax的核心技術(shù)是XMLHttpRequest,它是javascript中的一個(gè)對(duì)象。
56. jquery是什么?jquery簡(jiǎn)化ajax后的方法有哪些?
jQuery是Javascript的一種框架。
$.get(),$.post(),$.ajax()。$是jQuery對(duì)象的別名。
代碼如下:
$.post(異步訪問(wèn)的url地址 , {'參數(shù)名' : 參數(shù)值} , function(msg){
$("#result").html(msg);
});
$.get(異步訪問(wèn)的url地址 , {'參數(shù)名' : 參數(shù)值} , function(msg){
$("#result").html(msg);
});
$.ajax({
type: "post",
url: loadUrl,
cache:false,
data: "參數(shù)名=" + 參數(shù)值,
success: function(msg) {
$("#result").html(msg);
}
});
57. 什么是會(huì)話控制?
簡(jiǎn)單地說(shuō)會(huì)話控制就是跟蹤和識(shí)別用戶(hù)信息的機(jī)制。會(huì)話控制的思想就是能夠在網(wǎng)站中跟蹤一個(gè)變量,通過(guò)這個(gè)變量,系統(tǒng)能識(shí)別出相應(yīng)的用戶(hù)信息,根據(jù)這個(gè)用戶(hù)信息可以得知用戶(hù)權(quán)限,從而展示給用戶(hù)適合于其相應(yīng)權(quán)限的頁(yè)面內(nèi)容。目前最主要的會(huì)話跟蹤方式有cookie,session。
58. 會(huì)話跟蹤的基本步驟
1).訪問(wèn)與當(dāng)前請(qǐng)求相關(guān)的會(huì)話對(duì)象 2).查找與會(huì)話相關(guān)的信息
3).存儲(chǔ)會(huì)話信息 4).廢棄會(huì)話數(shù)據(jù)
59. 使用cookie的注意事項(xiàng)有哪些?
1) setcookie()之前不可以有任何頁(yè)面輸出,就是空格,空白行也不可以;
2) setcookie()后,在當(dāng)前頁(yè)面調(diào)用$_COOKIE['cookiename']不會(huì)有輸出,必須刷新或到下一個(gè)頁(yè)面才可以看到cookie值;
3) 不同的瀏覽器對(duì)cookie處理不同,客戶(hù)端可以禁用cookie,瀏覽器也可以閑置cookie的數(shù)量,一個(gè)瀏覽器能創(chuàng)建的cookie數(shù)量最多300個(gè),并且每個(gè)不可以超過(guò)4kb,
每個(gè)web站點(diǎn)能設(shè)置的cookie總數(shù)不能超過(guò)20個(gè)。
4) cookie是保存在客戶(hù)端的,用戶(hù)禁用了cookie,那么setcookie就不會(huì)起作用了。所以不可以過(guò)度依賴(lài)cookie。
60. 使用session的時(shí)候,通過(guò)什么來(lái)表示當(dāng)前用戶(hù),從而與其他用戶(hù)進(jìn)行區(qū)分?
sessionid,通過(guò)session_id()函數(shù)可以取得當(dāng)前的session_id。
61. session和cookie的使用步驟分別是什么?什么是sesssion和cookie的生命周期?session和cookie的區(qū)別是什么?
cookie是保存在客戶(hù)端機(jī)器的,對(duì)于未設(shè)置過(guò)期時(shí)間的cookie,cookie值會(huì)保存在機(jī)器的內(nèi)存中,只要關(guān)閉瀏覽器則cookie自動(dòng)消失。如果設(shè)置了cookie的過(guò)期時(shí)間,那么瀏覽器會(huì)把cookie以文本文件的形式保存到硬盤(pán)中,當(dāng)再次打開(kāi)瀏覽器時(shí)cookie值依然有效。
session是把用戶(hù)需要存儲(chǔ)的信息保存在服務(wù)器端。每個(gè)用戶(hù)的session信息就像是鍵值對(duì)一樣存儲(chǔ)在服務(wù)器端,其中的鍵就是sessionid,而值就是用戶(hù)需要存儲(chǔ)信息。服務(wù)器就是通過(guò)sessionid來(lái)區(qū)分存儲(chǔ)的session信息是哪個(gè)用戶(hù)的。
兩者最大的區(qū)別就是session存儲(chǔ)在服務(wù)器端,而cookie是在客戶(hù)端。session安全性更高,而cookie安全性弱。
session在web開(kāi)發(fā)中具有非常重要的份量。它可以將用戶(hù)正確登錄后的信息記錄到服務(wù)器的內(nèi)存中,當(dāng)用戶(hù)以此身份訪問(wèn)網(wǎng)站的管理后臺(tái)時(shí),無(wú)需再次登錄即可得到身份確認(rèn)。而沒(méi)有正確登錄的用戶(hù)則不分配session空間,即便輸入了管理后臺(tái)的訪問(wèn)地址也不能看到頁(yè)面內(nèi)容。通過(guò)session確定了用戶(hù)對(duì)頁(yè)面的操作權(quán)限。
使用session的步驟:
1. 啟動(dòng)session:使用session_start()函數(shù)來(lái)啟動(dòng)。
2. 注冊(cè)會(huì)話:直接給$_SESSION數(shù)組添加元素即可。
3. 使用會(huì)話:判斷session是否為空或者是否已經(jīng)注冊(cè),如果已經(jīng)存在則像普通數(shù)組使用即可。
4. 刪除會(huì)話:
1.可以使用unset刪除單個(gè)session;
2.使用$_SESSION=array()的方式,一次注銷(xiāo)所有的會(huì)話變量;
3.使用session_destroy()函數(shù)來(lái)徹底銷(xiāo)毀session。
cookie怎么使用?
1. 記錄用戶(hù)訪問(wèn)的部分信息
2. 在頁(yè)面間傳遞變量
3. 將所查看的internet頁(yè)存儲(chǔ)在cookies臨時(shí)文件夾中,可以提高以后的瀏覽速度。
創(chuàng)建cookie:setcookie(string cookiename , string value , int expire);
讀取cookie:通過(guò)超級(jí)全局?jǐn)?shù)組$_COOKIE來(lái)讀取瀏覽器端的cookie的值。
刪除cookie:有兩種方法
1.手工刪除方法:
右擊瀏覽器屬性,可以看到刪除cookies,執(zhí)行操作即可將所有cookie文件刪除。
2.setcookie()方法:
跟設(shè)置cookie的方法一樣,不過(guò)此時(shí)將cookie的值設(shè)置為空,有效時(shí)間為0或小于當(dāng)前時(shí)間戳。
62. 如何設(shè)置一個(gè)cookie的名字為username,值為jack,并且讓此cookie一周后失效?
一個(gè)瀏覽器最多可以產(chǎn)生多少個(gè)cookie,每個(gè)cookie文件最大不能超過(guò)多少?
setcookie(‘username','jack',time()+7*24*3600);
最多可以產(chǎn)生20個(gè)cookie,每個(gè)最多不超過(guò)4K
63. 設(shè)置或讀取session之前,需要做什么?
可以直接在php.ini中開(kāi)啟session.auto_start = 1或者在頁(yè)面頭部用session_start();
開(kāi)啟session,session_start()前面不能有任何輸出,包括空行。
64. 在實(shí)際開(kāi)發(fā)中,session在哪些場(chǎng)合使用?
session用來(lái)存儲(chǔ)用戶(hù)登錄信息和用在跨頁(yè)面?zhèn)髦怠?br/> 1)常用在用戶(hù)登錄成功后,將用戶(hù)登錄信息賦值給session;
2)用在驗(yàn)證碼圖片生成,當(dāng)隨機(jī)碼生成后賦值給session。
65. 注銷(xiāo)session會(huì)話的形式有幾種?
unset() $_SESSION=array(); session_destroy();
66. 什么是OOP?什么是類(lèi)和對(duì)象?什么是類(lèi)屬性?
OOP(object oriented programming),即面向?qū)ο缶幊?,其中兩個(gè)最重要的概念就是類(lèi)和對(duì)象。
世間萬(wàn)物都具有自身的屬性和方法,通過(guò)這些屬性和方法可以區(qū)分出不同的物質(zhì)。
屬性和方法的集合就形成了類(lèi),類(lèi)是面向?qū)ο缶幊痰暮诵暮突A(chǔ),
通過(guò)類(lèi)就將零散的用于實(shí)現(xiàn)某個(gè)功能的代碼有效地管理起來(lái)了。
類(lèi)只是具備了某些功能和屬性的抽象模型,而實(shí)際應(yīng)用中需要一個(gè)一個(gè)實(shí)體,也就是需要對(duì)類(lèi)進(jìn)行實(shí)例化,類(lèi)在實(shí)例化之后就是對(duì)象?!镱?lèi)是對(duì)象的抽象概念,對(duì)象是類(lèi)的實(shí)例化。
對(duì)象是一個(gè)高級(jí)的數(shù)組,數(shù)組是一個(gè)最原始的對(duì)象,同樣的對(duì)象也可以遍歷
OOP具有三大特點(diǎn):
1. 封裝性:也稱(chēng)為信息隱藏,就是將一個(gè)類(lèi)的使用和實(shí)現(xiàn)分開(kāi),只保留部分接口和方法與外部聯(lián)系,或者說(shuō)只公開(kāi)了一些供開(kāi)發(fā)人員使用的方法。于是開(kāi)發(fā)人員只需要關(guān)注這個(gè)類(lèi)如何使用,而不用去關(guān)心其具體的實(shí)現(xiàn)過(guò)程,這樣就能實(shí)現(xiàn)MVC分工合作,也能有效避免程序間相互依賴(lài),實(shí)現(xiàn)代碼模塊間松藕合。
2. 繼承性:就是子類(lèi)自動(dòng)繼承其父級(jí)類(lèi)中的屬性和方法,并可以可以添加新的屬性和方法或者對(duì)部分屬性和方法進(jìn)行重寫(xiě)。繼承增加了代碼的可重用性。 php只支持單繼承,也就是說(shuō)一個(gè)子類(lèi)只能有一個(gè)父類(lèi)。
3. 多態(tài)性:子類(lèi)繼承了來(lái)自父級(jí)類(lèi)中的屬性和方法,并對(duì)其中部分方法進(jìn)行重寫(xiě)。于是多個(gè)子類(lèi)中雖然都具有同一個(gè)方法,但是這些子類(lèi)實(shí)例化的對(duì)象調(diào)用這些相同的方法后卻可以獲得完全不同的結(jié)果,這種技術(shù)就是多態(tài)性。多態(tài)性增強(qiáng)了軟件的靈活性。
OOP的優(yōu)點(diǎn):1、代碼重用性高(省代碼) 2、使程序的可維護(hù)性高(擴(kuò)展性) 3、靈活性
67. 常用的屬性的訪問(wèn)修飾符有哪些?分別代表什么含義?
private,protected,public。
類(lèi)外:public ,var
子類(lèi)中:public,protected ,var
本類(lèi)中:private,protected,public ,var
如果不使用這三個(gè)關(guān)鍵詞,也可以使用var關(guān)鍵字。但是var不可以跟權(quán)限修飾詞一起使用。var定義的變量,子類(lèi)中可以訪問(wèn)到,類(lèi)外也可以訪問(wèn)到,相當(dāng)于public
類(lèi)前面:只能加final,abstract
屬性前面:必須有訪問(wèn)修飾符(private,protected,public,var)
方法前面:static,final,private,protected,public ,abstract
68. $this和self、parent這三個(gè)關(guān)鍵詞分別代表什么?在哪些場(chǎng)合下使用?
$this 當(dāng)前對(duì)象 self 當(dāng)前類(lèi) parent 當(dāng)前類(lèi)的父類(lèi)
$this在當(dāng)前類(lèi)中使用,使用->調(diào)用屬性和方法。
self也在當(dāng)前類(lèi)中使用,不過(guò)需要使用::調(diào)用。 parent在類(lèi)中使用。
69.類(lèi)中如何定義常量、如何類(lèi)中調(diào)用常量、如何在類(lèi)外調(diào)用常量。
類(lèi)中的常量也就是成員常量,常量就是不會(huì)改變的量,是一個(gè)恒值。
定義常量使用關(guān)鍵字const.
例如:const PI = 3.1415326;
無(wú)論是類(lèi)內(nèi)還是類(lèi)外,常量的訪問(wèn)和變量是不一樣的,常量不需要實(shí)例化對(duì)象,
訪問(wèn)常量的格式都是類(lèi)名加作用域操作符號(hào)(雙冒號(hào))來(lái)調(diào)用。
即:類(lèi)名 :: 類(lèi)常量名;
70. 作用域操作符::如何使用?都在哪些場(chǎng)合下使用?
調(diào)用類(lèi)常量 調(diào)用靜態(tài)方法
71. 什么是魔術(shù)方法?常用的魔術(shù)方法有哪幾個(gè)?
以__開(kāi)頭的系統(tǒng)自定義的方法。
__construct() __destruct() __autoload() __call() __tostring()
72. 什么是構(gòu)造方法和析構(gòu)方法?
構(gòu)造方法就是在實(shí)例化一個(gè)對(duì)象的同時(shí)自動(dòng)執(zhí)行的成員方法,作用就是初始化對(duì)象。
php5之前,一個(gè)跟類(lèi)名完全相同的方法是構(gòu)造方法,php5之后魔術(shù)方法__construct()就是構(gòu)造方法。如果類(lèi)中沒(méi)有定義構(gòu)造方法,那么php會(huì)自動(dòng)生成一個(gè),這個(gè)自動(dòng)生成的構(gòu)造方法沒(méi)有任何參數(shù),沒(méi)有任何操作。
構(gòu)造方法的格式如下:
function __construct(){}
或者:function 類(lèi)名(){}
構(gòu)造方法可以沒(méi)有參數(shù),也可以有多個(gè)參數(shù)。
析構(gòu)方法的作用和構(gòu)造方法正好相反,是對(duì)象被銷(xiāo)毀時(shí)被自動(dòng)調(diào)用的,作用是釋放內(nèi)存。
析構(gòu)方法的定義方法為:__destruct();
因?yàn)閜hp具有垃圾回收機(jī)制,能自動(dòng)清除不再使用的對(duì)象,釋放內(nèi)存,一般情況下可以不手動(dòng)創(chuàng)建析構(gòu)方法。
73. __autoload()方法的工作原理是什么?
使用這個(gè)魔術(shù)函數(shù)的基本條件是類(lèi)文件的文件名要和類(lèi)的名字保持一致。
當(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ù)。
74. 什么是抽象類(lèi)和接口?抽象類(lèi)和接口有什么不同和相似的地方?
抽象類(lèi)是一種不能被實(shí)例化的類(lèi),只能作為其他類(lèi)的父類(lèi)來(lái)使用。
抽象類(lèi)是通過(guò)關(guān)鍵字 abstract 來(lái)聲明的。
抽象類(lèi)與普通類(lèi)相似,都包含成員變量和成員方法,兩者的區(qū)別在于,抽象類(lèi)中至少要包含一個(gè)抽象方法,
抽象方法沒(méi)有方法體,該方法天生就是要被子類(lèi)重寫(xiě)的。
抽象方法的格式為:abstract function abstractMethod();
因?yàn)閜hp中只支持單繼承,如果想實(shí)現(xiàn)多重繼承,就要使用接口。也就是說(shuō)子類(lèi)可以實(shí)現(xiàn)多個(gè)接口。接口類(lèi)是通過(guò)interface關(guān)鍵字來(lái)聲明的,接口類(lèi)中的成員變量和方法都是public的,方法可以不寫(xiě)關(guān)鍵字public,接口中的方法也是沒(méi)有方法體。接口中的方法也天生就是要被子類(lèi)實(shí)現(xiàn)的。抽象類(lèi)和接口實(shí)現(xiàn)的功能十分相似,最大的不同是接口能實(shí)現(xiàn)多繼承。在應(yīng)用中選擇抽象類(lèi)還是接口要看具體實(shí)現(xiàn)。子類(lèi)繼承抽象類(lèi)使用extends,子類(lèi)實(shí)現(xiàn)接口使用implements。
抽象類(lèi)至少有一個(gè)抽象方法嗎??????
答:如果一個(gè)類(lèi)聲明成抽象類(lèi),里面可以沒(méi)有抽象方法
如果一個(gè)類(lèi)中有抽象方法,這個(gè)類(lèi)必須是抽象類(lèi)
75. __call的參數(shù)有幾個(gè),類(lèi)型是什么,意義是什么?
魔術(shù)方法__call()的作用是當(dāng)程序調(diào)用一個(gè)不存在或不可見(jiàn)的成員方法時(shí),php會(huì)先調(diào)用__call()方法,將那個(gè)不存在的方法的方法名和參數(shù)都存儲(chǔ)下來(lái)。
__call()包含兩個(gè)參數(shù), 第一個(gè)參數(shù)是那個(gè)不存在的方法的方法名,是個(gè)字符串類(lèi)型;
第二個(gè)參數(shù)是那個(gè)不存在的方法的所有參數(shù),是個(gè)數(shù)組類(lèi)型。
本人認(rèn)為_(kāi)_call()方法的意義更多在于調(diào)試,可以定位到錯(cuò)誤。同時(shí)可以捕捉異常,如果某個(gè)方法不存在,則執(zhí)行其它可替代方法。
76. smarty模板技術(shù)的用途是什么?
為了php與html分開(kāi),美工和程序員各司其職,互不干擾。
77. smarty配置主要有哪幾項(xiàng)?
1. 引入smarty.class.php;
2. 實(shí)例化smarty對(duì)象;
3. 重新修改默認(rèn)的模板路徑;
4. 重新修改默認(rèn)的編譯后文件的路徑;
5. 重新修改默認(rèn)的配置文件的路徑;
6. 重新修改默認(rèn)的cache的路徑。
7. 可以設(shè)置是否開(kāi)啟cache。
8. 可以設(shè)置左側(cè)和右側(cè)定界符。
78. smarty在使用過(guò)程中需要注意哪些細(xì)節(jié)?
Smarty是基于MVC概念的一種模板引擎,它將一個(gè)頁(yè)面程序分成了兩部分來(lái)實(shí)現(xiàn):即視圖層和控制層,也就是說(shuō)smarty技術(shù)將用戶(hù)UI與php代碼分離開(kāi)。這樣程序員和美工各司其職,互不干擾。
smarty運(yùn)用過(guò)程中要注意以下幾個(gè)問(wèn)題:
1.正確配置smarty。主要要實(shí)例化smarty對(duì)象,配置smarty模板文件的路徑;
2.php頁(yè)面中使用assign賦值 和 display顯示頁(yè)面;
3.smarty模板文件中不允許出現(xiàn)php代碼段,所有的注釋?zhuān)兞?,函?shù)都要包含在定界符內(nèi)。
A.{}
B. foreach
C. if else
D. include
E. literal
79. MVC的概念是什么?各層主要做什么工作?
MVC(即模型-視圖-控制器)是一種軟件設(shè)計(jì)模式或者說(shuō)編程思想。
M指Model模型層,V是View視圖層(顯示層或者用戶(hù)界面),C是Controller控制器層。
使用mvc的目的是實(shí)現(xiàn)M和V分離,從而使得一個(gè)程序可以輕松使用不同的用戶(hù)界面。
在網(wǎng)站開(kāi)發(fā)中,
模型層一般負(fù)責(zé)對(duì)數(shù)據(jù)庫(kù)表信息進(jìn)行增刪改查,
視圖層負(fù)責(zé)顯示頁(yè)面內(nèi)容,
控制器層在M和V之間起到調(diào)節(jié)作用,控制器層決定調(diào)用哪個(gè)model類(lèi)的哪個(gè)方法,
執(zhí)行完畢后由控制器層決定將結(jié)果assign到哪個(gè)view層。
81. java語(yǔ)言中方法重寫(xiě)和重載分別代表什么意思?準(zhǔn)確說(shuō)php支持方法的重載嗎?很多參考書(shū)中提到的php重載實(shí)際上該如何正確理解?
答:
php不支持方法的重載,很多書(shū)里提到的PHP‘重載'應(yīng)該是‘重寫(xiě)'
82. final關(guān)鍵字能定義類(lèi)中的成員屬性嗎?
答:不能,類(lèi)的成員屬性只能有public ,private , protected ,var 來(lái)定義
83. final關(guān)鍵字定義的類(lèi)能夠被繼承嗎?
答:final定義的類(lèi)不能被繼承
84. 說(shuō)說(shuō)static關(guān)鍵字的使用場(chǎng)合?static能用在class前嗎?
static可以跟public,protected,private一起使用嗎?構(gòu)造方法可以是static的嗎?
答: static可以在屬性和方法前面使用,調(diào)用static屬性或者方法時(shí),只要將類(lèi)載入就可用,不用實(shí)例化
static不能用在class的前面
static可以跟public,protected,private一起使用,在方法的前面;
▲構(gòu)造方法不能是static
85. 接口可以實(shí)例化嗎?抽象類(lèi)能實(shí)例化嗎?
答:接口和抽象類(lèi)都不能被實(shí)例化
86. class前面能加訪問(wèn)修飾符嗎?如果能加,只能是哪幾個(gè)訪問(wèn)修飾符?可以是權(quán)限訪問(wèn)修飾符public,protected,private嗎?
答:class前面可以加final,static;
★class前面不能加public,protected,private
87. 類(lèi)中屬性前可以不加訪問(wèn)修飾符嗎?成員變量前的修飾符只能是public,protected,private嗎?還可以是哪幾個(gè)?
答:類(lèi)中的屬性必須加修飾符,除了那3個(gè)以外,還可以加var
88. 如果echo一個(gè)數(shù)組,頁(yè)面輸出什么?echo一個(gè)對(duì)象呢?print一個(gè)數(shù)組或者對(duì)象呢?
答:頁(yè)面只能輸出“Array”;echo一個(gè)對(duì)象會(huì)出現(xiàn)“Catchable fatal error: Object of class t2 could not be converted to string in G:\php2\t2.php on line 33”
print一個(gè)數(shù)組時(shí)也只是輸出“Array”,print一個(gè)對(duì)象出現(xiàn)“Catchable fatal error: Object of class t2 could not be converted to string in G:\php2\t2.php ”
▲print和echo是一樣的
89. __tostring()魔術(shù)方法在什么時(shí)候被自動(dòng)執(zhí)行?
__tostring()魔術(shù)方法必須要return返回值嗎?
當(dāng)echo或者print一個(gè)對(duì)象時(shí),就是自動(dòng)觸發(fā)。而且__tostring()必須要返回一個(gè)值
90. 什么是抽象方法?
答:在方法前面有abstract,而且方法沒(méi)有方法體,連“{ }”也不能有
91. 如果一個(gè)類(lèi)中有一個(gè)方法是抽象方法,而這個(gè)類(lèi)沒(méi)有定義成抽象類(lèi),會(huì)報(bào)錯(cuò)嗎?
答:會(huì),"Fatal error: Class t2 contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (t2::ee) in"
92. 如果一個(gè)類(lèi)是抽象類(lèi),而類(lèi)中的方法都是非抽象的方法,會(huì)報(bào)錯(cuò)嗎?
答:不會(huì)報(bào)錯(cuò),如果一個(gè)類(lèi)是抽象類(lèi),其中可以沒(méi)有抽象方法,但是一個(gè)類(lèi)中有個(gè)方法是抽象方法,那么這個(gè)類(lèi)一定是一個(gè)抽象類(lèi)
94. final 關(guān)鍵字的應(yīng)用應(yīng)注意的問(wèn)題?
使用final關(guān)鍵字定義的類(lèi),禁止繼承。
使用final關(guān)鍵字定義的方法,禁止重寫(xiě)。
95. 如果一個(gè)類(lèi)既要繼承一個(gè)父類(lèi),又要實(shí)現(xiàn)多個(gè)接口,該如何寫(xiě)?
書(shū)寫(xiě)格式例如: class MaleHuman extends Human implements Animal,Life { ... }
96. 什么是單點(diǎn)入口呢?
所謂單點(diǎn)入口就是整個(gè)應(yīng)用程序只有一個(gè)入口,所有的實(shí)現(xiàn)都通過(guò)這個(gè)入口來(lái)轉(zhuǎn)發(fā),
比如說(shuō)在上面我們就使用index.php作為程序的單點(diǎn)入口,當(dāng)然這個(gè)是可以由你自己任意控制的。
單點(diǎn)入口有幾大好處:
第一、一些系統(tǒng)全局處理的變量,類(lèi),方法都可以在這里進(jìn)行處理。比如說(shuō)你要對(duì)數(shù)據(jù)進(jìn)行初步的過(guò)濾,你要模擬session處理,你要定義一些全局變量,甚至你要注冊(cè)一些對(duì)象或者變量到注冊(cè)器里面
第二、程序的架構(gòu)更加清晰明了。
97. PHP提供了2套正則表達(dá)式函數(shù)庫(kù),分別是哪兩套?
(1) PCRE Perl兼容正則表達(dá)式 preg_ 為前綴
(2) POSIX 便攜式的操作系統(tǒng)接口 ereg_ 為前綴
98. 正則表達(dá)式的組成?
由原子(普通字符,如英文字符)、
元字符(有特殊功用的字符)
模式修正字符
一個(gè)正則表達(dá)式中,至少包含一個(gè)原子
99. 不常用魔術(shù)方法的觸發(fā)時(shí)機(jī)?
__isset() __unset()的觸發(fā)時(shí)機(jī)
__sleep()、 __wakeup() 在對(duì)對(duì)象進(jìn)行串行化的時(shí)候調(diào)用
如果序列化對(duì)象的時(shí)候,不寫(xiě)__sleep()方法,則所有的成員屬性都會(huì)被序列化,而定義了__sleep()方法,則只序列化指定數(shù)組中的變量。因此,如果有非常大的對(duì)象而并不需要完全儲(chǔ)存下來(lái)時(shí)此函數(shù)也很有用。
使用 __sleep 的目的是關(guān)閉對(duì)象可能具有的任何數(shù)據(jù)庫(kù)連接,提交等待中的數(shù)據(jù)或進(jìn)行類(lèi)似的清除任務(wù)。此外,如果有非常大的對(duì)象而并不需要完全儲(chǔ)存下來(lái)時(shí)此函數(shù)也很有用。
使用 __wakeup 的目的是重建在序列化中可能丟失的任何數(shù)據(jù)庫(kù)連接以及處理其它重新初始化的任務(wù)。
以上是“PHP/Javascript/CSS/jQuery常用知識(shí)有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。