PHP常見面試題大全

php碼農發表於2016-03-04

php中傳值與傳引用的區別?什麼時候傳值什麼時候傳引用?

  • 按值傳遞:函式內對值的任何改變在函式外部都會被忽略
  • 引用傳遞:函式內對值的任何改變在函式外部也能反映出這些修改
  • 應用場景:按值傳遞時,php必須複製值,而按引用傳遞則不需要複製值,故引用傳遞一般用於大字串或物件。

說幾個你知道的設計模式?

  • 單例模式: 保證一個類僅有一個例項,並提供一個訪問他的全域性訪問點例如框架中的資料庫連線
  • 簡單工廠模式: 它具有建立物件的某些方法,可以使用工廠類建立物件,而不直接使用 new。例如初始化資料庫的時候會用到,比如MySQL,MSSQL
  • 策略模式: 針對一組演算法,將每一個演算法封裝到具有共同介面的獨立的類中,例如進入個人主頁時,根據瀏覽者的不同,給予不同的顯示與操作
  • 註冊模式: 提供了在程式中有條理的存放並管理一組全域性物件 (object),例如ZF框架中的Zend_Registry::set
  • 介面卡模式: 將不同介面適配成統一的API介面,例如資料操作有mysql、mysqli、pdo等,可利用介面卡模式統一介面
  • 觀察者模式: 一個物件通過新增一個方法使本身變得可觀察。當可觀察的物件更改時,它會將訊息傳送到已註冊的觀察者。例如實現實現訊息推送
  • 裝飾器模式: 不修改原類程式碼和繼承的情況下動態擴充套件類的功能,例如框架的每個Controller檔案會提供before和after方法
  • 迭代器模式: 提供一個方法順序訪問一個聚合物件中各個元素,在PHP中將繼承 Iterator 類
  • 原型模式: 實現了一個原型介面,該介面用於建立當前物件的克隆。當直接建立物件的代價比較大時,則採用這種模式。例如,一個物件需要在一個高代價的資料庫操作之後被建立。

echo,print(),print_r(),printf(),sprintf(),var_dump()有什麼區別?

  • echo :是語句不是函式,沒有返回值,可輸出多個變數值,不需要圓括號。不能輸出陣列和物件,只能列印簡單型別(如int,string)
  • print :是語句不是函式,有返回值 1 ,只能輸出一個變數,不需要圓括號。不能輸出陣列和物件,只能列印簡單型別(如int,string)。
  • print_r :是函式,可以列印複合型別,例如:stirng、int、float、array、object等,輸出array時會用結構表示,而且可以通過print_r($str,true)來使print_r不輸出而返回print_r處理後的值
  • printf :是函式,把文字格式化以後輸出(參看C語言)
  • sprintf :是函式,跟printf相似,但不列印,而是返回格式化後的文字,其他的與printf一樣。
  • var_dump :函式,輸出變數的內容、型別或字串的內容、型別、長度。常用來除錯。

MySQL資料庫儲存引擎有哪些?

  • MyISAM:成熟、穩定、易於管理,快速讀取。一些功能不支援(事務等),表級鎖。
  • InnoDB:支援事務、外來鍵等特性、資料行鎖定。空間佔用大,不支援全文索引等。

POST和GET有什麼區別?

  • GET是從伺服器上獲取資料,POST是向伺服器傳送資料
  • GET是通過傳送HTTP協議通過URl引數傳遞進行接收,而POST是實體資料,通過表單提交
  • GET傳送的資料量較小,不能大於2KB。POST傳送的資料量較大,一般被預設為不受限制。
  • GET安全性非常低,POST安全性較高

給任意一段URL,取出該URL中包含的副檔名。如“http://www.sina.com/test.php?somevar”,返回.php或php。


相關文章