對於PHP的基礎理論!

1. 變量如何定義?如何檢查變量是否認義?如何刪除一個變量?判斷一個變量是否爲空的函數?
isset()
unset()
empty()

2. 什麼是可變變量?
一個變量的變量名能夠動態的設置和使用。
$a = 'hello' , $$a = 'world', ${$a}=hello world

3. 變量賦值方式有哪幾種?
1)直接賦值
2)變量間賦值
3)引用賦值

4. 引用和拷貝有什麼區別?
拷貝是將原來的變量內容複製下來,拷貝後的變量與原來的變量使用各自的內存,互不干擾。
引用至關因而變量的別名,其實就是用不一樣的名字訪問同一個變量內容。當改變其中一個變量的值時,另外一個也跟着發生變化。


5. php中變量有哪些基本數據類型?
php支持8種原始數據類型。
包括:
四種標量類型(布爾型boolean,整型interger,浮點型float/double , 字符串string)
兩種複合類型(數組array , 對象object)
兩種特殊類型(資源resource,NULL)


6. 其它類型轉換爲boolean類型時,哪些被認爲是false?
布爾值false,整型值0, 浮點型值0.0, 空白字符串, 字符串'0', 空數組,特殊數據類型NULL, 沒有設定的變量。

empty()函數在哪些狀況下返回true?
布爾值false,
整型值0,
浮點型值0.0,
空白字符串,
字符串'0',
array()空數組,
特殊數據類型NULL,
沒有任何屬性的對象,
沒有賦值的變量。


7. 若是定義了一個變量$a ,可是沒有賦初始值
那麼$a==0嗎?
$a==false嗎?
$a==''嗎?
$a==NULL嗎?
$a===NULL嗎? 答:echo=>什麼都沒有 , var_dump=>NULL
empty($b)==true嗎?———————————— echo=>1 , var_dump=>bool(true)
此時若是輸出$a++是多少?——————— echo=>什麼都沒有 , var_dump=>NULL
若是輸出++$a又是多少?————————— echo=>1  , var_dump=>int(1)


8. 字符串怎麼轉成整數,有幾種方法?怎麼實現?
強制類型轉換: (整型)字符串變量名;
直接轉換:settype(字符串變量,整型);
intval(字符串變量);

9. 標量數據和數組的最大區別是什麼?
一個標量只能存放一個數據,而數組能夠存放多個數據。


10. 常量如何定義? 如何檢測一個常量是否被定義?常量的值只能是哪些數據類型?
define()//定義常量 , defined()//檢查常量是否認義
常量的值只能是標量類型的數據。


11. 常量分爲系統內置常量和自定義常量。請說出最多見的幾個系統內置常量?
__FILE__ , __LINE__ , PHP_OS , PHP_VERSION

12. 若是定義了兩個相同的常量,前者和後者哪一個起做用?
前者起做用,由於常量一旦定義就不能被從新定義或者取消定義。


13. 常量和變量有哪些區別?
1)常量前沒有$符號;
2)常量只能經過define()定義,而不能經過賦值語句定義;
3)常量能夠在任何地方定義和訪問,而變量定義的反問有固定的規則;
4)常量一旦定義就不能被從新定義或者取消定義,而變量而經過賦值方式從新定義;
5)常量的值只能是標量數據,而變量的數據庫類型有8中原始數據類型。


14. PHP中經常使用的幾個預約義的全局數組變量是哪些?
有9大預約義的內置數組變量:
$_POST, $_GET, $_REQUEST, $_SESSION, $_COOKIE, $_FILES,$_SERVER, $_ENV, $GLOBALS

15. 在實際開發中,常量最經常使用於哪些地方?
1)鏈接數據庫的信息定義成常量,如數據庫服務器的用戶名、密碼、數據庫名、主機名;
2)將站點的部分路徑定義成常量,如web絕對路徑,smarty的安裝路徑,model、view或者controller的文件夾路徑;
3)網站的公共信息,如網站名稱,網站關鍵詞等信息。

16. 函數的優越性有哪些?
提升程序的可維護性
        提升軟件的可靠性
        提升程序的可重用性
        提升程序的開發效率


17. 如何定義一個函數?函數名區分大小寫嗎?
1)使用 function 關鍵字;
2)函數命名規則和變量同樣,以字母或者下劃線開頭,而不能以數字開頭;
3)函數名不區分大小寫;
4)函數名不可使用已經聲明過的或者系統自建的函數名稱。


18. 什麼是變量的能見度 或者 說是變量做用域?
就是變量在程序中的可做用範圍。根據變量的能見度,變量分爲局部變量和全局變量。


19. 什麼是局部變量和全局變量?函數內是否能夠直接調用全局變量?
局部變量是函數內部定義的變量,其做用域是所在的函數。若是函數外還有一個跟局部變量名字同樣的變量,
程序會認爲它們兩個是徹底不一樣的兩個變量。當退出函數的時候,其中的局部變量就同時被清除。

全局變量是定義在全部函數之外的變量,其做用域是整個php文件,可是在用戶自定義的函數內部是沒法使用的。
若是必定要在用戶自定義的函數內部使用全局變量,那麼就須要使用global關鍵字聲明。
也就是說若是在函數內的變量前加上golbal來修飾,那麼函數內部就能夠訪問到這個全局變量,
不只能夠利用這個全局變量進行運算並且能夠對這個全局變量進行從新賦值。
全局變量還可使用 $GLOBALS['var'] 來調用。


20. global關鍵詞如何使用?預約義的全局變量數組$GLOBALS如何使用?


21. 什麼是靜態變量?
若是一個函數內定義的變量前使用關鍵字static來聲明,那麼該變量就是靜態變量。
通常函數內的變量在函數調用結束後,其存儲的數據將被清除,所佔的內存空間也被釋放。而使用靜態變量時,
該變量會在函數第一次被調用時被初始化,初始化後該變量也不會被清除,當再次調用該函數時,這個靜態變量
再也不被初始化,而能保存上次函數執行完後的值。能夠說靜態變量在全部對該函數的調用之間共享。


22. php中函數傳遞參數的方式有哪些?二者有什麼區別?
按值傳遞和按地址傳遞(或按引用傳遞)
(1)按值傳遞:  待傳遞的變量,與傳遞給函數以後的變量是存儲在不一樣的空間中。因此函數體內對
               該變量值作的修改,不影響本來的變量值。
    (2)按地址傳遞: 使用 & 符號,代表該參數是以地址的方式傳遞值。並不會將主程序中的指定數值或目標變量傳遞給函數,
               而是把該數值或變量的內存儲存區塊地址導入函數之中,因此函數體內的該變量和主程序中的該變量在內存
               中是同一個。函數體作的修改,直接影響到函數體外部的該變量的值。


23. 什麼是遞歸函數?如何進行遞歸調用?
遞歸函數其實就是調用自身的函數,可是必須知足如下兩個條件:
1)在每一次調用自身時,必須是更接近於最終結果;
2)必須有一個肯定的遞歸終止條件,不會形成死循環。
舉例說明:
在實際工做中每每會在遍歷文件夾的時候使用。
若是有個例子是但願獲取到目錄windows下全部的文件,那麼先遍歷windows目錄,若是發現其中還有文件夾,那麼就會調用自身,繼續往下尋找,依次類推,
直到遍歷到再也沒有文件夾爲止,這也就是意味着遍歷出來了全部的文件。


24. 判斷一個函數是否存在?
    function_exists( string $function_name )  若是存在,返回true, 不存在則返回 false。

25. func()和@func()之間有什麼區別?
第二個函數調用失敗不會報錯,第一個會報錯

26. include()和require()函數的用法和區別是什麼?include_once()和require_once()呢?
include和require出現錯誤後的錯誤級別不同
include_once()和require_once()在加載以前要判斷是否已經導入

27. 說出前置++和後置++的區別?
前置++是先將變量增長1,而後在將值賦值給原來的變量;
後置++是先返回變量的當前值,而後再將變量的當前值增長1.


28. 字符串運算符「.」與算術運算符「+」有什麼區別?
當「a」「b」之間使用.時認爲是連字符。若是二者間是+的時候php會認爲是一次運算。
1)若是+號兩邊的字符串是數字組成的,那麼會將字符串自動轉爲整型;
2)若是+號兩邊是純粹的字母,那麼會輸出0;
3)若是+號兩邊的字符串是以數字開頭的,那麼會截取字符串開頭的數字,而後進行運算。


29. 什麼是三目(或三元)運算符?
根據一個表達式的結果在另兩個表達式中選擇一個。
例如: ($a==true) ? 'good':'bad';


30. 控制流程語句有哪些?
1:三種程序結構    順序結構、分支結構、循環結構
2:分支: if/esle/esleif/     switch/case/default
3: switch 須要注意的:
case子句中的常量能夠是整型、字符串型常量、 或者常量表達式,不容許是變量。
  同一個switch子句中,case的值不能相同,不然只能取到首次出現case中的值。
4: 循環  for while   do...while
 do...while 後面必須加入分號結尾。
 while 和 do...while 的區別
5:break 和 continue 的區別。
break能夠終止循環。
continue沒有break強大,只能終止本次循環而進入到下一次循環中。


31. 數組的概念是什麼?數組根據索引分爲哪兩種,如何區分?數組的賦值方式有哪兩種?
數組是一個能夠存儲一組或一系列數值的變量(複合型變量)
索引數組(索引值爲數字,以0開始)和關聯數組(以字符串做爲索引值)

數組的賦值方式有哪兩種?
數組的聲明方式主要有兩種。
1.經過array()函數聲明數組;
能夠經過key=>value的方式分別定義索引和值,也能夠不定義數組的索引下標,只給出數組的元素值。
2.直接爲數組元素賦值,不須要調用array()函數。例如:
$arr[0] = 1;
$arr[1] = 2;
特別注意:
數組的下標若是是等價於整數的字符串值(但不能以0開頭),則會被看成整數對待。
  例如: $array[3] 與  $array['3'] 引用的是相同的一個元素,而 $array['03'] 引用的則就是另外的一個元素了。


32.數組如何遍歷?
①for循環
②foreach循環  ,這是最經常使用的遍歷方式。用法以下:foreach($arr as $key=>$value){}
③list each 和while 配合起來循環


33. foeach數組的時候指針是如何指向的?list()/each()/while()循環數組的時候指針如何指向的呢?
當foreach開始執行的時候,數組內部的指針會自動指向第一個單元。由於foreach所操做的是指定數組的拷貝,而不是該數組自己。
而each()一個數組後,數組指針將停留在數組中的下一個單元或者碰到數組結尾時停留在最後一個單元。若是要再次使用each()遍歷數組,必需要使用reset().
reset()將數組的內部指針倒回到第一個單元並返回第一個數組單元的值。


34. 如何計算數組長度(或者說計算數組中全部元素的個數)?字符串怎麼取長度?
count() -- 計算數組中的元素個數。
可使用count(數組名)或者count(數組名,1),若是有第二個參數,而且是數字1,則表示遞歸統計數組元素的個數。
若是第二個參數是數字0,則等同於只有一個參數的count()函數。
sizeof() -- count() 的別名
字符串:strlen()、mb_strlen();


35. 數組中相關的經常使用函數有哪些?
1) count --(sizeof別名)— 計算數組中的單元數目或對象中的屬性個數  
例如:int count ( mixed $var [, int $mode ] )  $var 一般都是數組類型,任何其它類型都只有一個單元。  $mode 默認值爲0. 1爲開啓遞歸地對數組計數
2) in_array ( mixed $needle , array $haystack [, bool $strict ] ) — 檢查數組中是否存在某個值。
若是 needle 是字符串,則比較是區分大小寫的。
若是第三個參數 strict 的值爲 TRUE 則 in_array() 函數還會檢查 needle 的類型是否和 haystack 中的相同。
3) array_merge(array $array1 [, array $array2 [, array $... ]] ) 將一個或多個數組的單元合併起來,一個數組中的值附加在前一個數組的後面。返回做爲結果的數組。
特別注意:若是輸入的數組中有相同的字符串鍵名,則該鍵名後面的值將覆蓋前一個值。然而,若是數組包含數字鍵名,後面的值將不會覆蓋原來的值,而是附加到後面。
若是隻給了一個數組而且該數組是數字索引的,則鍵名會以連續方式從新索引

4) 數組與字符串之間的轉換
(1)explode ( string $separator , string $string [, int $limit ] )  使用一個分隔字符來分隔一個字符串。
(2)implode ( string $glue , array $arr )  使用一個鏈接符將數組中的每一個單元鏈接爲一個字符串。
join 爲 implode 的別名

5) sort(array &$array [, int $sort_flags ]) — 對數組按照值排序,當本函數結束時數組單元將被從最低到最高從新安排。


36. 數組合並函數array_merge()和數組加法運算$arr + $arr2 的區別是什麼?
array_merge()->使用array_merge(),若是是關聯數組合並,若是數組的鍵名相同,那麼後面的值將覆蓋前者;若是是數字索引數組合並,則不覆蓋,而是
後者附加到前者後面。
"+"->使用數組加法運算,與array_merge()不一樣,加法運算無論是關聯數組仍是數字索引數組,都是將相同鍵名的的值捨棄,
也就是隻保留首次出現該鍵名的元素,後來的具備相同鍵名的元素都不會被加進來。


37. 字符串定義的時候單引號和雙引號有什麼區別?


38. echo(),print(),print_r()的區別?
(1)echo 是語法,Output one or more strings,沒有返回值;
(2)print 是函數,不能輸出數組和對象,Output a string,print有返回值;
(3)print_r 是函數,能夠輸出數組。print_r是個比較有意思的函數,能夠輸出stirng、int、float、
array、object等,輸出array時會用結構表示,print_r輸出成功時返回true;並且print_r能夠經過print_r($str,true)來,使print_r不輸出而返回print_r處理後的值。此外,對於echo和print,基本以使用echo居多,由於其效率比print要高。


39. 按照功能分類說說都有哪些字符串處理函數?這些函數的做用是什麼?
A. 字符串輸出函數
(1)echo $a,$b,$c......;  是一個語言結構,而不是一個真正的函數。
(2)print($a)    本函數輸出字符串。若成功則返回 1,失敗返回 0
(3)print_r($a)
(4)var_dump($a); 能輸出類型、長度、值
B. 去除字符串首尾空格的函數: trim  ltrim  rtrim(別名:chop)   使用第二個參數,還能夠去除指定的字符。
C. 轉義字符串函數:addslashes()
D. 獲取字符串長度的函數:strlen()
E. 截取字符串長度的的函數:substr()
F. 檢索字符串函數: strstr() , strpos()
G. 替換字符串函數:str_replace()


40. 請給出如下問題的正確答案?
1).$arr = array('james', 'tom', 'symfony');請將$arr數組的值用’,’分割併合併成字符串輸出?
echo implode(‘,’,$arr);

2).$str = ‘jack,james,tom,symfony’; 請將$str用’,’分割,並把分割後的值放到$arr數組中?
$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). 獲取隨機數的函數有哪幾個?mt_rand() 和 rand()哪一個執行速度快?


41.頁面字符出現亂碼,怎麼解決?
1.首先考慮當前文件是否是設置了字符集。查看是否是meta標籤中寫了charset,若是是php頁面還能夠看看是否是
在header()函數中指定了charset;
例如:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
header(「content-type:text/html;charset=utf-8」);

2.若是設置了字符集(也就是charset),那麼判斷當前文件保存的編碼格式是否跟頁面設置的字符集保持一致,
二者必須保持統一;

3.若是涉及到從數據庫提取數據,那麼判斷數據庫查詢時的字符集是否跟當前頁面設置的字符集一致,二者必須統一,
例如:mysql_query(「set names utf8」)。


42. 正則表達式是什麼?php中有哪些經常使用的跟正則相關的函數?請寫出一個email的正則,中國手機號碼和座機號碼的正則表達式?
正則表達式是用於描述字符排列模式的一種語法規則。正則表達式也叫作模式表達式。
網站開發中正則表達式最經常使用於表單提交信息前的客戶端驗證。
好比驗證用戶名是否輸入正確,密碼輸入是否符合要求,email、手機號碼等信息的輸入是否合法。
在php中正則表達式主要用於字符串的分割、匹配、查找和替換操做。
preg系列函數能夠處理。具體有如下幾個:
string preg_quote ( string str [, string delimiter] )
轉義正則表達式字符 正則表達式的特殊字符包括:. \\ + * ? [ ^ ] $ ( ) { } = ! < > | :。
preg_replace -- 執行正則表達式的搜索和替換
mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit] )
preg_replace_callback -- 用回調函數執行正則表達式的搜索和替換
mixed preg_replace_callback ( mixed pattern, callback callback, mixed subject [, int limit] )
preg_split -- 用正則表達式分割字符串
array preg_split ( string pattern, string subject [, int limit [, int flags]] )
43. 若是想過濾掉某個字符串中全部的html標記使用哪一個函數?


44. preg_replace()和 str_ireplace()兩個函數在使用上有什麼不一樣?preg_split()和split()函數如何使用?


45. 獲取當前時間戳的函數主要有哪些?用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傳值的時候,若中文出現亂碼,應該用哪一個函數對中文進行編碼?
用戶在網站表單提交數據的時候,爲了防止腳本攻擊(好比用戶輸入<script>alert(111);</script>),php端接收數據的時候,應該如何處理?
使用urlencode()對中文進行編碼,使用urldecode()來解碼。
使用htmlspecialchars($_POST[‘title’])來過濾表單傳參就能夠避免腳本攻擊。


47. 鏈接數據庫操做的步驟是什麼?每一步的返回值是什麼數據類型?尤爲是mysql_query()返回什麼數據類型?

48. 說說mysql_fetch_row() 和mysql_fetch_assoc()和mysql_fetch_array之間有什麼區別?
第一個是返回結果集中的一行做爲索引數組,第二個是返回關聯數組,而第三個既能夠返回索引數組也能夠返回關聯數組,取決於它的第二個參數 MYSQL_BOTH MYSQL_NUM  MYSQL_ASSOC 默認爲MYSQL_BOTH
$sql =」select * from table1」;
$result = mysql_query($sql);
mysql_fetch_array($result, MYSQL_NUM);

49. 請說出目前學過的返回是資源的函數?
答: mysql_connect();
mysql_query();只有這執行select的時候成功,才返回資源,失敗返回FALSE
fopen();

50. 打開、關閉文件分別是什麼函數? 文件讀寫是什麼函數?刪除文件是哪一個函數?
判斷一個文件是否存在是哪一個函數?新建目錄是哪一個函數?


51. 文件上傳須要注意哪些細節?怎麼把文件保存到指定目錄?怎麼避免上傳文件重名問題?
1.首現要在php.ini中開啓文件上傳;
2.在php.ini中有一個容許上傳的最大值,默認是2MB。必要的時候能夠更改;
3.上傳表單必定要記住在form標籤中寫上enctype="multipart/form-data";
4. 提交方式 method 必須是 post;
5. 設定 type="file" 的表單控件;
6.要注意上傳文件的大小MAX_FILE_SIZE、文件類型是否符合要求,上傳後存放的路徑是否存在。

能夠經過上傳的文件名獲取到文件後綴,而後使用時間戳+文件後綴的方式爲文件從新命名,這樣就避免了重名。
能夠本身設置上傳文件的保存目錄,與文件名拼湊造成一個文件路徑,使用move_uploaded_file(),就能夠完成
將文件保存到指定目錄。


52. $_FILES是幾維數組?第一維和第二維的索引下標分別是什麼?批量上傳文件的時候須要注意什麼?
二維數組。第一維是上傳控件的name,二維下標分別爲name/type/tmp_name/size/error.
 

53. header()函數主要的功能有哪些?使用過程當中注意什麼?
答:

54. 文件下載的時候若是使用header()函數?
答:header("content-type: application/octet-stream;charset=UTF-8"); //在這裏加utf-8和在上面定義有什麼區別?、??
           header("accept-ranges: bytes");
            header("accept-length: ".filesize($filedir.$filename));
            header("content-disposition: attachment; filename=".$filedir.$filename);


55. 什麼是ajax?ajax的原理是什麼?ajax的核心技術是什麼?ajax的優缺點是什麼?
ajax是asynchronous javascript and xml的縮寫,是javascript、xml、css、DOM等多個技術的組合。 '$'是jQuery的別名.

  頁面中用戶的請求經過ajax引擎異步地與服務器進行通訊,服務器將請求的結果返回給這個ajax引擎,
  最後由這個ajax引擎來決定將返回的數據顯示到頁面中的指定位置。Ajax最終實現了在一個頁面的指定位置能夠加載另外一個頁面全部的輸出內容。
這樣就實現了一個靜態頁面也能獲取到數據庫中的返回數據信息了。因此ajax技術實現了一個靜態網頁在不刷新整個頁面的狀況下與服務器通訊,
減小了用戶等待時間,同時也從而下降了網絡流量,加強了客戶體驗的友好程度。
Ajax的優勢是:
1.  減輕了服務器端負擔,將一部分之前由服務器負擔的工做轉移到客戶端執行,利用客戶端閒置的資源進行處理;
2.  在只局部刷新的狀況下更新頁面,增長了頁面反應速度,使用戶體驗更友好。
Ajax的缺點是不利於seo推廣優化,由於搜索引擎沒法直接訪問到ajax請求的內容。
ajax的核心技術是XMLHttpRequest,它是javascript中的一個對象。

56. jquery是什麼?jquery簡化ajax後的方法有哪些?
jQuery是Javascript的一種框架。$.get(),$.post(),$.ajax()。$是jQuery對象的別名。

57. 什麼是會話控制?
簡單地說會話控制就是跟蹤和識別用戶信息的機制。會話控制的思想就是可以在網站中跟蹤一個變量,經過這個變量,
系統能識別出相應的用戶信息,根據這個用戶信息能夠得知用戶權限,從而展現給用戶適合於其相應權限的頁面內容。
目前最主要的會話跟蹤方式有cookie,session。

58. 會話跟蹤的基本步驟
1).訪問與當前請求相關的會話對象
2).查找與會話相關的信息
3).存儲會話信息
4).廢棄會話數據

59. 使用cookie的注意事項有哪些?
1) setcookie()以前不能夠有任何頁面輸出,就是空格,空白行也不能夠;
2) setcookie()後,在當前頁面調用$_COOKIE['cookiename']不會有輸出,必須刷新或到下一個頁面才能夠看到cookie值;
3) 不一樣的瀏覽器對cookie處理不一樣,客戶端能夠禁用cookie,瀏覽器也能夠閒置cookie的數量,一個瀏覽器能建立的cookie數量最多300個,而且每一個不能夠超過4kb,
每一個web站點能設置的cookie總數不能超過20個。
4) cookie是保存在客戶端的,用戶禁用了cookie,那麼setcookie就不會起做用了。因此不能夠過分依賴cookie。

60. 使用session的時候,經過什麼來表示當前用戶,從而與其餘用戶進行區分?
sessionid,經過session_id()函數能夠取得當前的session_id。

61. session和cookie的使用步驟分別是什麼?什麼是sesssion和cookie的生命週期?session和cookie的區別是什麼?
cookie是保存在客戶端機器的,對於未設置過時時間的cookie,cookie值會保存在機器的內存中,只要關閉瀏覽器則
cookie自動消失。若是設置了cookie的過時時間,那麼瀏覽器會把cookie以文本文件的形式保存到硬盤中,
當再次打開瀏覽器時cookie值依然有效。
session是把用戶須要存儲的信息保存在服務器端。每一個用戶的session信息就像是鍵值對同樣存儲在服務器端,
其中的鍵就是sessionid,而值就是用戶須要存儲信息。服務器就是經過sessionid來區分存儲的session信息是
哪一個用戶的。
二者最大的區別就是session存儲在服務器端,而cookie是在客戶端。session安全性更高,而cookie安全性弱。

session在web開發中具備很是重要的分量。它能夠將用戶正確登陸後的信息記錄到服務器的內存中,當用戶以此身份
訪問網站的管理後臺時,無需再次登陸便可獲得身份確認。而沒有正確登陸的用戶則不分配session空間,即使輸入了
管理後臺的訪問地址也不能看到頁面內容。經過session肯定了用戶對頁面的操做權限。
使用session的步驟:
1. 啓動session:
使用session_start()函數來啓動。
2. 註冊會話:
    直接給$_SESSION數組添加元素便可。
3. 使用會話:
判斷session是否爲空或者是否已經註冊,若是已經存在則像普通數組使用便可。
4. 刪除會話:
1.可使用unset刪除單個session;
2.使用$_SESSION=array()的方式,一次註銷全部的會話變量;
3.使用session_destroy()函數來完全銷燬session。


cookie怎麼使用?
1. 記錄用戶訪問的部分信息
2. 在頁面間傳遞變量
3. 將所查看的internet頁存儲在cookies臨時文件夾中,能夠提升之後的瀏覽速度。

建立cookie:
setcookie(string cookiename , string value , int expire);
讀取cookie:
經過超級全局數組$_COOKIE來讀取瀏覽器端的cookie的值。
刪除cookie:有兩種方法
1.手工刪除方法:
右擊瀏覽器屬性,能夠看到刪除cookies,執行操做便可將全部cookie文件刪除。
2.setcookie()方法:
跟設置cookie的方法同樣,不過此時將cookie的值設置爲空,有效時間爲0或小於當前時間戳。

62. 如何設置一個cookie的名字爲username,值爲jack,而且讓此cookie一週後失效?
一個瀏覽器最多能夠產生多少個cookie,每一個cookie文件最大不能超過多少?
setcookie(‘username’,’jack’,time()+7*24*3600);
最多能夠產生20個cookie,每一個最多不超過4K


63. 設置或讀取session以前,須要作什麼?
能夠直接在php.ini中開啓session.auto_start = 1或者在頁面頭部用session_start();
開啓session,session_start()前面不能有任何輸出,包括空行。


64. 在實際開發中,session在哪些場合使用?
session用來存儲用戶登陸信息和用在跨頁面傳值。
1)經常使用在用戶登陸成功後,將用戶登陸信息賦值給session;
2)用在驗證碼圖片生成,當隨機碼生成後賦值給session。

65. 註銷session會話的形式有幾種?
unset()
$_SESSION=array();
session_destroy();

66. 什麼是OOP?什麼是類和對象?什麼是類屬性?
OOP(object oriented programming),即面向對象編程,其中兩個最重要的概念就是類和對象。
世間萬物都具備自身的屬性和方法,經過這些屬性和方法能夠區分出不一樣的物質。
屬性和方法的集合就造成了類,類是面向對象編程的核心和基礎,
經過類就將零散的用於實現某個功能的代碼有效地管理起來了。
類只是具有了某些功能和屬性的抽象模型,而實際應用中須要一個一個實體,也就是須要對類進行實例化,
類在實例化以後就是對象。★類是對象的抽象概念,對象是類的實例化。

OOP具備三大特色:1. 封裝性(又叫作隱藏性);2. 繼承性; 3. 多態性。

OOP的優勢:一、代碼重用性高(省代碼) 二、使程序的可維護性高(擴展性) 三、靈活性
 

67. 經常使用的屬性的訪問修飾符有哪些?分別表明什麼含義?
private,protected,public。
類外:public ,var
子類中:public,protected ,var
本類中:private,protected,public ,var
若是不使用這三個關鍵詞,也可使用var關鍵字。可是var不能夠跟權限修飾詞一塊兒使用。var定義的變量,子類中能夠訪問到,類外也能夠訪問到,至關於public

類前面:只能加final,abstract
屬性前面:必須有訪問修飾符(private,protected,public,var)
方法前面:static,final,private,protected,public ,abstract


68. $this和self、parent這三個關鍵詞分別表明什麼?在哪些場合下使用?
$this 當前對象
self  當前類
parent  當前類的父類
$this在當前類中使用,使用->調用屬性和方法。
self也在當前類中使用,不過須要使用::調用。
parent在類中使用。


69.類中如何定義常量、如何類中調用常量、如何在類外調用常量。
類中的常量也就是成員常量,常量就是不會改變的量,是一個恆值。
定義常量使用關鍵字const.
例如:const PI = 3.1415326;
不管是類內仍是類外,常量的訪問和變量是不同的,常量不須要實例化對象,
訪問常量的格式都是類名加做用域操做符號(雙冒號)來調用。
即:類名 :: 類常量名;


70. 做用域操做符::如何使用?都在哪些場合下使用?
調用常量
調用靜態方法


71. 什麼是魔術方法?經常使用的魔術方法有哪幾個?
以__開頭的系統自定義的方法。
__construct()
__destruct()
__autoload()
__call()
__tostring()


72. 什麼是構造方法和析構方法?
構造方法就是在實例化一個對象的同時自動執行的成員方法,做用就是初始化對象。
php5以前,一個跟類名徹底相同的方法是構造方法,php5以後魔術方法__construct()就是構造方法。
若是類中沒有定義構造方法,那麼php會自動生成一個,這個自動生成的構造方法沒有任何參數,
沒有任何操做。
構造方法的格式以下:
function __construct(){}
或者:function 類名(){}
構造方法能夠沒有參數,也能夠有多個參數。

析構方法的做用和構造方法正好相反,是對象被銷燬時被自動調用的,做用是釋放內存。
析構方法的定義方法爲:__destruct();
由於php具備垃圾回收機制,能自動清除再也不使用的對象,釋放內存,通常狀況下能夠不手動建立析構方法。

73. __autoload()方法的工做原理是什麼?
使用這個魔術函數的基本條件是類文件的文件名要和類的名字保持一致。
當程序執行到實例化某個類的時候,若是在實例化前沒有引入這個類文件,那麼就自動執行__autoload()函數。
這個函數會根據實例化的類的名稱來查找這個類文件的路徑,當判斷這個類文件路徑下確實存在這個類文件後
就執行include或者require來載入該類,而後程序繼續執行,若是這個路徑下不存在該文件時就提示錯誤。
使用自動載入的魔術函數能夠沒必要要寫不少個include或者require函數。


74. 什麼是抽象類和接口?抽象類和接口有什麼不一樣和類似的地方?
抽象類是一種不能被實例化的類,只能做爲其餘類的父類來使用。
抽象類是經過關鍵字 abstract 來聲明的。
抽象類與普通類類似,都包含成員變量和成員方法,二者的區別在於,抽象類中至少要包含一個抽象方法,
抽象方法沒有方法體,該方法天生就是要被子類重寫的。
抽象方法的格式爲:abstract function abstractMethod();
由於php中只支持單繼承,若是想實現多重繼承,就要使用接口。也就是說子類能夠實現多個接口。
接口類是經過interface關鍵字來聲明的,接口類中的成員變量和方法都是public的,方法能夠不寫關鍵字public,
接口中的方法也是沒有方法體。接口中的方法也天生就是要被子類實現的。

抽象類和接口實現的功能十分類似,最大的不一樣是接口能實現多繼承。在應用中選擇抽象類仍是接口要看具體實現。
子類繼承抽象類使用extends,子類實現接口使用implements。


抽象類至少有一個抽象方法嗎??????
答:若是一個類聲明成抽象類,裏面能夠沒有抽象方法
   若是一個類中有抽象方法,這個類必須是抽象類


75. __call的參數有幾個,類型是什麼,意義是什麼?
魔術方法__call()的做用是當程序調用一個不存在或不可見的成員方法時,php會先調用__call()方法,
將那個不存在的方法的方法名和參數都存儲下來。
__call()包含兩個參數,  第一個參數是那個不存在的方法的方法名,是個字符串類型;
第二個參數是那個不存在的方法的全部參數,是個數組類型。

本人認爲__call()方法的意義更多在於調試,能夠定位到錯誤。同時能夠捕捉異常,若是某個方法不存在,
則執行其它可替代方法。


76. smarty模板技術的用途是什麼?
爲了php與html分開,美工和程序員各司其職,互不干擾。

77. smarty配置主要有哪幾項?
1. 引入smarty.class.php;
2. 實例化smarty對象;
3. 從新修改默認的模板路徑;
4. 從新修改默認的編譯後文件的路徑;
5. 從新修改默認的配置文件的路徑;
6. 從新修改默認的cache的路徑。
7. 能夠設置是否開啓cache。
8. 能夠設置左側和右側定界符。


78. smarty在使用過程當中須要注意哪些細節?
Smarty是基於MVC概念的一種模板引擎,它將一個頁面程序分紅了兩部分來實現:即視圖層和控制層,
也就是說smarty技術將用戶UI與php代碼分離開。
這樣程序員和美工各司其職,互不干擾。
smarty運用過程當中要注意如下幾個問題:
1.正確配置smarty。主要要實例化smarty對象,配置smarty模板文件的路徑;
2.php頁面中使用assign賦值 和 display顯示頁面;
3.smarty模板文件中不容許出現php代碼段,全部的註釋,變量,函數都要包含在定界符內。
A.{}
B. foreach
C. if else
D. include
E. literal

79. 什麼是MVC?MVC的目的是什麼?
MVC是一種編程思想,將PHP代碼和html代碼分離開

80. oop中的多態性跟方法重寫有什麼關係?
答:

81. java語言中方法重寫和重載分別表明什麼意思?準確說php支持方法的重載嗎?不少參考書中提到的php重載實際上該如何正確理解?
答:
php不支持方法的重載,不少書裏提到的PHP‘重載’應該是‘重寫’

82. final關鍵字能定義類中的成員屬性嗎?
答:不能,類的成員屬性只能有public ,private , protected ,var 來定義

83. final關鍵字定義的類可以被繼承嗎?
答:final定義的類不能被繼承

84. 說說static關鍵字的使用場合?static能用在class前嗎?
    static能夠跟public,protected,private一塊兒使用嗎?構造方法能夠是static的嗎?
答: static能夠在屬性和方法前面使用,調用static屬性或者方法時,只要將類載入就可用,不用實例化
static不能用在class的前面
    static能夠跟public,protected,private一塊兒使用,在方法的前面;
▲構造方法不能是static

85. 接口能夠實例化嗎?抽象類能實例化嗎?
答:接口和抽象類都不能被實例化

86. class前面能加訪問修飾符嗎?若是能加,只能是哪幾個訪問修飾符?能夠是權限訪問修飾符public,protected,private嗎?
答:class前面能夠加final,static;
★class前面不能加public,protected,private

87. 類中屬性前能夠不加訪問修飾符嗎?成員變量前的修飾符只能是public,protected,private嗎?還能夠是哪幾個?
答:類中的屬性必須加修飾符,除了那3個之外,還能夠加var

88. 若是echo一個數組,頁面輸出什麼?echo一個對象呢?print一個數組或者對象呢?
答:頁面只能輸出「Array」;echo一個對象會出現「Catchable fatal error: Object of class t2 could not be converted to string in G:\php2\t2.php on line 33」
   print一個數組時也只是輸出「Array」,print一個對象出現「Catchable fatal error: Object of class t2 could not be converted to string in G:\php2\t2.php 」
   ▲print和echo是同樣的


89. __tostring()魔術方法在何時被自動執行? __tostring()魔術方法必需要return返回值嗎?
當echo或者print一個對象時,就是自動觸發。並且__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 關鍵字的應用應注意的問題?
使用final關鍵字定義的類,禁止繼承。
使用final關鍵字定義的方法,禁止重寫。

95. 若是一個類既要繼承一個父類,又要實現多個接口,該如何寫?
書寫格式例如: class MaleHuman extends Human implements Animal,Life { ... }


96. 什麼是單點入口呢?
        所謂單點入口就是整個應用程序只有一個入口,全部的實現都經過這個入口來轉發,
        好比說在上面咱們就使用index.php做爲程序的單點入口,固然這個是能夠由你本身任意控制的。

單點入口有幾大好處:
   第1、一些系統全局處理的變量,類,方法均可以在這裏進行處理。好比說你要對數據進行初步的過濾,你要模擬session處理,你要定義一些全局變量,甚至你要註冊一些對象或者變量到註冊器裏面
   第2、程序的架構更加清晰明瞭。


97. PHP提供了2套正則表達式函數庫,分別是哪兩套?【
(1) PCRE   Perl兼容正則表達式         preg_   爲前綴
(2) POSIX  便攜式的操做系統接口       ereg_   爲前綴

98. 正則表達式的組成?
    由原子(普通字符,如英文字符)、
    元字符(有特殊功用的字符)
    模式修正字符
    一個正則表達式中,至少包含一個原子

99. 不經常使用魔術方法的觸發時機?
__isset()  __unset()的觸發時機

__sleep()、 __wakeup()  在對對象進行串行化的時候調用
若是序列化對象的時候,不寫__sleep()方法,則全部的成員屬性都會被序列化,而定義了__sleep()方法,則只序列化指定數組中的變量。
所以,若是有很是大的對象而並不須要徹底儲存下來時此函數也頗有用。

使用 __sleep 的目的是關閉對象可能具備的任何數據庫鏈接,提交等待中的數據或進行相似的清除任務。此外,若是有很是大的對象而並不須要徹底儲存下來時此函數也頗有用。
使用 __wakeup 的目的是重建在序列化中可能丟失的任何數據庫鏈接以及處理其它從新初始化的任務。


100. OOP的三大特性是什麼?
1. 封裝性:
  也稱爲信息隱藏,就是將一個類的使用和實現分開,只保留部分接口和方法與外部聯繫,或者說只公開了一些供開發人員使用的方法。
  因而開發人員只須要關注這個類如何使用,而不用去關心其具體的實現過程,這樣就能實現MVC分工合做,也能有效避免程序間相互依賴,
    實現代碼模塊間鬆藕合。

2. 繼承性:
  就是子類自動繼承其父級類中的屬性和方法,並能夠能夠添加新的屬性和方法或者對部分屬性和方法進行重寫。繼承增長了代碼的可重用性。
  php只支持單繼承,也就是說一個子類只能有一個父類。

3. 多態性:
  子類繼承了來自父級類中的屬性和方法,並對其中部分方法進行重寫。
  因而多個子類中雖然都具備同一個方法,可是這些子類實例化的對象調用這些相同的方法後卻能夠得到徹底不一樣的結果,這種技術就是多態性。
  多態性加強了軟件的靈活性。

101.常見框架
thinkPHP
yii
ZendFramework
CakePhp
sy


102. 經常使用魔術方法的觸發時機?
1)__autoload() :當程序實例化某個類,而該類沒有在當前文件中被引入。此時會觸發執行__autoload()。程序但願經過該方法,自動引入這個類文件。該方法有一個參數,即就是那個忘記引入的類的名稱。__autoload()方法的工做原理是什麼?當程序執行到實例化某個類的時候,若是在實例化前沒有引入這個類文件,那麼就自動執行__autoload()函數。這個函數會根據實例化的類的名稱來查找這個類文件的路徑,當判斷這個類文件路徑下確實存在這個類文件後,就執行include或者require來載入該類,而後程序繼續執行,若是這個路徑下不存在該文件時就提示錯誤。使用自動載入的魔術函數能夠沒必要要寫不少個include或者require函數。

2)__construct()  :這個是魔術構造方法。構造方法是實例化對象的時候自動執行的方法,做用就是初始化對象。該方法能夠沒有參數,也能夠有多個參數。若是有參數,那麼new這個對象的時候要記得寫上相應的參數。在php5之前,沒有魔術構造方法,普通構造方法是一個跟類名同名的方法來實現構造的。若是一個類中既寫了魔術構造方法,又定義了普通構造方法。那麼php5以上版本中,魔術方法起做用,普通構造方法不起做用。反之,在php5之前版本中,不認識魔術構造方法,只是把該方法當作普通的方法。

3)__destruct()  :這個是魔術析構方法。析構方法的做用和構造方法正好相反,是對象被銷燬時被自動調用的,做用是釋放內存。析構方法沒有參數。

4)__call() :當程序調用一個不存在或不可見的成員方法時,自動觸發執行__call()。它有兩個參數,分別是未訪問到的方法名稱和方法的參數。而第二個參數是數組類型。

5)__get() :當程序調用一個未定義或不可見的成員屬性時,自動觸發執行__get()。它有一個參數,表示要調用的屬性的名稱。

6)__set():當程序試圖寫入一個不存在或不可見的成員屬性時,PHP就會自動執行__set()。它包含兩個參數,分別表示屬性名稱和屬性值。
7)__tostring()  :當程序使用echo或print輸出對象時,會自動調用該方法。目的是但願經過該方法將對象轉化爲字符串,再輸出。__tostring() 無參數,可是該方法必須有返回值。

8)__clone()  :當程序clone一個對象的時候,能觸發__clone()方法,程序但願經過這個魔術方法實現:不只僅單純地克隆對象,還須要克隆出來的對象擁有原來對象的全部屬性和方法。


103. MVC的概念是什麼?
MVC(即模型-視圖-控制器)是80年代發明的一種軟件設計模式或者說編程思想。
M指模型層,V是指視圖層(顯示層或者用戶界面),C是指控制層。
使用mvc的目的是實現M和V分離,從而使得一個程序能夠輕鬆使用不一樣的用戶界面。
C存在的目的則是在M和V之間起到調節做用,確保M和V的同步,一旦M改變,V應該能同步更新。
將M和V分離,就能夠作到同一個網頁,在不一樣節日到來的時候能顯示不一樣的頁面風格,這隻須要提早製做多個視圖層模板頁面,
而無需更改M層程序。
MVC作到了編程中的分工合做,代碼的可重用性獲得最大化體現,程序邏輯更加清晰而富有條理,便於後期維護管理。


10四、 訪問權限修飾符有哪幾種,對比解釋
答:一、public 表示公共的,在本類中和子類中以及類外,能夠對其調用
二、protected表示受保護的,能夠在本類中和子類中調用
三、private表示私有的,只能在本類中調用
四、var,效果等同於public
10五、 Class關鍵詞前能夠有哪些修飾詞
a) Final修飾,表示該類是最終的,沒法繼承
b) Abstract修飾,表示該類是抽象類


10六、 做用域操做符在那些場合下使用
答:做用於操做符的使用場合
a) 本類中:
i. self::類常量
ii. self::靜態屬性
iii. self::方法()   parent::方法()
b) 子類中:
i. parent::類常量
ii. parent::靜態屬性(public或者protected)
iii. parent::方法()(public或者protected)
c) 類外:
i. 類名::類常量
ii. 類名::靜態屬性(public)
iii. 類名::靜態方法(public)

10七、 $this,self, parent分別表明什麼?哪些場合下使用
答:$this表明的是當前對象
self表明的是當前的類
parent表明的是當前類的父類
使用場合:
$this只能使用在當前類中,經過$this->能夠調用當前類中的屬性和方法;
self只能在當前類中使用,經過做用域操做符::訪問當前類中的類常量、當前類中的靜態屬性、當前類中的方法;
parent只能使用在有父類的當前類中,經過做用域操做符::訪問父類中的類常量、父類中的靜態屬性、父類中的方法。

10八、 說明是接口、抽象類兩者有何相同和不一樣的地方?
一、接口是幫助php實現功能意義上的多繼承的,用interface來聲明,其方法沒有方法體,使用implemens關鍵詞來實現接口。
接口中只能包含抽象方法和類常量,不能夠包含成員屬性。
二、抽象類是一種不能被實例化的類,只能做父類,用abstract class來定義,抽象類和普通類能夠沒有區別,類中能夠包含成員屬性、類常量、方法。
子類得用extends來繼承,並且只能是單繼承。
二者相同點是都不能夠被實例化,都是須要被繼承纔可使用。
二者的最大區別是接口能夠實現多繼承,而抽象類只能是單繼承。
接口中不能包含成員屬性,而抽象類中能夠有成員屬性。
接口中的抽象方法必須是public或者無訪問修飾詞,接口中的抽象方法不能用abstract來修飾。
抽象類中的方法能夠是普通方法,也能夠是抽象方法,若是是抽象方法,必定須要使用abstract來修飾。

10九、 解釋PHP中單例模式?
又叫作單態模式、單元素模式、singleton pattern。
單例模式指在PHP的應用程序的範圍內只對指定的類建立一個實例。使用單例模式的類稱爲單例類。
在php中單例類必需要有一個私有的構造方法,還要有一個私有的魔術克隆方法(該方法體中爲空)
和一個私有的靜態的成員屬性$_instance.
私有構造方法防止除自身之外的類來實例化它。私有的方法體爲空的克隆方法防止該類被克隆。
$_instance用來存儲被自身實例化後的對象。
還必需要有一個公共的靜態的方法getInstance()。該方法返回已經存儲了實例對象的$_instance。

1十、 什麼是SQL注入?
SQL注入攻擊是黑客對數據庫進行攻擊的經常使用手段之一。一部分程序員在編寫代碼的時候,
沒有對用戶輸入數據的合法性進行判斷,注入者能夠在表單中輸入一段數據庫查詢代碼並提交,
程序將提交的信息拼湊生成一個完整sql語句,服務器被欺騙而執行該條惡意的SQL命令。注入者根據 程序返回的結果,成功獲取一些敏感數據,甚至控制整個服務器,這就是SQL注入。

1十一、 如何防止SQL注入?
概括一下,主要有如下幾點:
1.永遠不要信任用戶的輸入。對用戶的輸入進行校驗,能夠經過正則表達式,或限制長度;對單引號和
雙"-"進行轉換等。
2.永遠不要使用動態拼裝sql,可使用參數化的sql或者直接使用存儲過程進行數據查詢存取。
3.永遠不要使用管理員權限的數據庫鏈接,爲每一個應用使用單獨的權限有限的數據庫鏈接。
4.不要把機密信息直接存放,加密或者hash掉密碼和敏感的信息。
5.應用的異常信息應該給出儘量少的提示,最好使用自定義的錯誤信息對原始錯誤信息進行包裝
6.sql注入的檢測方法通常採起輔助軟件或網站平臺來檢測,軟件通常採用sql注入檢測工具jsky,網站平臺就有億思網站安全平臺檢測工具。

1十二、 FCKEditor自動過濾的解決辦法?
若是您須要編輯模板頁,默認的FCK設置是會去掉<HTML></HTML><BODY></BODY>標籤,並且會給你加上<P></P>標籤的,若是須要保留 的話,只要更改下設置能夠了。
在fckconfig.js裏面有:FCKConfig.FullPage = false ;
改成:FCKConfig.FullPage = true;
若是想去掉自動添加<P>的代碼就能夠在這裏設置
默認是
FCKConfig.EnterMode = 'p' ;    // p | div | br
FCKConfig.ShiftEnterMode = 'br' ; // p | div | br
改爲
FCKConfig.EnterMode = 'br' ;    // p | div | br
FCKConfig.ShiftEnterMode = 'p' ; // p | div | br

11三、 $_REQUEST、$_GET、$_POST、$_COOKIE 的關係和區別:
1.關係:$_REQUEST包含了$_GET、$_POST、$_COOKIE的全部內容,是它們的集合體。
2.$_GET、$_POST、$_COOKIE在$_REQUEST中都有一個副本。
3.經過$_REQUEST獲取變量值,PHP頁面由於1. 變量如何定義?如何檢查變量是否認義?如何刪除一個變量?判斷一個變量是否爲空的函數?
isset()
unset()
empty()

2. 什麼是可變變量?
一個變量的變量名能夠動態的設置和使用。
$a = 'hello' , $$a = 'world', ${$a}=hello world

3. 變量賦值方式有哪幾種?
1)直接賦值
2)變量間賦值
3)引用賦值

4. 引用和拷貝有什麼區別?
拷貝是將原來的變量內容複製下來,拷貝後的變量與原來的變量使用各自的內存,互不干擾。
引用至關因而變量的別名,其實就是用不一樣的名字訪問同一個變量內容。當改變其中一個變量的值時,另外一個也跟着發生變化。


5. php中變量有哪些基本數據類型?
php支持8種原始數據類型。
包括:
四種標量類型(布爾型boolean,整型interger,浮點型float/double , 字符串string)
兩種複合類型(數組array , 對象object)
兩種特殊類型(資源resource,NULL)


6. 其它類型轉換爲boolean類型時,哪些被認爲是false?
布爾值false,整型值0, 浮點型值0.0, 空白字符串, 字符串'0', 空數組,特殊數據類型NULL, 沒有設定的變量。

empty()函數在哪些狀況下返回true?
布爾值false,
整型值0,
浮點型值0.0,
空白字符串,
字符串'0',
array()空數組,
特殊數據類型NULL,
沒有任何屬性的對象,
沒有賦值的變量。


7. 若是定義了一個變量$a ,可是沒有賦初始值
那麼$a==0嗎?
$a==false嗎?
$a==''嗎?
$a==NULL嗎?
$a===NULL嗎? 答:echo=>什麼都沒有 , var_dump=>NULL
empty($b)==true嗎?———————————— echo=>1 , var_dump=>bool(true)
此時若是輸出$a++是多少?——————— echo=>什麼都沒有 , var_dump=>NULL
若是輸出++$a又是多少?————————— echo=>1  , var_dump=>int(1)


8. 字符串怎麼轉成整數,有幾種方法?怎麼實現?
強制類型轉換: (整型)字符串變量名;
直接轉換:settype(字符串變量,整型);
intval(字符串變量);

9. 標量數據和數組的最大區別是什麼?
一個標量只能存放一個數據,而數組能夠存放多個數據。


10. 常量如何定義? 如何檢測一個常量是否被定義?常量的值只能是哪些數據類型?
define()//定義常量 , defined()//檢查常量是否認義
常量的值只能是標量類型的數據。


11. 常量分爲系統內置常量和自定義常量。請說出最多見的幾個系統內置常量?
__FILE__ , __LINE__ , PHP_OS , PHP_VERSION

12. 若是定義了兩個相同的常量,前者和後者哪一個起做用?
前者起做用,由於常量一旦定義就不能被從新定義或者取消定義。


13. 常量和變量有哪些區別?
1)常量前沒有$符號;
2)常量只能經過define()定義,而不能經過賦值語句定義;
3)常量能夠在任何地方定義和訪問,而變量定義的反問有固定的規則;
4)常量一旦定義就不能被從新定義或者取消定義,而變量而經過賦值方式從新定義;
5)常量的值只能是標量數據,而變量的數據庫類型有8中原始數據類型。


14. PHP中經常使用的幾個預約義的全局數組變量是哪些?
有9大預約義的內置數組變量:
$_POST, $_GET, $_REQUEST, $_SESSION, $_COOKIE, $_FILES,$_SERVER, $_ENV, $GLOBALS

15. 在實際開發中,常量最經常使用於哪些地方?
1)鏈接數據庫的信息定義成常量,如數據庫服務器的用戶名、密碼、數據庫名、主機名;
2)將站點的部分路徑定義成常量,如web絕對路徑,smarty的安裝路徑,model、view或者controller的文件夾路徑;
3)網站的公共信息,如網站名稱,網站關鍵詞等信息。

16. 函數的優越性有哪些?
提升程序的可維護性
        提升軟件的可靠性
        提升程序的可重用性
        提升程序的開發效率


17. 如何定義一個函數?函數名區分大小寫嗎?
1)使用 function 關鍵字;
2)函數命名規則和變量同樣,以字母或者下劃線開頭,而不能以數字開頭;
3)函數名不區分大小寫;
4)函數名不可使用已經聲明過的或者系統自建的函數名稱。


18. 什麼是變量的能見度 或者 說是變量做用域?
就是變量在程序中的可做用範圍。根據變量的能見度,變量分爲局部變量和全局變量。


19. 什麼是局部變量和全局變量?函數內是否能夠直接調用全局變量?
局部變量是函數內部定義的變量,其做用域是所在的函數。若是函數外還有一個跟局部變量名字同樣的變量,
程序會認爲它們兩個是徹底不一樣的兩個變量。當退出函數的時候,其中的局部變量就同時被清除。

全局變量是定義在全部函數之外的變量,其做用域是整個php文件,可是在用戶自定義的函數內部是沒法使用的。
若是必定要在用戶自定義的函數內部使用全局變量,那麼就須要使用global關鍵字聲明。
也就是說若是在函數內的變量前加上golbal來修飾,那麼函數內部就能夠訪問到這個全局變量,
不只能夠利用這個全局變量進行運算並且能夠對這個全局變量進行從新賦值。
全局變量還可使用 $GLOBALS['var'] 來調用。


20. global關鍵詞如何使用?預約義的全局變量數組$GLOBALS如何使用?


21. 什麼是靜態變量?
若是一個函數內定義的變量前使用關鍵字static來聲明,那麼該變量就是靜態變量。
通常函數內的變量在函數調用結束後,其存儲的數據將被清除,所佔的內存空間也被釋放。而使用靜態變量時,
該變量會在函數第一次被調用時被初始化,初始化後該變量也不會被清除,當再次調用該函數時,這個靜態變量
再也不被初始化,而能保存上次函數執行完後的值。能夠說靜態變量在全部對該函數的調用之間共享。


22. php中函數傳遞參數的方式有哪些?二者有什麼區別?
按值傳遞和按地址傳遞(或按引用傳遞)
(1)按值傳遞:  待傳遞的變量,與傳遞給函數以後的變量是存儲在不一樣的空間中。因此函數體內對
               該變量值作的修改,不影響本來的變量值。
    (2)按地址傳遞: 使用 & 符號,代表該參數是以地址的方式傳遞值。並不會將主程序中的指定數值或目標變量傳遞給函數,
               而是把該數值或變量的內存儲存區塊地址導入函數之中,因此函數體內的該變量和主程序中的該變量在內存
               中是同一個。函數體作的修改,直接影響到函數體外部的該變量的值。


23. 什麼是遞歸函數?如何進行遞歸調用?
遞歸函數其實就是調用自身的函數,可是必須知足如下兩個條件:
1)在每一次調用自身時,必須是更接近於最終結果;
2)必須有一個肯定的遞歸終止條件,不會形成死循環。
舉例說明:
在實際工做中每每會在遍歷文件夾的時候使用。
若是有個例子是但願獲取到目錄windows下全部的文件,那麼先遍歷windows目錄,若是發現其中還有文件夾,那麼就會調用自身,繼續往下尋找,依次類推,
直到遍歷到再也沒有文件夾爲止,這也就是意味着遍歷出來了全部的文件。


24. 判斷一個函數是否存在?
    function_exists( string $function_name )  若是存在,返回true, 不存在則返回 false。

25. func()和@func()之間有什麼區別?
第二個函數調用失敗不會報錯,第一個會報錯

26. include()和require()函數的用法和區別是什麼?include_once()和require_once()呢?
include和require出現錯誤後的錯誤級別不同
include_once()和require_once()在加載以前要判斷是否已經導入

27. 說出前置++和後置++的區別?
前置++是先將變量增長1,而後在將值賦值給原來的變量;
後置++是先返回變量的當前值,而後再將變量的當前值增長1.


28. 字符串運算符「.」與算術運算符「+」有什麼區別?
當「a」「b」之間使用.時認爲是連字符。若是二者間是+的時候php會認爲是一次運算。
1)若是+號兩邊的字符串是數字組成的,那麼會將字符串自動轉爲整型;
2)若是+號兩邊是純粹的字母,那麼會輸出0;
3)若是+號兩邊的字符串是以數字開頭的,那麼會截取字符串開頭的數字,而後進行運算。


29. 什麼是三目(或三元)運算符?
根據一個表達式的結果在另兩個表達式中選擇一個。
例如: ($a==true) ? 'good':'bad';


30. 控制流程語句有哪些?
1:三種程序結構    順序結構、分支結構、循環結構
2:分支: if/esle/esleif/     switch/case/default
3: switch 須要注意的:
case子句中的常量能夠是整型、字符串型常量、 或者常量表達式,不容許是變量。
  同一個switch子句中,case的值不能相同,不然只能取到首次出現case中的值。
4: 循環  for while   do...while
 do...while 後面必須加入分號結尾。
 while 和 do...while 的區別
5:break 和 continue 的區別。
break能夠終止循環。
continue沒有break強大,只能終止本次循環而進入到下一次循環中。


31. 數組的概念是什麼?數組根據索引分爲哪兩種,如何區分?數組的賦值方式有哪兩種?
數組是一個能夠存儲一組或一系列數值的變量(複合型變量)
索引數組(索引值爲數字,以0開始)和關聯數組(以字符串做爲索引值)

數組的賦值方式有哪兩種?
數組的聲明方式主要有兩種。
1.經過array()函數聲明數組;
能夠經過key=>value的方式分別定義索引和值,也能夠不定義數組的索引下標,只給出數組的元素值。
2.直接爲數組元素賦值,不須要調用array()函數。例如:
$arr[0] = 1;
$arr[1] = 2;
特別注意:
數組的下標若是是等價於整數的字符串值(但不能以0開頭),則會被看成整數對待。
  例如: $array[3] 與  $array['3'] 引用的是相同的一個元素,而 $array['03'] 引用的則就是另外的一個元素了。


32.數組如何遍歷?
①for循環
②foreach循環  ,這是最經常使用的遍歷方式。用法以下:foreach($arr as $key=>$value){}
③list each 和while 配合起來循環


33. foeach數組的時候指針是如何指向的?list()/each()/while()循環數組的時候指針如何指向的呢?
當foreach開始執行的時候,數組內部的指針會自動指向第一個單元。由於foreach所操做的是指定數組的拷貝,而不是該數組自己。
而each()一個數組後,數組指針將停留在數組中的下一個單元或者碰到數組結尾時停留在最後一個單元。若是要再次使用each()遍歷數組,必需要使用reset().
reset()將數組的內部指針倒回到第一個單元並返回第一個數組單元的值。


34. 如何計算數組長度(或者說計算數組中全部元素的個數)?字符串怎麼取長度?
count() -- 計算數組中的元素個數。
可使用count(數組名)或者count(數組名,1),若是有第二個參數,而且是數字1,則表示遞歸統計數組元素的個數。
若是第二個參數是數字0,則等同於只有一個參數的count()函數。
sizeof() -- count() 的別名
字符串:strlen()、mb_strlen();


35. 數組中相關的經常使用函數有哪些?
1) count --(sizeof別名)— 計算數組中的單元數目或對象中的屬性個數  
例如:int count ( mixed $var [, int $mode ] )  $var 一般都是數組類型,任何其它類型都只有一個單元。  $mode 默認值爲0. 1爲開啓遞歸地對數組計數
2) in_array ( mixed $needle , array $haystack [, bool $strict ] ) — 檢查數組中是否存在某個值。
若是 needle 是字符串,則比較是區分大小寫的。
若是第三個參數 strict 的值爲 TRUE 則 in_array() 函數還會檢查 needle 的類型是否和 haystack 中的相同。
3) array_merge(array $array1 [, array $array2 [, array $... ]] ) 將一個或多個數組的單元合併起來,一個數組中的值附加在前一個數組的後面。返回做爲結果的數組。
特別注意:若是輸入的數組中有相同的字符串鍵名,則該鍵名後面的值將覆蓋前一個值。然而,若是數組包含數字鍵名,後面的值將不會覆蓋原來的值,而是附加到後面。
若是隻給了一個數組而且該數組是數字索引的,則鍵名會以連續方式從新索引

4) 數組與字符串之間的轉換
(1)explode ( string $separator , string $string [, int $limit ] )  使用一個分隔字符來分隔一個字符串。
(2)implode ( string $glue , array $arr )  使用一個鏈接符將數組中的每一個單元鏈接爲一個字符串。
join 爲 implode 的別名

5) sort(array &$array [, int $sort_flags ]) — 對數組按照值排序,當本函數結束時數組單元將被從最低到最高從新安排。


36. 數組合並函數array_merge()和數組加法運算$arr + $arr2 的區別是什麼?
array_merge()->使用array_merge(),若是是關聯數組合並,若是數組的鍵名相同,那麼後面的值將覆蓋前者;若是是數字索引數組合並,則不覆蓋,而是
後者附加到前者後面。
"+"->使用數組加法運算,與array_merge()不一樣,加法運算無論是關聯數組仍是數字索引數組,都是將相同鍵名的的值捨棄,
也就是隻保留首次出現該鍵名的元素,後來的具備相同鍵名的元素都不會被加進來。


37. 字符串定義的時候單引號和雙引號有什麼區別?


38. echo(),print(),print_r()的區別?
(1)echo 是語法,Output one or more strings,沒有返回值;
(2)print 是函數,不能輸出數組和對象,Output a string,print有返回值;
(3)print_r 是函數,能夠輸出數組。print_r是個比較有意思的函數,能夠輸出stirng、int、float、
array、object等,輸出array時會用結構表示,print_r輸出成功時返回true;並且print_r能夠經過print_r($str,true)來,使print_r不輸出而返回print_r處理後的值。此外,對於echo和print,基本以使用echo居多,由於其效率比print要高。


39. 按照功能分類說說都有哪些字符串處理函數?這些函數的做用是什麼?
A. 字符串輸出函數
(1)echo $a,$b,$c......;  是一個語言結構,而不是一個真正的函數。
(2)print($a)    本函數輸出字符串。若成功則返回 1,失敗返回 0
(3)print_r($a)
(4)var_dump($a); 能輸出類型、長度、值
B. 去除字符串首尾空格的函數: trim  ltrim  rtrim(別名:chop)   使用第二個參數,還能夠去除指定的字符。
C. 轉義字符串函數:addslashes()
D. 獲取字符串長度的函數:strlen()
E. 截取字符串長度的的函數:substr()
F. 檢索字符串函數: strstr() , strpos()
G. 替換字符串函數:str_replace()


40. 請給出如下問題的正確答案?
1).$arr = array('james', 'tom', 'symfony');請將$arr數組的值用’,’分割併合併成字符串輸出?
echo implode(‘,’,$arr);

2).$str = ‘jack,james,tom,symfony’; 請將$str用’,’分割,並把分割後的值放到$arr數組中?
$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). 獲取隨機數的函數有哪幾個?mt_rand() 和 rand()哪一個執行速度快?


41.頁面字符出現亂碼,怎麼解決?
1.首先考慮當前文件是否是設置了字符集。查看是否是meta標籤中寫了charset,若是是php頁面還能夠看看是否是
在header()函數中指定了charset;
例如:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
header(「content-type:text/html;charset=utf-8」);

2.若是設置了字符集(也就是charset),那麼判斷當前文件保存的編碼格式是否跟頁面設置的字符集保持一致,
二者必須保持統一;

3.若是涉及到從數據庫提取數據,那麼判斷數據庫查詢時的字符集是否跟當前頁面設置的字符集一致,二者必須統一,
例如:mysql_query(「set names utf8」)。


42. 正則表達式是什麼?php中有哪些經常使用的跟正則相關的函數?請寫出一個email的正則,中國手機號碼和座機號碼的正則表達式?
正則表達式是用於描述字符排列模式的一種語法規則。正則表達式也叫作模式表達式。
網站開發中正則表達式最經常使用於表單提交信息前的客戶端驗證。
好比驗證用戶名是否輸入正確,密碼輸入是否符合要求,email、手機號碼等信息的輸入是否合法。
在php中正則表達式主要用於字符串的分割、匹配、查找和替換操做。
preg系列函數能夠處理。具體有如下幾個:
string preg_quote ( string str [, string delimiter] )
轉義正則表達式字符 正則表達式的特殊字符包括:. \\ + * ? [ ^ ] $ ( ) { } = ! < > | :。
preg_replace -- 執行正則表達式的搜索和替換
mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit] )
preg_replace_callback -- 用回調函數執行正則表達式的搜索和替換
mixed preg_replace_callback ( mixed pattern, callback callback, mixed subject [, int limit] )
preg_split -- 用正則表達式分割字符串
array preg_split ( string pattern, string subject [, int limit [, int flags]] )
43. 若是想過濾掉某個字符串中全部的html標記使用哪一個函數?


44. preg_replace()和 str_ireplace()兩個函數在使用上有什麼不一樣?preg_split()和split()函數如何使用?


45. 獲取當前時間戳的函數主要有哪些?用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傳值的時候,若中文出現亂碼,應該用哪一個函數對中文進行編碼?
用戶在網站表單提交數據的時候,爲了防止腳本攻擊(好比用戶輸入<script>alert(111);</script>),php端接收數據的時候,應該如何處理?
使用urlencode()對中文進行編碼,使用urldecode()來解碼。
使用htmlspecialchars($_POST[‘title’])來過濾表單傳參就能夠避免腳本攻擊。


47. 鏈接數據庫操做的步驟是什麼?每一步的返回值是什麼數據類型?尤爲是mysql_query()返回什麼數據類型?

48. 說說mysql_fetch_row() 和mysql_fetch_assoc()和mysql_fetch_array之間有什麼區別?
第一個是返回結果集中的一行做爲索引數組,第二個是返回關聯數組,而第三個既能夠返回索引數組也能夠返回關聯數組,取決於它的第二個參數 MYSQL_BOTH MYSQL_NUM  MYSQL_ASSOC 默認爲MYSQL_BOTH
$sql =」select * from table1」;
$result = mysql_query($sql);
mysql_fetch_array($result, MYSQL_NUM);

49. 請說出目前學過的返回是資源的函數?
答: mysql_connect();
mysql_query();只有這執行select的時候成功,才返回資源,失敗返回FALSE
fopen();

50. 打開、關閉文件分別是什麼函數? 文件讀寫是什麼函數?刪除文件是哪一個函數?
判斷一個文件是否存在是哪一個函數?新建目錄是哪一個函數?


51. 文件上傳須要注意哪些細節?怎麼把文件保存到指定目錄?怎麼避免上傳文件重名問題?
1.首現要在php.ini中開啓文件上傳;
2.在php.ini中有一個容許上傳的最大值,默認是2MB。必要的時候能夠更改;
3.上傳表單必定要記住在form標籤中寫上enctype="multipart/form-data";
4. 提交方式 method 必須是 post;
5. 設定 type="file" 的表單控件;
6.要注意上傳文件的大小MAX_FILE_SIZE、文件類型是否符合要求,上傳後存放的路徑是否存在。

能夠經過上傳的文件名獲取到文件後綴,而後使用時間戳+文件後綴的方式爲文件從新命名,這樣就避免了重名。
能夠本身設置上傳文件的保存目錄,與文件名拼湊造成一個文件路徑,使用move_uploaded_file(),就能夠完成
將文件保存到指定目錄。


52. $_FILES是幾維數組?第一維和第二維的索引下標分別是什麼?批量上傳文件的時候須要注意什麼?
二維數組。第一維是上傳控件的name,二維下標分別爲name/type/tmp_name/size/error.
 

53. header()函數主要的功能有哪些?使用過程當中注意什麼?
答:

54. 文件下載的時候若是使用header()函數?
答:header("content-type: application/octet-stream;charset=UTF-8"); //在這裏加utf-8和在上面定義有什麼區別?、??
           header("accept-ranges: bytes");
            header("accept-length: ".filesize($filedir.$filename));
            header("content-disposition: attachment; filename=".$filedir.$filename);


55. 什麼是ajax?ajax的原理是什麼?ajax的核心技術是什麼?ajax的優缺點是什麼?
ajax是asynchronous javascript and xml的縮寫,是javascript、xml、css、DOM等多個技術的組合。 '$'是jQuery的別名.

  頁面中用戶的請求經過ajax引擎異步地與服務器進行通訊,服務器將請求的結果返回給這個ajax引擎,
  最後由這個ajax引擎來決定將返回的數據顯示到頁面中的指定位置。Ajax最終實現了在一個頁面的指定位置能夠加載另外一個頁面全部的輸出內容。
這樣就實現了一個靜態頁面也能獲取到數據庫中的返回數據信息了。因此ajax技術實現了一個靜態網頁在不刷新整個頁面的狀況下與服務器通訊,
減小了用戶等待時間,同時也從而下降了網絡流量,加強了客戶體驗的友好程度。
Ajax的優勢是:
1.  減輕了服務器端負擔,將一部分之前由服務器負擔的工做轉移到客戶端執行,利用客戶端閒置的資源進行處理;
2.  在只局部刷新的狀況下更新頁面,增長了頁面反應速度,使用戶體驗更友好。
Ajax的缺點是不利於seo推廣優化,由於搜索引擎沒法直接訪問到ajax請求的內容。
ajax的核心技術是XMLHttpRequest,它是javascript中的一個對象。

56. jquery是什麼?jquery簡化ajax後的方法有哪些?
jQuery是Javascript的一種框架。$.get(),$.post(),$.ajax()。$是jQuery對象的別名。

57. 什麼是會話控制?
簡單地說會話控制就是跟蹤和識別用戶信息的機制。會話控制的思想就是可以在網站中跟蹤一個變量,經過這個變量,
系統能識別出相應的用戶信息,根據這個用戶信息能夠得知用戶權限,從而展現給用戶適合於其相應權限的頁面內容。
目前最主要的會話跟蹤方式有cookie,session。

58. 會話跟蹤的基本步驟
1).訪問與當前請求相關的會話對象
2).查找與會話相關的信息
3).存儲會話信息
4).廢棄會話數據

59. 使用cookie的注意事項有哪些?
1) setcookie()以前不能夠有任何頁面輸出,就是空格,空白行也不能夠;
2) setcookie()後,在當前頁面調用$_COOKIE['cookiename']不會有輸出,必須刷新或到下一個頁面才能夠看到cookie值;
3) 不一樣的瀏覽器對cookie處理不一樣,客戶端能夠禁用cookie,瀏覽器也能夠閒置cookie的數量,一個瀏覽器能建立的cookie數量最多300個,而且每一個不能夠超過4kb,
每一個web站點能設置的cookie總數不能超過20個。
4) cookie是保存在客戶端的,用戶禁用了cookie,那麼setcookie就不會起做用了。因此不能夠過分依賴cookie。

60. 使用session的時候,經過什麼來表示當前用戶,從而與其餘用戶進行區分?
sessionid,經過session_id()函數能夠取得當前的session_id。

61. session和cookie的使用步驟分別是什麼?什麼是sesssion和cookie的生命週期?session和cookie的區別是什麼?
cookie是保存在客戶端機器的,對於未設置過時時間的cookie,cookie值會保存在機器的內存中,只要關閉瀏覽器則
cookie自動消失。若是設置了cookie的過時時間,那麼瀏覽器會把cookie以文本文件的形式保存到硬盤中,
當再次打開瀏覽器時cookie值依然有效。
session是把用戶須要存儲的信息保存在服務器端。每一個用戶的session信息就像是鍵值對同樣存儲在服務器端,
其中的鍵就是sessionid,而值就是用戶須要存儲信息。服務器就是經過sessionid來區分存儲的session信息是
哪一個用戶的。
二者最大的區別就是session存儲在服務器端,而cookie是在客戶端。session安全性更高,而cookie安全性弱。

session在web開發中具備很是重要的分量。它能夠將用戶正確登陸後的信息記錄到服務器的內存中,當用戶以此身份
訪問網站的管理後臺時,無需再次登陸便可獲得身份確認。而沒有正確登陸的用戶則不分配session空間,即使輸入了
管理後臺的訪問地址也不能看到頁面內容。經過session肯定了用戶對頁面的操做權限。
使用session的步驟:
1. 啓動session:
使用session_start()函數來啓動。
2. 註冊會話:
    直接給$_SESSION數組添加元素便可。
3. 使用會話:
判斷session是否爲空或者是否已經註冊,若是已經存在則像普通數組使用便可。
4. 刪除會話:
1.可使用unset刪除單個session;
2.使用$_SESSION=array()的方式,一次註銷全部的會話變量;
3.使用session_destroy()函數來完全銷燬session。


cookie怎麼使用?
1. 記錄用戶訪問的部分信息
2. 在頁面間傳遞變量
3. 將所查看的internet頁存儲在cookies臨時文件夾中,能夠提升之後的瀏覽速度。

建立cookie:
setcookie(string cookiename , string value , int expire);
讀取cookie:
經過超級全局數組$_COOKIE來讀取瀏覽器端的cookie的值。
刪除cookie:有兩種方法
1.手工刪除方法:
右擊瀏覽器屬性,能夠看到刪除cookies,執行操做便可將全部cookie文件刪除。
2.setcookie()方法:
跟設置cookie的方法同樣,不過此時將cookie的值設置爲空,有效時間爲0或小於當前時間戳。

62. 如何設置一個cookie的名字爲username,值爲jack,而且讓此cookie一週後失效?
一個瀏覽器最多能夠產生多少個cookie,每一個cookie文件最大不能超過多少?
setcookie(‘username’,’jack’,time()+7*24*3600);
最多能夠產生20個cookie,每一個最多不超過4K


63. 設置或讀取session以前,須要作什麼?
能夠直接在php.ini中開啓session.auto_start = 1或者在頁面頭部用session_start();
開啓session,session_start()前面不能有任何輸出,包括空行。


64. 在實際開發中,session在哪些場合使用?
session用來存儲用戶登陸信息和用在跨頁面傳值。
1)經常使用在用戶登陸成功後,將用戶登陸信息賦值給session;
2)用在驗證碼圖片生成,當隨機碼生成後賦值給session。

65. 註銷session會話的形式有幾種?
unset()
$_SESSION=array();
session_destroy();

66. 什麼是OOP?什麼是類和對象?什麼是類屬性?
OOP(object oriented programming),即面向對象編程,其中兩個最重要的概念就是類和對象。
世間萬物都具備自身的屬性和方法,經過這些屬性和方法能夠區分出不一樣的物質。
屬性和方法的集合就造成了類,類是面向對象編程的核心和基礎,
經過類就將零散的用於實現某個功能的代碼有效地管理起來了。
類只是具有了某些功能和屬性的抽象模型,而實際應用中須要一個一個實體,也就是須要對類進行實例化,
類在實例化以後就是對象。★類是對象的抽象概念,對象是類的實例化。

OOP具備三大特色:1. 封裝性(又叫作隱藏性);2. 繼承性; 3. 多態性。

OOP的優勢:一、代碼重用性高(省代碼) 二、使程序的可維護性高(擴展性) 三、靈活性
 

67. 經常使用的屬性的訪問修飾符有哪些?分別表明什麼含義?
private,protected,public。
類外:public ,var
子類中:public,protected ,var
本類中:private,protected,public ,var
若是不使用這三個關鍵詞,也可使用var關鍵字。可是var不能夠跟權限修飾詞一塊兒使用。var定義的變量,子類中能夠訪問到,類外也能夠訪問到,至關於public

類前面:只能加final,abstract
屬性前面:必須有訪問修飾符(private,protected,public,var)
方法前面:static,final,private,protected,public ,abstract


68. $this和self、parent這三個關鍵詞分別表明什麼?在哪些場合下使用?
$this 當前對象
self  當前類
parent  當前類的父類
$this在當前類中使用,使用->調用屬性和方法。
self也在當前類中使用,不過須要使用::調用。
parent在類中使用。


69.類中如何定義常量、如何類中調用常量、如何在類外調用常量。
類中的常量也就是成員常量,常量就是不會改變的量,是一個恆值。
定義常量使用關鍵字const.
例如:const PI = 3.1415326;
不管是類內仍是類外,常量的訪問和變量是不同的,常量不須要實例化對象,
訪問常量的格式都是類名加做用域操做符號(雙冒號)來調用。
即:類名 :: 類常量名;


70. 做用域操做符::如何使用?都在哪些場合下使用?
調用常量
調用靜態方法


71. 什麼是魔術方法?經常使用的魔術方法有哪幾個?
以__開頭的系統自定義的方法。
__construct()
__destruct()
__autoload()
__call()
__tostring()


72. 什麼是構造方法和析構方法?
構造方法就是在實例化一個對象的同時自動執行的成員方法,做用就是初始化對象。
php5以前,一個跟類名徹底相同的方法是構造方法,php5以後魔術方法__construct()就是構造方法。
若是類中沒有定義構造方法,那麼php會自動生成一個,這個自動生成的構造方法沒有任何參數,
沒有任何操做。
構造方法的格式以下:
function __construct(){}
或者:function 類名(){}
構造方法能夠沒有參數,也能夠有多個參數。

析構方法的做用和構造方法正好相反,是對象被銷燬時被自動調用的,做用是釋放內存。
析構方法的定義方法爲:__destruct();
由於php具備垃圾回收機制,能自動清除再也不使用的對象,釋放內存,通常狀況下能夠不手動建立析構方法。

73. __autoload()方法的工做原理是什麼?
使用這個魔術函數的基本條件是類文件的文件名要和類的名字保持一致。
當程序執行到實例化某個類的時候,若是在實例化前沒有引入這個類文件,那麼就自動執行__autoload()函數。
這個函數會根據實例化的類的名稱來查找這個類文件的路徑,當判斷這個類文件路徑下確實存在這個類文件後
就執行include或者require來載入該類,而後程序繼續執行,若是這個路徑下不存在該文件時就提示錯誤。
使用自動載入的魔術函數能夠沒必要要寫不少個include或者require函數。


74. 什麼是抽象類和接口?抽象類和接口有什麼不一樣和類似的地方?
抽象類是一種不能被實例化的類,只能做爲其餘類的父類來使用。
抽象類是經過關鍵字 abstract 來聲明的。
抽象類與普通類類似,都包含成員變量和成員方法,二者的區別在於,抽象類中至少要包含一個抽象方法,
抽象方法沒有方法體,該方法天生就是要被子類重寫的。
抽象方法的格式爲:abstract function abstractMethod();
由於php中只支持單繼承,若是想實現多重繼承,就要使用接口。也就是說子類能夠實現多個接口。
接口類是經過interface關鍵字來聲明的,接口類中的成員變量和方法都是public的,方法能夠不寫關鍵字public,
接口中的方法也是沒有方法體。接口中的方法也天生就是要被子類實現的。

抽象類和接口實現的功能十分類似,最大的不一樣是接口能實現多繼承。在應用中選擇抽象類仍是接口要看具體實現。
子類繼承抽象類使用extends,子類實現接口使用implements。


抽象類至少有一個抽象方法嗎??????
答:若是一個類聲明成抽象類,裏面能夠沒有抽象方法
   若是一個類中有抽象方法,這個類必須是抽象類


75. __call的參數有幾個,類型是什麼,意義是什麼?
魔術方法__call()的做用是當程序調用一個不存在或不可見的成員方法時,php會先調用__call()方法,
將那個不存在的方法的方法名和參數都存儲下來。
__call()包含兩個參數,  第一個參數是那個不存在的方法的方法名,是個字符串類型;
第二個參數是那個不存在的方法的全部參數,是個數組類型。

本人認爲__call()方法的意義更多在於調試,能夠定位到錯誤。同時能夠捕捉異常,若是某個方法不存在,
則執行其它可替代方法。


76. smarty模板技術的用途是什麼?
爲了php與html分開,美工和程序員各司其職,互不干擾。

77. smarty配置主要有哪幾項?
1. 引入smarty.class.php;
2. 實例化smarty對象;
3. 從新修改默認的模板路徑;
4. 從新修改默認的編譯後文件的路徑;
5. 從新修改默認的配置文件的路徑;
6. 從新修改默認的cache的路徑。
7. 能夠設置是否開啓cache。
8. 能夠設置左側和右側定界符。


78. smarty在使用過程當中須要注意哪些細節?
Smarty是基於MVC概念的一種模板引擎,它將一個頁面程序分紅了兩部分來實現:即視圖層和控制層,
也就是說smarty技術將用戶UI與php代碼分離開。
這樣程序員和美工各司其職,互不干擾。
smarty運用過程當中要注意如下幾個問題:
1.正確配置smarty。主要要實例化smarty對象,配置smarty模板文件的路徑;
2.php頁面中使用assign賦值 和 display顯示頁面;
3.smarty模板文件中不容許出現php代碼段,全部的註釋,變量,函數都要包含在定界符內。
A.{}
B. foreach
C. if else
D. include
E. literal

79. 什麼是MVC?MVC的目的是什麼?
MVC是一種編程思想,將PHP代碼和html代碼分離開

80. oop中的多態性跟方法重寫有什麼關係?
答:

81. java語言中方法重寫和重載分別表明什麼意思?準確說php支持方法的重載嗎?不少參考書中提到的php重載實際上該如何正確理解?
答:
php不支持方法的重載,不少書裏提到的PHP‘重載’應該是‘重寫’

82. final關鍵字能定義類中的成員屬性嗎?
答:不能,類的成員屬性只能有public ,private , protected ,var 來定義

83. final關鍵字定義的類可以被繼承嗎?
答:final定義的類不能被繼承

84. 說說static關鍵字的使用場合?static能用在class前嗎?
    static能夠跟public,protected,private一塊兒使用嗎?構造方法能夠是static的嗎?
答: static能夠在屬性和方法前面使用,調用static屬性或者方法時,只要將類載入就可用,不用實例化
static不能用在class的前面
    static能夠跟public,protected,private一塊兒使用,在方法的前面;
▲構造方法不能是static

85. 接口能夠實例化嗎?抽象類能實例化嗎?
答:接口和抽象類都不能被實例化

86. class前面能加訪問修飾符嗎?若是能加,只能是哪幾個訪問修飾符?能夠是權限訪問修飾符public,protected,private嗎?
答:class前面能夠加final,static;
★class前面不能加public,protected,private

87. 類中屬性前能夠不加訪問修飾符嗎?成員變量前的修飾符只能是public,protected,private嗎?還能夠是哪幾個?
答:類中的屬性必須加修飾符,除了那3個之外,還能夠加var

88. 若是echo一個數組,頁面輸出什麼?echo一個對象呢?print一個數組或者對象呢?
答:頁面只能輸出「Array」;echo一個對象會出現「Catchable fatal error: Object of class t2 could not be converted to string in G:\php2\t2.php on line 33」
   print一個數組時也只是輸出「Array」,print一個對象出現「Catchable fatal error: Object of class t2 could not be converted to string in G:\php2\t2.php 」
   ▲print和echo是同樣的


89. __tostring()魔術方法在何時被自動執行? __tostring()魔術方法必需要return返回值嗎?
當echo或者print一個對象時,就是自動觸發。並且__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 關鍵字的應用應注意的問題?
使用final關鍵字定義的類,禁止繼承。
使用final關鍵字定義的方法,禁止重寫。

95. 若是一個類既要繼承一個父類,又要實現多個接口,該如何寫?
書寫格式例如: class MaleHuman extends Human implements Animal,Life { ... }


96. 什麼是單點入口呢?
        所謂單點入口就是整個應用程序只有一個入口,全部的實現都經過這個入口來轉發,
        好比說在上面咱們就使用index.php做爲程序的單點入口,固然這個是能夠由你本身任意控制的。

單點入口有幾大好處:
   第1、一些系統全局處理的變量,類,方法均可以在這裏進行處理。好比說你要對數據進行初步的過濾,你要模擬session處理,你要定義一些全局變量,甚至你要註冊一些對象或者變量到註冊器裏面
   第2、程序的架構更加清晰明瞭。


97. PHP提供了2套正則表達式函數庫,分別是哪兩套?【
(1) PCRE   Perl兼容正則表達式         preg_   爲前綴
(2) POSIX  便攜式的操做系統接口       ereg_   爲前綴

98. 正則表達式的組成?
    由原子(普通字符,如英文字符)、
    元字符(有特殊功用的字符)
    模式修正字符
    一個正則表達式中,至少包含一個原子

99. 不經常使用魔術方法的觸發時機?
__isset()  __unset()的觸發時機

__sleep()、 __wakeup()  在對對象進行串行化的時候調用
若是序列化對象的時候,不寫__sleep()方法,則全部的成員屬性都會被序列化,而定義了__sleep()方法,則只序列化指定數組中的變量。
所以,若是有很是大的對象而並不須要徹底儲存下來時此函數也頗有用。

使用 __sleep 的目的是關閉對象可能具備的任何數據庫鏈接,提交等待中的數據或進行相似的清除任務。此外,若是有很是大的對象而並不須要徹底儲存下來時此函數也頗有用。
使用 __wakeup 的目的是重建在序列化中可能丟失的任何數據庫鏈接以及處理其它從新初始化的任務。


100. OOP的三大特性是什麼?
1. 封裝性:
  也稱爲信息隱藏,就是將一個類的使用和實現分開,只保留部分接口和方法與外部聯繫,或者說只公開了一些供開發人員使用的方法。
  因而開發人員只須要關注這個類如何使用,而不用去關心其具體的實現過程,這樣就能實現MVC分工合做,也能有效避免程序間相互依賴,
    實現代碼模塊間鬆藕合。

2. 繼承性:
  就是子類自動繼承其父級類中的屬性和方法,並能夠能夠添加新的屬性和方法或者對部分屬性和方法進行重寫。繼承增長了代碼的可重用性。
  php只支持單繼承,也就是說一個子類只能有一個父類。

3. 多態性:
  子類繼承了來自父級類中的屬性和方法,並對其中部分方法進行重寫。
  因而多個子類中雖然都具備同一個方法,可是這些子類實例化的對象調用這些相同的方法後卻能夠得到徹底不一樣的結果,這種技術就是多態性。
  多態性加強了軟件的靈活性。

101.常見框架
thinkPHP
yii
ZendFramework
CakePhp
sy


102. 經常使用魔術方法的觸發時機?
1)__autoload() :當程序實例化某個類,而該類沒有在當前文件中被引入。此時會觸發執行__autoload()。程序但願經過該方法,自動引入這個類文件。該方法有一個參數,即就是那個忘記引入的類的名稱。__autoload()方法的工做原理是什麼?當程序執行到實例化某個類的時候,若是在實例化前沒有引入這個類文件,那麼就自動執行__autoload()函數。這個函數會根據實例化的類的名稱來查找這個類文件的路徑,當判斷這個類文件路徑下確實存在這個類文件後,就執行include或者require來載入該類,而後程序繼續執行,若是這個路徑下不存在該文件時就提示錯誤。使用自動載入的魔術函數能夠沒必要要寫不少個include或者require函數。

2)__construct()  :這個是魔術構造方法。構造方法是實例化對象的時候自動執行的方法,做用就是初始化對象。該方法能夠沒有參數,也能夠有多個參數。若是有參數,那麼new這個對象的時候要記得寫上相應的參數。在php5之前,沒有魔術構造方法,普通構造方法是一個跟類名同名的方法來實現構造的。若是一個類中既寫了魔術構造方法,又定義了普通構造方法。那麼php5以上版本中,魔術方法起做用,普通構造方法不起做用。反之,在php5之前版本中,不認識魔術構造方法,只是把該方法當作普通的方法。

3)__destruct()  :這個是魔術析構方法。析構方法的做用和構造方法正好相反,是對象被銷燬時被自動調用的,做用是釋放內存。析構方法沒有參數。

4)__call() :當程序調用一個不存在或不可見的成員方法時,自動觸發執行__call()。它有兩個參數,分別是未訪問到的方法名稱和方法的參數。而第二個參數是數組類型。

5)__get() :當程序調用一個未定義或不可見的成員屬性時,自動觸發執行__get()。它有一個參數,表示要調用的屬性的名稱。

6)__set():當程序試圖寫入一個不存在或不可見的成員屬性時,PHP就會自動執行__set()。它包含兩個參數,分別表示屬性名稱和屬性值。
7)__tostring()  :當程序使用echo或print輸出對象時,會自動調用該方法。目的是但願經過該方法將對象轉化爲字符串,再輸出。__tostring() 無參數,可是該方法必須有返回值。

8)__clone()  :當程序clone一個對象的時候,能觸發__clone()方法,程序但願經過這個魔術方法實現:不只僅單純地克隆對象,還須要克隆出來的對象擁有原來對象的全部屬性和方法。


103. MVC的概念是什麼?
MVC(即模型-視圖-控制器)是80年代發明的一種軟件設計模式或者說編程思想。
M指模型層,V是指視圖層(顯示層或者用戶界面),C是指控制層。
使用mvc的目的是實現M和V分離,從而使得一個程序能夠輕鬆使用不一樣的用戶界面。
C存在的目的則是在M和V之間起到調節做用,確保M和V的同步,一旦M改變,V應該能同步更新。
將M和V分離,就能夠作到同一個網頁,在不一樣節日到來的時候能顯示不一樣的頁面風格,這隻須要提早製做多個視圖層模板頁面,
而無需更改M層程序。
MVC作到了編程中的分工合做,代碼的可重用性獲得最大化體現,程序邏輯更加清晰而富有條理,便於後期維護管理。


10四、 訪問權限修飾符有哪幾種,對比解釋
答:一、public 表示公共的,在本類中和子類中以及類外,能夠對其調用
二、protected表示受保護的,能夠在本類中和子類中調用
三、private表示私有的,只能在本類中調用
四、var,效果等同於public
10五、 Class關鍵詞前能夠有哪些修飾詞
a) Final修飾,表示該類是最終的,沒法繼承
b) Abstract修飾,表示該類是抽象類


10六、 做用域操做符在那些場合下使用
答:做用於操做符的使用場合
a) 本類中:
i. self::類常量
ii. self::靜態屬性
iii. self::方法()   parent::方法()
b) 子類中:
i. parent::類常量
ii. parent::靜態屬性(public或者protected)
iii. parent::方法()(public或者protected)
c) 類外:
i. 類名::類常量
ii. 類名::靜態屬性(public)
iii. 類名::靜態方法(public)

10七、 $this,self, parent分別表明什麼?哪些場合下使用
答:$this表明的是當前對象
self表明的是當前的類
parent表明的是當前類的父類
使用場合:
$this只能使用在當前類中,經過$this->能夠調用當前類中的屬性和方法;
self只能在當前類中使用,經過做用域操做符::訪問當前類中的類常量、當前類中的靜態屬性、當前類中的方法;
parent只能使用在有父類的當前類中,經過做用域操做符::訪問父類中的類常量、父類中的靜態屬性、父類中的方法。

10八、 說明是接口、抽象類兩者有何相同和不一樣的地方?
一、接口是幫助php實現功能意義上的多繼承的,用interface來聲明,其方法沒有方法體,使用implemens關鍵詞來實現接口。
接口中只能包含抽象方法和類常量,不能夠包含成員屬性。
二、抽象類是一種不能被實例化的類,只能做父類,用abstract class來定義,抽象類和普通類能夠沒有區別,類中能夠包含成員屬性、類常量、方法。
子類得用extends來繼承,並且只能是單繼承。
二者相同點是都不能夠被實例化,都是須要被繼承纔可使用。
二者的最大區別是接口能夠實現多繼承,而抽象類只能是單繼承。
接口中不能包含成員屬性,而抽象類中能夠有成員屬性。
接口中的抽象方法必須是public或者無訪問修飾詞,接口中的抽象方法不能用abstract來修飾。
抽象類中的方法能夠是普通方法,也能夠是抽象方法,若是是抽象方法,必定須要使用abstract來修飾。

10九、 解釋PHP中單例模式?
又叫作單態模式、單元素模式、singleton pattern。
單例模式指在PHP的應用程序的範圍內只對指定的類建立一個實例。使用單例模式的類稱爲單例類。
在php中單例類必需要有一個私有的構造方法,還要有一個私有的魔術克隆方法(該方法體中爲空)
和一個私有的靜態的成員屬性$_instance.
私有構造方法防止除自身之外的類來實例化它。私有的方法體爲空的克隆方法防止該類被克隆。
$_instance用來存儲被自身實例化後的對象。
還必需要有一個公共的靜態的方法getInstance()。該方法返回已經存儲了實例對象的$_instance。

1十、 什麼是SQL注入?
SQL注入攻擊是黑客對數據庫進行攻擊的經常使用手段之一。一部分程序員在編寫代碼的時候,
沒有對用戶輸入數據的合法性進行判斷,注入者能夠在表單中輸入一段數據庫查詢代碼並提交,
程序將提交的信息拼湊生成一個完整sql語句,服務器被欺騙而執行該條惡意的SQL命令。注入者根據 程序返回的結果,成功獲取一些敏感數據,甚至控制整個服務器,這就是SQL注入。

1十一、 如何防止SQL注入?
概括一下,主要有如下幾點:
1.永遠不要信任用戶的輸入。對用戶的輸入進行校驗,能夠經過正則表達式,或限制長度;對單引號和
雙"-"進行轉換等。
2.永遠不要使用動態拼裝sql,可使用參數化的sql或者直接使用存儲過程進行數據查詢存取。
3.永遠不要使用管理員權限的數據庫鏈接,爲每一個應用使用單獨的權限有限的數據庫鏈接。
4.不要把機密信息直接存放,加密或者hash掉密碼和敏感的信息。
5.應用的異常信息應該給出儘量少的提示,最好使用自定義的錯誤信息對原始錯誤信息進行包裝
6.sql注入的檢測方法通常採起輔助軟件或網站平臺來檢測,軟件通常採用sql注入檢測工具jsky,網站平臺就有億思網站安全平臺檢測工具。

1十二、 FCKEditor自動過濾的解決辦法?
若是您須要編輯模板頁,默認的FCK設置是會去掉<HTML></HTML><BODY></BODY>標籤,並且會給你加上<P></P>標籤的,若是須要保留 的話,只要更改下設置能夠了。
在fckconfig.js裏面有:FCKConfig.FullPage = false ;
改成:FCKConfig.FullPage = true;
若是想去掉自動添加<P>的代碼就能夠在這裏設置
默認是
FCKConfig.EnterMode = 'p' ;    // p | div | br
FCKConfig.ShiftEnterMode = 'br' ; // p | div | br
改爲
FCKConfig.EnterMode = 'br' ;    // p | div | br
FCKConfig.ShiftEnterMode = 'p' ; // p | div | br

11三、 $_REQUEST、$_GET、$_POST、$_COOKIE 的關係和區別:
1.關係:$_REQUEST包含了$_GET、$_POST、$_COOKIE的全部內容,是它們的集合體。
2.$_GET、$_POST、$_COOKIE在$_REQUEST中都有一個副本。
3.經過$_REQUEST獲取變量值,PHP頁面由於不肯定它是哪一種傳值方式,所以會根據php.ini中的配置來接收值。
php.ini裏能夠設置,variables_order = 「GPC」。其含義是GET,POST,COOKIE.
因此PHP頁面會先從$_GET中獲取,再從$_POST中獲取,而後從$_COOKIE中獲取。
新得到的值會覆蓋以前獲取到的值。
所以從表現形式上看,$_REQUEST最後是獲取$_COOKIE中的值,若是$_COOKIE中沒有值,會獲取$_POST中的值,若是$_POST沒有獲取到,就去$_GET中獲取。若是
$_GET中也沒有該值,那麼$_REQUEST就返回null。
(???GET和POST同名的狀況下,$_REQUEST取的是POST的值。COOKIE與GET或POST重名的狀況下,$_REQUEST取的是COOKIE的值。COOKIE的優先級最高。)

11四、 什麼是萬能查詢
所謂萬能查詢就是可以組合多個查詢條件,實現多條件複合查詢的方法。咱們在日常的開發過程當中常常 會遇到須要根據多個條件查詢的狀況。
咱們不能由於說有多個條件要進行查詢,並且組合的可能性比較多,咱們就採用多條SQL語句的方式。 咱們應該有更靈活的方式來實現這個功能。
如何實現萬能查詢呢?查詢的時候要填寫條件,這些條件會經過表單進行提交。通常狀況下咱們使用 POST進行提交,那麼在PHP中咱們就可使用$_POST來接收提交的數據,咱們可使用empty()函數 來檢查$_POST數組中的某個元素是否是爲空。若是不爲空的話,那麼就認爲這個值是要被看成條件的 ,咱們就可使用字符串鏈接的方式來掛接一個查詢條件。最後把查詢語句組合起來,變成一條SQL語 句並執行,從而獲取查詢結果。不肯定它是哪一種傳值方式,所以會根據php.ini中的配置來接收值。

php.ini裏能夠設置,variables_order = 「GPC」。其含義是GET,POST,COOKIE.
因此PHP頁面會先從$_GET中獲取,再從$_POST中獲取,而後從$_COOKIE中獲取。
新得到的值會覆蓋以前獲取到的值。
所以從表現形式上看,$_REQUEST最後是獲取$_COOKIE中的值,若是$_COOKIE中沒有值,會獲取$_POST中的值,若是$_POST沒有獲取到,就去$_GET中獲取。若是
$_GET中也沒有該值,那麼$_REQUEST就返回null。
(???GET和POST同名的狀況下,$_REQUEST取的是POST的值。COOKIE與GET或POST重名的狀況下,$_REQUEST取的是COOKIE的值。COOKIE的優先級最高。)

11四、 什麼是萬能查詢
所謂萬能查詢就是可以組合多個查詢條件,實現多條件複合查詢的方法。咱們在日常的開發過程當中常常 會遇到須要根據多個條件查詢的狀況。
咱們不能由於說有多個條件要進行查詢,並且組合的可能性比較多,咱們就採用多條SQL語句的方式。 咱們應該有更靈活的方式來實現這個功能。
如何實現萬能查詢呢?查詢的時候要填寫條件,這些條件會經過表單進行提交。通常狀況下咱們使用 POST進行提交,那麼在PHP中咱們就可使用$_POST來接收提交的數據,咱們可使用empty()函數 來檢查$_POST數組中的某個元素是否是爲空。若是不爲空的話,那麼就認爲這個值是要被看成條件的 ,咱們就可使用字符串鏈接的方式來掛接一個查詢條件。最後把查詢語句組合起來,變成一條SQL語 句並執行,從而獲取查詢結果。javascript

相關文章
相關標籤/搜索