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

下面依次介绍

【一】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. HFile存储格式

    Table of Contents HFile存储格式 Block块结构 HFile存储格式 HFile是參照谷歌的SSTable存储格式进行设计的.全部的数据记录都是通过它来完毕持久化,其内部主要採 ...

  2. MySQL-插入数据(INSERT)

    Insert语句可将一行或多行插入到表中. INSERT语法: INSERT INTO table(column1,column2...) VALUES (value1,value2,...); 首先 ...

  3. Error Handling Functions(微软对于出错的情况下提供的所有函数,比如SetThreadErrorMode,SetErrorMode,SetLastErrorEx,FatalAppExit,CaptureStackbackTrace)

    The following functions are used with error handling. Function Description Beep Generates simple ton ...

  4. 深度理解apache 重写模块rewrite_mod,重写不再犯错

    1.RewriteRule ^(com\/.*)$ index.php?do=$1 问:上面的规则匹配表达式 "^(.*)$" 匹配的内容是什么 答:匹配内容是URI站点目录:/d ...

  5. 呐喊-Skrik

    尼斯,1892年1月22日,我和两个朋友还在散步,太阳已快下山了,天空突然间变得血一样红,我似乎感受到了一种悲伤忧郁的气息,我止住了脚步,轻轻地倚在篱笆边,极度的疲倦已使我快要窒息了.火焰般的云彩像血 ...

  6. Proxy authentication confirmation prompt keeps popping up although the user/password is saved 火狐浏览器一直提示输入代理的账号和密码

    https://support.mozilla.org/zh-CN/questions/943488 signon.autologin.proxy;true network.proxy.share_p ...

  7. luogu 1966 火柴排队

    题目大意: 两列数,可以交换每列中相邻的两个数,算作一次交换 求最小的交换次数使两列数相对应的数之差的平方之和最小 思路: 首先可以明确当两列数的排序位置相对应时,为最佳答案 然后我们按照一中排序后在 ...

  8. Maximum Gap 典型线性排序

    https://leetcode.com/problems/maximum-gap/ Given an unsorted array, find the maximum difference betw ...

  9. centos7的systemd

    系统启动流程 POST --> Boot Sequence --> Bootloader --> kernel+initramfs(initrd) --> rootfs --& ...

  10. MARK ZUCKERBERG, A letter to our daughter(转)

    A letter to our daughter   MARK ZUCKERBERG·WEDNESDAY, DECEMBER 2, 2015   Dear Max, Your mother and I ...