ThinkPHP-PHP开发中的主流框架

PHP 中的框架是什么? 框架就是通过提供一个开发 Web 程序的基本架构,PHP 开发框架把 PHPWeb 程序开发摆到了流水线上。换句话说,PHP 开发框架有助于促进快速软件开发(RAD),这节约了开发时间,有助于创建更为稳定的程序,并减少开发者的重复编写代码的劳动。 框架专门用于为这些常用元素(数据库交互、表示层、应用程序逻辑)提供结构,以便可以花费更少的时间来编写数据库接口代码或者表示层接口,而花费更多的时间来编写应用程序本身。以这种方式分解应用程序,这种架构被称为模型-视图-控制器(Model-View-Controller,MVC)。模型(Model)指数据,视图(View)指表示层,而控制器(Controller)指应用程序逻辑或业务逻辑。

一、PHP 中常见的框架之ThinkPHP

TP 框架(ThinkPHP):

ThinkPHP 框架是 PHP 最常见的框架之一,也是目前市面上的主流框架。ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级 PHP 开发框架 ,是为了敏捷 WEB 应用开发和简化企业应用开发而诞生的。ThinkPHP 从诞生以来一直秉承简洁 实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在易用性、扩展性和性能方 面不断优化和改进,已经成长为国内最领先和最具影响力的 WEB 应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

目前市面上的 TP 框架有两大分支:TP3.X 和 TP5

① ThinkPHP 基于 MVC 的 PHP 框架                 M – Model       模型                   工作:负责数据的操作                 V – View          视图(模板)       工作:负责前台页面显示                 C – Controller  控制器(模块)    工作:描述功能,逻辑上的业务处理

MVC 示意图

② ThinkPHP 核心文件介绍       ├─ThinkPHP.php     框架入口文件       ├─Common 框架公共文件       ├─Conf 框架配置文件       ├─Extend 框架扩展目录       ├─Lang 核心语言包目录       ├─Lib 核心类库目录       │  ├─Behavior 核心行为类库       │  ├─Core 核心基类库       │  ├─Driver 内置驱动       │  │  ├─Cache 内置缓存驱动       │  │  ├─Db 内置数据库驱动       │  │  ├─TagLib 内置标签驱动       │  │  └─Template 内置模板引擎驱动       │  └─Template 内置模板引擎       └─Tpl 系统模板目录

③ url 的 4 种访问方式 1.PATHINFO 模式:http://域名/项目名/入口文件/模块名/方法名/键 1/值 1/键 2/值 2

2.普通模式:http://域名/项目名/入口文件?m=模块名&a=方法名&键 1=值 1&键 2=值 2

3.REWRITE 模式:http://域名/项目名/模块名/方法名/键 1/值 1/键 2/值 2

4.兼容模式:http://域名/项目名/入口文件?s=模块名/方法名/键 1/值 1/键 2/值 2

④ TP 中的几种输出方式

ThinkPHP 中的输出: a、通过 echo 等 PHP 原生的输出方式在页面中输出 b、通过 display 方法输出(想分配变量可以使用assign 方法)

                c、修改左右定界符 要修改配置文件中的配置项:‘TMPL_L_DELIM’=>'<{‘, //修改左定界符 ‘TMPL_R_DELIM’=>’}>’, //修改右定界符

⑤ TP 中最简单实用模型的方式                 M() 等效为 new Model();                 $m=M(‘User’);                 $arr=$m->select();

⑥ 输出模板内容

a、display 方法

        1.display 中没有参数 $this->display(); 2.可以带参数 $this->display(本模块文件夹下的其他模板文件); $this->display(‘index2′);

$this->display(其他文件夹下的模板文件); $this->display(‘Public:error’);//注意,仅仅需要在 Tpl 下有 Public 文件夹以及其中的 error.html 即可,不需要一定有 Public 模块

b、fetch 方法

获得模板文件中的内容,以字符串形式返回 $content=$this->fetch(‘Public:error’);

c、show 方法

不需要模板文件,可以直接输出模板内容 $content=$this->fetch(‘Public:error’); dump($content); $content=str_replace(‘h1’,’i’,$content); $this->show($content);

⑦ 重定向

$this->redirect(‘category’, array(‘cate_id’ => 2), 5, ‘页面跳转中…’);

参数说明:

第一个参数:要跳转的链接地址

第二个参数:传递的参数,要求格式为数组

第三个参数:等待时间

第四个参数:输出信息

⑧ 字段映射

使用 create 方法完成数据对象的创建,则表单里面文本域名称必须要和数据表的字段名称一致,如果一致,就暴露了数据表里面表结构,带来安安全隐患。就可以使用一个字段映射的功能,设置为和表里面的字段不一致。

该功能需要在自定义模型里面定义

⑨ 模型中连贯操作

语法:$model->方法 1()->方法 2()->方法 n()->select();

⑩ 自动验证

主要是验证表单提交的数据的合法性,验证表单数据的合法性,有两种方式,一种是通过前端 js 代码来验证,一种是数据入库之前的 php 代码验证。在实际开发中,两种方式都要有,前端 js 验证。前端 js 代码用户是可以禁用的,因此要进行 php 代码验证,达到双重验证。

字段验证的方式是集成到模型里面的 create 方法里面,注意在使用 create 方法之前需要将配置文件中的 extension=php_mbstring.dll 打开

实用项:

⑴ 代码流程追踪:在配置文件里面‘SHOW_PAGE_TRACE’=TRUE

⑵ TP 中的事务:

$User->startTrans():开启事务处理

$User->commit()   :如成功,则提交

$User->rollback() :如失败,则回滚

⑶ 模型里面的 trueTableName 属性:

建立一个模型,在默认操作时,是操作的前缀+模型名称的表,可以通过 trueTableName 属性设置变成操作其他的表

(4) TP 中常用的字母函数:

S 函数:缓存管理方法,3.1.2 版本后因 cache 方法并入原 S 方法,所以 cache 方法不再建议使用,用 S 方法即可;

U 函数:U 方法用于完成对 URL 地址的组装,特点在于可以自动根据当前的 URL 模式和设置生成对应的 URL 地址:U(‘地址’,’参数’,’伪静态’,’是否跳转’,’显示域名’);

D 函数:D 方法是用的比较多的,用于实例化自定义模型类,是 ThinkPHP 框架对 Model 类实例化的一种封装,并实现了单例模式,支持跨项目和分组调用,调用格式如下:D(‘[项目://][分组/]模型’,’模型层名称’),方法的返回值是实例化的模型对象。

M 函数:M 方法用于实例化一个基础模型类。M 方法的调用格式:M(‘[基础模型名:]模型名’,’数据表前缀’,’数据库连接信息’)

注意:M 和 D 的区别:

1、M 不需要自定义模型类,减少 IO 加载,性能较好;

          2、实例化后只能调用基础模型类(默认是 Model 类)中的方法;

          3、可以在实例化的时候指定表前缀、数据库和数据库的连接信息;

A 函数:A 方法用于在内部实例化控制器,调用格式:A(‘[项目://][分组/]模块’,’控制器层名称’)

R 函数:R 方法用于调用某个控制器的操作方法,是 A 方法的进一步增强和补充,R 方法的调用格式:R(‘[项目://][分组/]模块/操作’,’参数’,’控制器层名称’)

C 函数:C 方法是 ThinkPHP 用于设置、获取,以及保存配置参数的方法,使用频率较高

N 函数:N 方法属于计数器方法,被用于核心的查询、缓存统计的计数和统计。但是其实可以用于应用的其他计数用途,用法比较简单,调用格式:N(‘计数位置'[,’步进值’])

L 函数:L 方法用于启用多语言的情况下,设置和获取当前的语言定义,调用格式:L(‘语言变量'[,’语言值’])

session 函数:Session 方法用于 Session 设置、获取、删除和管理操作

cookie 函数 :cookie 函数也是一个多元化操作函数,完成 cookie 的设置、获取和删除操作。

TP 特性总结:

1.多表查询非常方便,在 model 里几句代码就可以完成完成多表的关联操作。

2.融合了 smarty 框架技术,使前台和后台独立分开

3.支持多种缓存技术,memcache 技术支持非常好

4.命名规范,模型,视图和控制器严格遵循命名规则,通过命名一一对应

5.类库扩展、驱动扩展、应用扩展、模型扩展、控制器扩展、标签库扩展、模板引擎扩展、Widget 扩展、行为扩展和模式扩展

6.支持多种 URL 模式

7.自动完成表单数据的验证过滤,生成安全的数据对象

8.内置 AJAX 数据返回方法,支持 JSON、XML 和 EVAL 格式返回客户端

9.内建丰富的查询机制,包括组合查询、复合查询、区间查询、统计查询、定位查询、动态查询和原生查询,让你的数据查询简洁高效

10.系统支持多数据库连接和动态切换机制,支持分布式数据库 沈唁志|一个PHPer的成长之路! 原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明:转载自:ThinkPHP-PHP开发中的主流框架

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏游戏杂谈

坑爹的firefox

在公司,有同事向我反映,他用FF登录不了网站,我用FF看了一下,遇到这个诡异的问题:

1342
来自专栏架构师之路

线上服务内存OOM问题定位三板斧

相信大家都有感触,线上服务内存OOM的问题,是最难定位的问题,不过归根结底,最常见的原因: 本身资源不够 申请的太多 资源耗尽 58到家架构部,运维部,58速运...

3456
来自专栏Python

IO模型

一 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步:   所谓同...

2105
来自专栏极客猴

pustil - 获取系统信息库

运维工程师经常使用 Python 编写脚本程序来做监控系统运行的状态。如果自己手动使用 Python 的标准库执行系统命令来获取信息,会显得非常麻烦。既要兼容不...

1471
来自专栏1001482的专栏

大数据实时处理利器 storm 的 ui 解剖

众所周知,storm已经是业界主流的流时处理框架,Storm被广泛应用于实时分析,在线机器学习,持续计算、分布式远程调用等领域。

1.7K1
来自专栏数据库

“多态”的数据库连接池实现

需求 数据库连接的池化管理 支持不同数据源链接池化处理 问题 如何维护链接对象 如何区分不同数据源池化 如何实现资源同步问题 分析 如何维护对象 使用阻塞队列实...

2029
来自专栏Danny的专栏

VMware10下安装CentOS 6.5+基本网络配置

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

1343
来自专栏Java后端技术栈

基于TCP和HTTP协议的RPC简单实现

(1)RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网...

1183
来自专栏代码世界

Python之IO模型

IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下:同步、异步、阻塞、非阻塞     同步(synchronous) IO和异步(asynchronous...

44111
来自专栏编程

2018 年了,你还是只会 npm install 吗?

你真的了解 npm 吗 ?重新介绍 npm 。

3.8K16

扫码关注云+社区

领取腾讯云代金券