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基类。同时对于已实例化过的模型,不会重复去实例化(单例模式)。