1.如何理解TP中的單一入口文件?php
答:ThinkPHP採用單一入口模式進行項目部署和訪問,不管完成什麼功能,一個項目都有一個統一(但不必定是惟一)的入口。應該說,全部項目都是從入口文件開始的,而且全部的項目的入口文件是相似的,入口文件中主要包括:html
定義框架路徑、項目路徑和項目名稱(可選)面試
定義調試模式和運行模式的相關常量(可選)數據庫
載入框架入口文件(必須)設計模式
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->方法名("變量名",["過濾方法"],["默認值"])
1三、ThinkPHP框架中D函數與M函數的區別是什麼?
答:M方法實例化模型無需用戶爲每一個數據表定義模型類,D方法能夠自動檢測模型類,若是存在自定義的模型類,則實例化自定義模型類,若是不存在,則會自動調用M方法去實例化Model基類。同時對於已實例化過的模型,不會重複去實例化(單例模式)。