1.如何理解TP中的單一入口檔案?
答:ThinkPHP採用單一入口模式進行專案部署和存取,無論完成什麼功能,一個專案都有一個統一(但不一定是唯一)的入口。應該說,所有專案都是從入口檔案開始的,並且所有的專案的入口檔案是類似的,入口檔案中主要包括:
定義框架路徑、專案路徑和專案名稱(可選)
定義偵錯模式和執行模式的相關常數(可選)
載入框架入口檔案(必須)
2.ThinkPHP中的MVC分層是什麼?(理解)
MVC 是一種將應用程式的邏輯層和表現層進行分離的方法。ThinkPHP 也是基於MVC設計模式的。MVC只是一個抽象的概念,並沒有特別明確的規定,ThinkPHP中的MVC分層大致體現在:
模型(M):模型的定義由Model類來完成。
相關專題推薦:
控制器(C):應用控制器(核心控制器App類)和Action控制器都承擔了控制器的角色,Action控制器完成業務過程控制,而應用控制器負責排程控制。
檢視(V):由View類和模板檔案組成,模板做到了100%分離,可以獨立預覽和製作。
但實際上,ThinkPHP並不依賴M或者V ,也就是說沒有模型或者檢視也一樣可以工作。甚至也不依賴C,這是因爲ThinkPHP在Action之上還有一個總控制器,即App控制器,負責應用的總排程。在沒有C的情況下,必然存在檢視V,否則就不再是一個完整的應用。
總而言之,ThinkPHP的MVC模式只是提供了一種敏捷開發的手段,而不是拘泥於MVC本身。
3.如何理解 ThinkPHP 3.0 架構(核心 + 行爲 + 驅動)中的行爲?
答:核心 + 行爲 + 驅動
TP官方簡稱爲:CBD
核心(Core):就是框架的核心程式碼,不可缺少的東西,TP本身是基於MVC思想開發的框架。
行爲(Behavior) :行爲在新版ThinkPHP的架構裏面起着舉足輕重的作用,在系統核心之上,設定了很多標籤擴充套件位,而每個標籤位置可以依次執行各自的獨立行爲。行爲擴充套件就因此而誕生了,而且很多系統功能也是通過內建的行爲擴充套件完成的,所有行爲擴充套件都是可替換和增加的,由此形成了底層框架可組裝的基礎。
驅動( Driver ):數據庫驅動、快取驅動、標籤庫驅動和模板引擎驅動,以及外接的類擴充套件。
框架,即framework。其實就是某種應用的半成品,就是一組元件,供你選用完成你自己的系統。簡單說就是使用別人搭好的舞臺,你來做表演。而且,框架一般是成熟的,不斷升級的軟體。
4. ThinkPHP如何防止SQL隱碼攻擊?(理解)
(1)查詢條件儘量使用陣列方式,這是更爲安全的方式;
(2)如果不得已必須使用字串查詢條件,使用預處理機制 機製;
(3)開啓數據欄位型別驗證,可以對數值數據型別做強制轉換;(3.1版本開始已經強制進行欄位型別驗證了)
(4)使用自動驗證和自動完成機制 機製進行鍼對應用的自定義過濾;
(5)使用欄位型別檢查、自動驗證和自動完成機制 機製等避免惡意數據的輸入。
5. 如何開啓偵錯模式?偵錯模式有什麼好處?
開啓偵錯模式很簡單,只需要在入口檔案中增加一行常數定義程式碼:
<?php //開啓偵錯模式 define('APP_DEBUG', true); //載入框架入口檔案 require './ThinkPHP/ThinkPHP.php';
在完成開發階段部署到生產環境後,只需要刪除偵錯模式定義程式碼即可切換到部署模式。開啓偵錯模式後,系統會首先載入系統預設的偵錯組態檔,然後載入專案的偵錯組態檔,偵錯模式的優勢在於:
開啓日誌記錄,任何錯誤資訊和偵錯資訊都會詳細記錄,便於偵錯;
關閉模板快取,模板修改可以即時生效;
記錄SQL日誌,方便分析SQL;
關閉欄位快取,數據表欄位修改不受快取影響;
嚴格檢查檔案大小寫(即使是Windows平臺),幫助你提前發現Linux部署問題;
可以方便用於開發過程的不同階段,包括開發、測試和演示等任何需要的情況,不同的應用模式可以設定獨立的專案組態檔。
6. TP中支援哪些設定模式?優先順序?
ThinkPHP在專案設定上面創造了自己獨有的分層設定模式,其設定層次體現在:
慣例設定->專案設定->偵錯設定->分組設定->擴充套件設定->動態設定
以上是組態檔的載入順序,因爲後面的設定會覆蓋之前的同名設定(在沒有生效的前提下),所以優先順序從右到左。
7. TP中的URL模式有哪幾種?預設是哪種?
ThinkPHP支援四種URL模式,可以通過設定URL_MODEL參數來定義,包括普通模式、PATHINFO、REWRITE和相容模式。
預設模式爲:PATHINFO模式,設定URL_MODEL 爲1
8. TP中系統變數有哪些?如何獲取系統變數?
獲取系統變數的方法:
只需要在Action中呼叫下面 下麪方法:
$this->方法名("變數名",["過濾方法"],["預設值"])
9、ThinkPHP框架中D函數與M函數的區別是什麼?
答:M方法範例化模型無需使用者爲每個數據表定義模型類,D方法可以自動檢測模型類,如果存在自定義的模型類,則範例化自定義模型類,如果不存在,則會自動呼叫M方法去範例化Model基礎類別。同時對於已範例化過的模型,不會重複去範例化(單例模式)。
相關學習推薦:
以上就是Thinkphp面試問題及答案的詳細內容,更多請關注php中文網其它相關文章!