1.命名规范
1.匈牙利命名法
标识符中的每个单词之间用下划线分隔: `user_name`;
2.驼峰命名法
标识符中的每个单词的首字母大写,用大写字母来分隔,
根据首字母是否大写又分为:
1.大驼峰: 首字母大写,常用作类名: `ClassName`, 又称`帕斯卡命名法`
2小驼峰除第一个单词外,每个单词首字母大写,常用作类属性和方法: $userName
1.1目录和文件
类型 命名规范 实例
目录 小写字母/小写字母+下划线 user/user_type
类文件 命名空间(作用域)与文件真实路径完全一致 app\index\controller
(驼峰法) 类名与文件名保持一致(首字母大写) User.php中只有User类
其它文件 小写字母/小写字母+下划线 list.php/ list_user.php
1.2函数与类属性与方法
类型 命名规范 实例
函数 匈牙利命名法(小写字母+下划线) get_user_type()
类的方法 驼峰法(首字母小写) getName()
类的属性 驼峰法(首字母小写) userType
魔术方法 双下划线开头+驼峰命名法 __set(),__callStatic()
1.3常量与配置参数
类型 命名规 实例
常量 (匈牙利命名法)大写字母+下划线 APP_PATH
配置参数 (匈牙利命名法)小写字母+下划线 url_route_on
1.4数据库与字段
类型 命名规范 实例
数据表 小写字母+下划线前缀用数据库名 p5_ staff(库名_表名)
字段表 小写字母+下划线前缀用表名 staff_name(表名_字段)
补充:
不要使用PHP保留关键字用作:常量名、类名 , 方法名、命名空间等,否则会引起系统错误
2.目录结构
目录结构
www WEB部署目录(或者子目录)
├─application ` 默认的应用目录(可以自定义)`
│ ├─common 公共模块目录(可以更改)
│ ├─module_name 模块目录
│ │ ├─config.php 模块配置文件
│ │ ├─common.php 模块函数文件
│ │ ├─controller 控制器目录
│ │ ├─model 模型目录
│ │ ├─view 视图目录
│ │ └─ ... 更多类库目录
│ │
│ ├─command.php 命令行工具配置文件
│ ├─common.php 公共函数文件
│ ├─config.php 公共配置文件
│ ├─route.php 路由配置文件
│ ├─tags.php 应用行为扩展定义文件
│ └─database.php 数据库配置文件
│
├─public `WEB目录(对外访问目录,必须是可以写的)`
│ ├─index.php 入口文件
│ ├─router.php 快速测试文件
│ └─.htaccess 用于apache的重写
│
├─thinkphp `框架系统(核心)目录`
│ ├─lang 语言文件目录
│ ├─library 框架类库目录
│ │ ├─think Think类库包目录
│ │ └─traits 系统Trait目录
│ │
│ ├─tpl 系统模板目录
│ ├─base.php 基础定义文件
│ ├─console.php 控制台入口文件
│ ├─convention.php 框架惯例配置文件
│ ├─helper.php 助手函数文件
│ ├─phpunit.xml phpunit配置文件
│ └─start.php 框架入口文件
│
├─extend ` 扩展类库目录(自定义目录)`
├─runtime ` 应用的运行时目录(可写,可定制,一般存放日志文件)`
├─vendor `第三方类库目录(Composer依赖库)`
├─build.php ` 自动生成定义文件(参考)`
├─composer.json ` composer 定义文件`
├─LICENSE.txt `授权说明文件`
├─README.md ` README 文件 , 框架的说明文件`
├─think `命令行入口文件`
3.架构总览
3.1MVC模型
ThinkPHe5.0基于MVC(模型-视图-控制器)方式来组织的
M model(模型) C control(控制器) V view(视图)
模型是请求中需要用到的数据 , 视图就是负责将数据展示给用户
如果不采用这种mvc模式开发的话 , 模型和视图是写在一起的 , 也就是说我们的数据是嵌入到模型中的
控制器先从模型中获取数据 , 然后再选择合适的视图进行输出 , 又是中间加一层
解决问题的套路
模型与视图,用控制器强制分离,数据请求与展示由控制器统一调配!
3.2URL访问模式
在tp5中URL访问默认采用 PATH_INFO方式访问http://域名 / 入口文件 / 模块 / 控制器 / 操作
举例 : (index目录是application下的index目录)
http://tp5.com/index.php/index/index/index
4.常用术语
4.1入口文件(index.php)
1.入口文件是整个Web应用的起点;2.入口文件最常用的是 index.php;3.入口文件并不唯一, 例如可为后台单独设置入口 admin.php4.入口文件可以通过URL重写功能将其隐藏。 需要在public目录下的.htaccess中配置
<IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] // 重写规则</IfModule>
4.2应用(application)
应用是URL请求到完成的(生命周期)处理对象,由 \think\App类处理 , 目录 :
1.应用是URL请求到完成的(生命周期)处理对象 , 由 \think\App类处理;2.应用必须在入口文件(如index.php)中调用并执行;3.可为不同的应用创建多个入口文件, 如后台入口: admin.php;4.应用有自己独立的配置文件( config.php )和公共函数文件( common.php );
4.3模块(module)
1.一个应用下有多个模块,对应着应用的不同部分,如前台,后台2.每个模块都可以有完整的MVC类库,创建和管理这些类库是我们最主要的工作3.每个模块可以有独立的配置文件( contig.php)和公共函数文件( common.php)4.如果应用简单,可使用单模块模式:app_ multi module"=> false,此时应用
4.4控制器(controller)
1.每个模块下可以有多个控制器负责响应∪RL请求2.每个控制器对应一个控制器类( class),如User.php;3.控制器管理着模型与视图,是系统资源的调度与分配中心4.ThinkPHP5的控制器不需要继承任何基类就可以工作。
如果要使用controller类的方法 , 需要继承
4.5操作(action)
1.操作对应着控制器类中的方法, 最URL请求的最小单元;2.任何URL请求 , 最终都是由控制器中的操作方法来完成3.操作是整个应用的最执行单元 , 是URL路由的核心与目标
4.6模型(model)
1.模型通常对应整个应用,因此模型通常在应用 application)目录下创建;2.尽管模型主要是针对数据库进行CURD操作,但也可以不操作数据库3.模型通常完成实际的业务逻辑和数据封装,并返回和格式无关的数据4.模型返回的数据,通常是数组(aray)或字符串(stng);5.模型支持分层操作,例如将模型层分为逻辑层/服务层/事件层。
4.7视图(view)
1.控制器调用模型返回的数据, 是通过视图转换成不同格式(json,xml,html)输出的;2.视图根据请求,调用模板引擎确定是直接输岀还是模板解析后再输岀;3.视图由大量模板文件组成,这些文件对应着不同控制器中的操作方法;4.模板目录是可以动态设置的5.视图最直观的理解就是由一堆html文件组成的
举例 : 在index模块下的类文件(Index.php)中的Index类中新增一个操作(hello方法) , 返回视图下的一个hello.html , 需要在控制器同级目录新建一个view文件夹 , 然后新建一个index(和当前模块名一样的文件夹), 然后新建一个和方法名一样的html页面
需要继承控制器类
Index.php
<?phpnamespace app\index\controller;use think\Controller;class Index extends Controller{ public function index() { return 'php中文网(nb)'; } public function hello() { // return 'hello php.cn'; return $this->fetch(); }}
hello.html
<h2>我是index模块中的index控制器中的hello方法对应的模板文件</h2>
5.TP5的生命周期
5.1入口文件
一步一步分析 , 首先是入口文件
定义常量 , 加载引导文件 , 引导文件的位置 : /thinkphp/start.php
5.2引导文件
接着是引导文件
引导文件start.php
<?phpnamespace think;// ThinkPHP 引导文件// 加载基础文件require __DIR__ . '/base.php'; // 这个文件 , 定义了大量的常量// 执行应用App::run()->send(); // 执行App下的run()方法 , 然后返回一个对象 , 再执行这个对象的send()方法
5.3注册自动加载
5.4注册错误和异常机制
执行Error::register
注册错误和异常处理机制。执行Error类下的register方法
5.5应用初始化
5.6URL访问检测
入口文件是index.php , 然后访问index模块下的user控制器的add方法 , 参数是id=10,name=peter
如果你的操作系统不支持上面的标准格式 , 还可以使用下面
5.7路由检测
5.8分发请求
5.9响应输出
5.10应用结束
上面只是大致介绍了一下thinkphp的响应流程 , 具体的每个部分的详细内容 , 后面会一 一介绍