PHP基礎面試基礎-3
21. 什麼是靜態變數?
如果一個函式內定義的變數前使用關鍵字static來宣告,那麼該變數就是靜態變數。
一般函式內的變數在函式呼叫結束後,其儲存的資料將被清除,所佔的記憶體空間也被釋放。而使用靜態變數時,該變數會在函式第一次被呼叫時被初始化,初始化後該變數也不會被清除,當再次呼叫該函式時,這個靜態變數不再被初始化,而能儲存上次函式執行完後的值。可以說靜態變數在所有對該函式的呼叫之間共享。
22. php中函式傳遞引數的方式有哪些?兩者有什麼區別?
按值傳遞和按地址傳遞(或按引用傳遞)
(1)按值傳遞: 待傳遞的變數,與傳遞給函式之後的變數是儲存在不同的空間中。所以函式體內對該變數值做的修改,不影響原本的變數值。
(2)按地址傳遞: 使用 & 符號,表明該引數是以地址的方式傳遞值。並不會將主程式中的指定數值或目標變數傳遞給函式,而是把該數值或變數的記憶體儲存區塊地址匯入函式之中,所以函式體內的該變數和主程式中的該變數在記憶體中是同一個。函式體做的修改,直接影響到函式體外部的該變數的值。
23. 什麼是遞迴函式?如何進行遞迴呼叫?
遞迴函式其實就是呼叫自身的函式,但是必須滿足以下兩個條件:
1)在每一次呼叫自身時,必須是更接近於最終結果;
2)必須有一個確定的遞迴終止條件,不會造成死迴圈。
舉例說明:
在實際工作中往往會在遍歷資料夾的時候使用。
如果有個例子是希望獲取到目錄windows下所有的檔案,那麼先遍歷windows目錄,如果發現其中還有資料夾,那麼就會呼叫自身,繼續往下尋找,依次類推,
直到遍歷到再也沒有資料夾為止,這也就是意味著遍歷出來了所有的檔案。
24. 判斷一個函式是否存在?
function_exists( string $function_name ) 如果存在,返回true, 不存在則返回 false。
25. func()和@func()之間有什麼區別?
第二個函式呼叫失敗不會報錯,第一個會報錯
26. include()
include和require出現錯誤後的錯誤級別不一樣;
require : 一個檔案存在錯誤時,執行就會中斷。並返回一個致命錯誤。
include:一個檔案存在錯誤,程式不會中斷執行。會彈出一個警告。
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可以終止迴圈。
(此文是網上整理的,如有侵權,請聯絡本人,必刪)