1. 程式人生 > >PHP基礎面試基礎-3

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()

和require()函式的用法和區別是什麼?include_once()和require_once()呢?(可擴充套件)(重點)

 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可以終止迴圈。

(此文是網上整理的,如有侵權,請聯絡本人,必刪)