做人不能一直埋着头往前跑,还要偶尔停下来看下来时的路。所以今天就来回顾下之前的吧

下面依次介绍

【一】TP加载流程

①应用入口文件index.php→②tp公共入口文件ThinkPHP.php→③核心Think类→④函数库→⑤配置文件→⑥控制器→⑦模型→⑧模板

步骤详解:

①应用入口文件index.php,最后require引用tp核心文件即ThinkPHP的公共入口文件(之所以用require,不用include的原因很明了)

require './ThinkPHP/ThinkPHP.php';  // 引入ThinkPHP入口文件

作用:检测环境、管理应用级别的配置,如模式选择(开发/生成)、定义应用目录、工作目录、工作路径、附件上传跟目录等

②tp公共入口文件ThinkPHP,最后require引用加载tp核心Think类,并初始化应用

// 加载核心Think类
require CORE_PATH.'Think'.EXT;
// 应用初始化
Think\Think::start();

作用:定义版本信息、类文件后缀(.class.php)、URL模式、系统常量、

关于系统常量,参考tp系统常量。URL模式参考ThinkPHP的四种URL模式 URL_MODEL

③加载核心class类,因为在tp公共入口文件ThinkPHP里,最后的初始化应用前加载了核心Think类

分类说下核心Think类:①Think.class.php是tp引导类;②Storage.class.php是分布式文件存储类;③File.class.php是本地文件写入存储类

【二】数据查询----------→辅助方法和连贯操作

系统支持的连贯操作方法有:

连贯操作 作用 支持的参数类型
where* 用于查询或者更新条件的定义 字符串、数组和对象
table 用于定义要操作的数据表名称 字符串和数组
alias 用于给当前数据表定义别名 字符串
data 用于新增或者更新数据之前的数据对象赋值 数组和对象
field 用于定义要查询的字段(支持字段排除) 字符串和数组
order 用于对结果排序 字符串和数组
limit 用于限制查询结果数量 字符串和数字
page 用于查询分页(内部会转换成limit) 字符串和数字
group 用于对查询的group支持 字符串
having 用于对查询的having支持 字符串
join* 用于对查询的join支持 字符串和数组
union* 用于对查询的union支持 字符串、数组和对象
distinct 用于查询的distinct支持 布尔值
lock 用于数据库的锁机制 布尔值
cache 用于查询缓存 支持多个参数
relation 用于关联查询(需要关联模型支持) 字符串
result 用于返回数据转换 字符串
validate 用于数据自动验证 数组
auto 用于数据自动完成 数组
filter 用于数据过滤 字符串
scope* 用于命名范围 字符串、数组
bind* 用于数据绑定操作 数组或多个参数
token 用于令牌验证 布尔值
comment 用于SQL注释 字符串
index 用于数据集的强制索引(3.2.3新增) 字符串
strict 用于数据入库的严格检测(3.2.3新增) 布尔值

【三】联表查询

(1)table方法:通过where关联数据表,在TP中对应SQL原型

原生PHP方法:通过where语法进行表1和表2的关联操作,即让两个表关联

select  表1.字段,表2.字段 [as 关联查询出的字段名] from  表1[as 别名1],表2[as 别名2]  where  表1.字段=表2.字段//注意:一般查询主表1的所有---表1.*,表2.字段

这里举个例子,关联职员表主表sp_user和部门表从表sp_dept,关联出的字段设置为newPid

$model = M('user');
$sql = 'select user.*,dept.pid as newPid from sp_user as user ,sp_dept as dept where user.dept_id=dept.pid';
$result = $model->query($sql);
dump($result);die;

转换成table方法

public function study(){
$model = M('user');//直接实例化父类即可,不需要关联数据表!!!
// $sql = 'select user.*,dept.pid as newPid from sp_user as user ,sp_dept as dept where user.dept_id=dept.pid';
$result = $model->field('user.*,dept.pid as newPid')
->table('sp_user as user ,sp_dept as dept')
->where('user.dept_id=dept.pid')
->select();
dump($result);die;
$this->display();
}

结果:

(2)join方法:通过on关联数据表

①原生SQL方法:

select t1.*,t2.name as deptname from sp_dept as t1 left join sp_dept as t2 on t1.pid=t2.id;

②ThinkPHP中执行join语法:

通过on进行关联,join方法也是连贯操作的辅助方法之一,且只有一个参数

如果需要给当前模型关联的表起别名,可以使用alias方法:

$model->alias('别名');//辅助方法之一
$model = M('user');//直接实例化父类即可,不需要关联数据表!!!
// $sql = 'select user.*,dept.pid as newid from sp_user as user left join sp_dept as dept on user.dept_id=dept.pid';
$result = $model->field('user.*,dept.pid as newid')
->alias('user')
->join('left join sp_dept as dept on user.dept_id=dept.pid')
->select();
dump($result);die;

对比:

table语句:select user.*,dept.pid as newPid from sp_user as user ,sp_dept as dept where user.dept_id=dept.pid
join语句: select user.*,dept.pid as newid from sp_user as user left join sp_dept as dept on user.dept_id=dept.pid;

【四】$_POST和I方法对比

(1)I方法的所有获取变量都会进行htmlspecialchars过滤,也可以自己设置过滤函数。比$_POST方便
(2)I方法的所有获取变量都会进行htmlspecialchars过滤,也可以自己设置过滤函数。比$_POST方便
(3)I方法对特殊字符做了转义

.

.

php总结回顾的更多相关文章

  1. [C#] C# 基础回顾 - 匿名方法

    C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...

  2. SQL Server-表表达式基础回顾(二十四)

    前言 从这一节开始我们开始进入表表达式章节的学习,Microsoft SQL Server支持4种类型的表表达式:派生表.公用表表达式(CTE).视图.内嵌表值函数(TVF).简短的内容,深入的理解, ...

  3. [C#] C# 知识回顾 - 你真的懂异常(Exception)吗?

    你真的懂异常(Exception)吗? 目录 异常介绍 异常的特点 怎样使用异常 处理异常的 try-catch-finally 捕获异常的 Catch 块 释放资源的 Finally 块 一.异常介 ...

  4. [C#] C# 知识回顾 - 学会处理异常

    学会处理异常 你可以使用 try 块来对你觉得可能会出现异常的代码进行分区. 其中,与之关联的 catch 块可用于处理任何异常情况. 一个包含代码的 finally 块,无论 try 块中是否在运行 ...

  5. [C#] C# 知识回顾 - 学会使用异常

    学会使用异常 在 C# 中,程序中在运行时出现的错误,会不断在程序中进行传播,这种机制称为“异常”. 异常通常由错误的代码引发,并由能够更正错误的代码进行 catch. 异常可由 .NET 的 CLR ...

  6. [C#] C# 知识回顾 - 异常介绍

    异常介绍 我们平时在写程序时,无意中(或技术不够),而导致程序运行时出现意外(或异常),对于这个问题, C# 有专门的异常处理程序. 异常处理所涉及到的关键字有 try.catch 和 finally ...

  7. [.NET] C# 知识回顾 - Event 事件

    C# 知识回顾 - Event 事件 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6060297.html 序 昨天,通过<C# 知识回顾 - ...

  8. [.NET] C# 知识回顾 - 事件入门

    C# 知识回顾 - 事件入门 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6057301.html 序 之前通过<C# 知识回顾 - 委托 de ...

  9. [.NET] C# 知识回顾 - 委托 delegate (续)

    C# 知识回顾 - 委托 delegate (续) [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6046171.html 序 上篇<C# 知识回 ...

  10. [C#] C# 知识回顾 - 委托 delegate

    C# 知识回顾 - 委托 delegate [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6031892.html 目录 What's 委托 委托的属性 ...

随机推荐

  1. Python开发【第*篇】【Xpath与lxml类库】

    什么是XML XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 的标签需要 ...

  2. Vim i和a差别

    i是当前位置插入 a是当前文字的后面插入

  3. YII2 的授权(Authorization)

    说明:翻译本不是我应该做的,由于我的英语水平实在太差.但由于对YII的兴趣.所以也做一点.同一时候也能显示出我的胆量还是有的...希望不误导您. 由于这里MD语法的内容显示不全.您能够去这里看看. A ...

  4. 人脸和性别识别(基于OpenCV)

    描写叙述 人脸识别包含四个步骤 人脸检測:定位人脸区域,仅仅关心是不是脸: 人脸预处理:对人脸检測出来的图片进行调整优化. 收集和学习人脸:收集要识别的人的预处理过的人脸,然后通过一些算法去学习怎样识 ...

  5. 操作系统学习笔记:CPU调度

    CPU调度的目的在于提高CPU利用率,不让CPU闲着.CPU是宝贵的资源,如果有一个进程,本来在CPU中运行,忽然因为要使用IO资源,于是转而请求IO,这边CPU挂起,造成就绪队列中的其他进程等待,这 ...

  6. 一张图轻松记住PHP的*类*以及private和protected的区别

    上图概要的说了下php类的特性,类的方法同属性类似. 图中B类继承自A类,B是A的子类,$x和$y都是B的实例化对象. 1. 原型引用:[A::    . B::   ],仅限public stati ...

  7. SqlServer数据库性能优化详解

    数据库性能优化详解 性能调节的目的是通过将网络流通.磁盘 I/O 和 CPU 时间减到最小,使每个查询的响应时间最短并最大限度地提高整个数据库服务器的吞吐量.为达到此目的,需要了解应用程序的需求和数据 ...

  8. P4196 [CQOI2006]凸多边形

    传送门 半平面交的讲解 然而这个代码真的是非常的迷--并不怎么看得懂-- //minamoto #include<bits/stdc++.h> #define fp(i,a,b) for( ...

  9. [Swift]Array(数组)扩展

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  10. SQL Server触发器创建、删除、修改、查看示例步骤

    一﹕ 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约`束. 二﹕ SQL Server为每个触发 ...