php总结回顾
做人不能一直埋着头往前跑,还要偶尔停下来看下来时的路。所以今天就来回顾下之前的吧
下面依次介绍
【一】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总结回顾的更多相关文章
- [C#] C# 基础回顾 - 匿名方法
C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...
- SQL Server-表表达式基础回顾(二十四)
前言 从这一节开始我们开始进入表表达式章节的学习,Microsoft SQL Server支持4种类型的表表达式:派生表.公用表表达式(CTE).视图.内嵌表值函数(TVF).简短的内容,深入的理解, ...
- [C#] C# 知识回顾 - 你真的懂异常(Exception)吗?
你真的懂异常(Exception)吗? 目录 异常介绍 异常的特点 怎样使用异常 处理异常的 try-catch-finally 捕获异常的 Catch 块 释放资源的 Finally 块 一.异常介 ...
- [C#] C# 知识回顾 - 学会处理异常
学会处理异常 你可以使用 try 块来对你觉得可能会出现异常的代码进行分区. 其中,与之关联的 catch 块可用于处理任何异常情况. 一个包含代码的 finally 块,无论 try 块中是否在运行 ...
- [C#] C# 知识回顾 - 学会使用异常
学会使用异常 在 C# 中,程序中在运行时出现的错误,会不断在程序中进行传播,这种机制称为“异常”. 异常通常由错误的代码引发,并由能够更正错误的代码进行 catch. 异常可由 .NET 的 CLR ...
- [C#] C# 知识回顾 - 异常介绍
异常介绍 我们平时在写程序时,无意中(或技术不够),而导致程序运行时出现意外(或异常),对于这个问题, C# 有专门的异常处理程序. 异常处理所涉及到的关键字有 try.catch 和 finally ...
- [.NET] C# 知识回顾 - Event 事件
C# 知识回顾 - Event 事件 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6060297.html 序 昨天,通过<C# 知识回顾 - ...
- [.NET] C# 知识回顾 - 事件入门
C# 知识回顾 - 事件入门 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6057301.html 序 之前通过<C# 知识回顾 - 委托 de ...
- [.NET] C# 知识回顾 - 委托 delegate (续)
C# 知识回顾 - 委托 delegate (续) [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6046171.html 序 上篇<C# 知识回 ...
- [C#] C# 知识回顾 - 委托 delegate
C# 知识回顾 - 委托 delegate [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6031892.html 目录 What's 委托 委托的属性 ...
随机推荐
- HFile存储格式
Table of Contents HFile存储格式 Block块结构 HFile存储格式 HFile是參照谷歌的SSTable存储格式进行设计的.全部的数据记录都是通过它来完毕持久化,其内部主要採 ...
- MySQL-插入数据(INSERT)
Insert语句可将一行或多行插入到表中. INSERT语法: INSERT INTO table(column1,column2...) VALUES (value1,value2,...); 首先 ...
- Error Handling Functions(微软对于出错的情况下提供的所有函数,比如SetThreadErrorMode,SetErrorMode,SetLastErrorEx,FatalAppExit,CaptureStackbackTrace)
The following functions are used with error handling. Function Description Beep Generates simple ton ...
- 深度理解apache 重写模块rewrite_mod,重写不再犯错
1.RewriteRule ^(com\/.*)$ index.php?do=$1 问:上面的规则匹配表达式 "^(.*)$" 匹配的内容是什么 答:匹配内容是URI站点目录:/d ...
- 呐喊-Skrik
尼斯,1892年1月22日,我和两个朋友还在散步,太阳已快下山了,天空突然间变得血一样红,我似乎感受到了一种悲伤忧郁的气息,我止住了脚步,轻轻地倚在篱笆边,极度的疲倦已使我快要窒息了.火焰般的云彩像血 ...
- 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 ...
- luogu 1966 火柴排队
题目大意: 两列数,可以交换每列中相邻的两个数,算作一次交换 求最小的交换次数使两列数相对应的数之差的平方之和最小 思路: 首先可以明确当两列数的排序位置相对应时,为最佳答案 然后我们按照一中排序后在 ...
- Maximum Gap 典型线性排序
https://leetcode.com/problems/maximum-gap/ Given an unsorted array, find the maximum difference betw ...
- centos7的systemd
系统启动流程 POST --> Boot Sequence --> Bootloader --> kernel+initramfs(initrd) --> rootfs --& ...
- MARK ZUCKERBERG, A letter to our daughter(转)
A letter to our daughter MARK ZUCKERBERG·WEDNESDAY, DECEMBER 2, 2015 Dear Max, Your mother and I ...