国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

總結(jié)PHP常使用的知識點(diǎn)解答

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