• 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;
    // 应用初始化 
    ThinkThink::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方法对特殊字符做了转义

     .

    .

  • 相关阅读:
    去掉移动端页面 input, textarea, button, a 标签获取焦点时显示的黑影
    屏蔽敏感词的正则表达式
    flex弹性布局详解
    解决微信小程序手机请求数据不返回的问题
    基于Express框架开发接口
    window平台下MongoDB安装和环境搭建
    搭建基于Express框架运行环境
    详解闭包(推荐)
    解决浏览器兼容ES6特性
    ES6之promise的使用
  • 原文地址:https://www.cnblogs.com/fightjianxian/p/8721664.html
Copyright © 2020-2023  润新知