php的一些面試題總結(5)

weixin_34208283發表於2017-06-07

1.給一個變數賦值為123,但是輸出該變數的值總是為其他數字,請問這是什麼問題?

PHP 直譯器會把以開始的數字當做是八進位制的,所以它的值會變成八進位制的。

2.請說明在php.ini中safe_mode開啟之後對於PHP系統函式的影響

啟用了PHP的安全模式後:

有一些函式會被遮蔽,如dl() 、shell_exec()等。

一些函式在執行時會檢查被操作的檔案或者目錄與正在執行的指令碼是否有相同的UID, 在safe_mode_gid設定的情況下會放寬到檢查GID

safe_mode_include_dir設定的目錄及其子目錄(目錄必須在 include_path 中或者用完整路徑來包含)包含檔案時越過 UID/GID 檢查。

指定的限制實際上是一個字首,而非一個目錄名。這也就是說“safe_mode_include_dir = /dir/incl”將允許訪問“/dir/include”和“/dir/incls”,如果它們存在的話。如果希望將訪問控制在一個指定的目錄,那麼請在結尾加上一個斜線,例如:“safe_mode_include_dir = /dir/incl/”。

有些函式只能在safe_mode_exec_dir設定的目錄下執行操作如exec()、system()、passthru()、popen()

有些函式不在起作用如set_time_limit()、max_execution_time

3.什麼是靜態變數?

如果一個函式內定義的變數前使用關鍵字static來宣告,那麼該變數就是靜態變數。 一般函式內的變數在函式呼叫結束後,其儲存的資料將被清除,所佔的記憶體空間也被釋放。而使用靜態變數時, 該變數會在函式第一次被呼叫時被初始化,初始化後該變數也不會被清除,當再次呼叫該函式時,這個靜態變數 不再被初始化,而能儲存上次函式執行完後的值。可以說靜態變數在所有對該函式的呼叫之間共享。

4.php中函式傳遞引數的方式有哪些?兩者有什麼區別?

按值傳遞和按地址傳遞(或按引用傳遞) (1)按值傳遞:  待傳遞的變數,與傳遞給函式之後的變數是儲存在不同的空間中。所以函式體內對 該變數值做的修改,不影響原本的變數值。   (2)按地址傳遞: 使用 & 符號,表明該引數是以地址的方式傳遞值。並不會將主程式中的指定數值或目標變數傳遞給函式,而是把該數值或變數的記憶體儲存區塊地址匯入函式之中,所以函式體內的該變數和主程式中的該變數在記憶體 中是同一個。函式體做的修改,直接影響到函式體外部的該變數的值。

5.什麼是遞迴函式?如何進行遞迴呼叫?

遞迴函式其實就是呼叫自身的函式,但是必須滿足以下兩個條件: 1)在每一次呼叫自身時,必須是更接近於最終結果; 2)必須有一個確定的遞迴終止條件,不會造成死迴圈。

6.陣列合並函式array_merge()和陣列加法運算$arr + $arr2 的區別是什麼?

array_merge()->使用array_merge(),如果是關聯陣列合並,如果陣列的鍵名相同,那麼後面的值將覆蓋前者;如果是數字索引陣列合並,則不覆蓋,而是 後者附加到前者後面。 "+"->使用陣列加法運算,與array_merge()不同,加法運算不管是關聯陣列還是數字索引陣列,都是將相同鍵名的的值捨棄, 也就是隻保留首次出現該鍵名的元素,後來的具有相同鍵名的元素都不會被加進來。

7.$this,self, parent分別代表什麼?哪些場合下使用

$this代表的是當前物件 self代表的是當前的類 parent代表的是當前類的父類 使用場合: $this只能使用在當前類中,通過$this->可以呼叫當前類中的屬性和方法; self只能在當前類中使用,通過作用域操作符::訪問當前類中的類常量、當前類中的靜態屬性、當前類中的方法; parent只能使用在有父類的當前類中,通過作用域操作符::訪問父類中的類常量、父類中的靜態屬性、父類中的方法。

相關文章