资源描述
《ThinkPHP5框架
原理与实战》
全册教案教学设计
课程名称:ThinkPHP5框架原理与实战
授课年级: 2019年级
授课学期: 2019学年第一学期
教师姓名: 某某老师
年 月 日
课题
名称
第1章 ThinkPHP入门
计划
学时
3学时
内容
分析
在实际开发中,使用框架可以节省开发者在底层代码花费的时间,将主要精力放在业务逻辑上,同时还能保证项目的可升级和可维护性。本章将对常用的PHP框架、开发环境的搭建以及ThinkPHP的安装和使用进行讲解。
教学目
标及基
本要求
1. 了解PHP框架在开发中的作用
2. 熟悉ThinkPHP开发环境的搭建
3. 掌握ThinkPHP的安装与使用
教学
重点
PHP框架、安装Apache、安装PHP、安装MySQL、配置虚拟主机、安装Composer、安装Visual Studio Code编辑器、安装ThinkPHP、使用ThinkPHP
教学
难点
环境搭建、配置虚拟主机、安装ThinkPHP、使用ThinkPHP
教学
方式
教学采用教师课堂讲授为主
l 概念性知识点:提出为什么,将抽象具体化,配合教学PPT、图例辅助讲解。
l 操作性知识点:提需求,并上机演示如何应用,重点内容总结经验及注意事项。
l 综合实战操作:分析整体的设计思路和步骤,对具体操作进行上机演练。
教
学
过
程
第一学时
(认识框架、搭建开发环境)
一、提出需求,导入学习任务
(1)先了解什么是框架,引出本节所需知识内容。
l 由于每个人的编程习惯各有不同,当同一个项目经过不同的人接手开发、维护和修改时,就容易遇见问题。例如,创建的变量名不统一,类名不统一等就会导致变量找不到,加载的文件不存在等情况出现,这看似是一个小问题,但对于含有几百个甚至更多文件的项目来说,开发人员需要花费一定的时间进行排查。
l 在项目功能需要升级维护时,同样的项目,可能在更换开发人员后,为了优化设计或减少熟悉他人代码的时间,在实际开发中通常都会选择使用“框架”,这样开发人员就可将大部分的精力放在业务功能实现上。
l 引出本节课要讲解的内容,框架的概念、常用的框架有哪些、ThinkPHP的发展历程、开发环境的搭建
(2)明确学习方向。
【知识点】
什么是框架
常见的框架
ThinkPHP框架的发展历程
开发环境的搭建
【能力点】
了解使用框架在开发中起到的作用
熟悉ThinkPHP开发环境的搭建
二、明确目标,完成任务实现
l 介绍框架
l 讲解框架的应用场景及其作用。
l 应用场景:大型项目,维护成本高,优化代码,统一开发规范。
l 作用:使用框架可以方便开发人员快速、高效的搭建系统,无需考虑程序的底层架构,可以节省很多时间,框架具有灵活性和可维护性,在项目维护和升级时,更便于满足不同的开发的需求。
l 列举常见的PHP框架。
l Laravel:采用了MVC架构模式,具备其他优秀Web框架的敏捷开发特质,并支持Composer依赖扩展工具,提倡代码的重用,保证代码的简洁性与优雅性。
l Yii::一款快速、安全、高效、基于组件的PHP框架, MVC设计模式,代码简洁优雅,秉承不会对代码进行过度设计的理念,将代码的重用性发挥到了极致,开箱即用的特性并可根据实际需求自定义或替换任何一处核心代码,非常易于扩展。
l Symfony:2005年发布以来至今,因其稳定性、长久性、灵活性、可复用组件、速度快、性能高等特性备受关注。是由低耦合、可复用的Symfony组件构成,用于构建网站和开发互联网产品,主要用于建立企业级的完善应用程序。
l ThinkPHP: 2006年最初开发时,命名为FCS,2007年正式更名为ThinkPHP。它是为了敏捷Web应用开发和简化企业级应用开发而诞生的。由于ThinkPHP的灵活、高效以及完善的技术文档,经过多年的发展,已经成为国内最受欢迎的PHP框架之一,代码风格符合PSR规范并支持Composer工具的依赖管理,方便项目进行移植、维护和管理。
l 搭建开发环境
l Apache安装与配置
l 获取Apache安装软件,配置安装,启动Apache服务访问测试。
l PHP安装与配置
l 获取Apache安装软件,创建PHP的配置文件,在Apache中引入PHP模块,测试PHP是否安装成功
l MySQL安装与配置
l 获取MySQL并安装,创建MySQL的配置文件,初始化数据库自动创建数据文件目录,启动MySQL服务
l 登录MySQL服务器,设置用户登录密码
l 配置域名。
l 由于申请真实域名比较麻烦,为了便于学习和测试,可以更改系统hosts文件,实现将任意域名解析到指定IP。。
l 以管理员身份打开hosts文件。
l 在host文件中添加域名与IP的对应记录。
l 启用辅配置文件。
l 辅配置文件是Apache配置文件httpd.conf的扩展文件,用于将一部分配置抽取出来便于修改,但默认并没有启用。
l 打开httpd.conf文件,删除引入httpd-vhosts.conf文件前的“#”即可启用。
l 配置虚拟主机
l 打开conf/extra/httpd-vhosts.conf虚拟主机配置文件,添加配置虚拟主机的代码,重启Apache服务使配置生效。
l 浏览器访问测试配置域名是否生效。
l 安装Composer。
l 选择安装程序安装,或者是使用命令行安装。
l 安装完成后,在命令行输入Composer测试是否安装成功
l 安装Visual Studio Code编辑器
l 下载安装程序。
l 安装完成后可进行一些更换主题等常规的设置。
三、归纳总结,布置课后作业
(1)回顾上课前的学习目标,对本节课知识点进行总结。
(2)使用博学谷系统下发课后作业。
第二学时
(ThinkPHP的安装和使用)
一、提出需求,导入学习任务
(1)回顾上节课的内容,框架的相关知识,引出本节课要讲解的内容ThinkPHP的安装和使用。
(2)明确学习方向。
【知识点】
ThinkPHP安装
使用ThinkPHP开发项目
【能力点】
掌握ThinkPHP的安装
掌握ThinkPHP的基本使用
二、明确目标,完成任务实现
l 回顾上节框架知识
l 在讲解本节课内容前,首先回顾一下框架的概念及常用的框架。
l 然后由常用的框架中引出本节课要讲解的内容:ThinkPHP安装,ThinkPHP的使用。
l 获取与安装ThinkPHP
l 获取ThinkPHP。
l 讲解ThinkPHP的安装方式,由于前面学习中安装了Composer,以Compoesr安装为例进行安装。
l 在指定的目录下执行安装ThinkPHP的命令。
composer create-project topthink/think=5.1.36 .
l 下载完成后,查看目录下的文件,用前面配置好的域名访问测试是否安装成功。
l 使用ThinkPHP开发项目
l 准备数据表和测试数据,登录MySQL服务器后,创建学生表并添加测试数据。
l 编辑config/database.php文件,改成正确的连接数据库的参数。
l 在Index控制器类中新增一个student()方法,将student表查询出来。
l http://thinkphp.test/index.php/index/index/student进行测试。
l 编写html文件把控制器读取到的数据渲染到模板中,在浏览器查看运行结果。
补充讲解:开启跟踪调试功能,更好调试开发中遇到的错误
打开config/app.php文件,找到app_debug、app_trace将值改为true
三、归纳总结,布置课后作业
(1)回顾上课前的学习目标,对本节课知识点进行总结。
(2)使用博学谷系统下发课后作业。
第三学时
(上机练习)
教师发放本章相关资料和素材,学生进行上机练习,以此检查学生对相关知识点的掌握情况。上机练习完成后将作品通过平台提交给老师。
教
学
后
记
《ThinkPHP5框架
原理与实战》
教学设计
课程名称:ThinkPHP5框架原理与实战
授课年级: 2019年级
授课学期: 2019学年第一学期
教师姓名: 某某老师
年 月 日
课题
名称
第2章 框架的基础知识
计划
学时
4学时
内容
分析
在第1章学习了ThinkPHP的使用,可以看出使用ThinkPHP开发项目非常快捷、高效。但对于想要深入学习ThinkPHP来说,仅仅学会基本的使用方法是不够的,还要理解框架的实现原理,能够读懂ThinkPHP的源代码。本节将针对框架的基础知识进行详细讲解。
教学目
标及基
本要求
4. 掌握MVC开发模式和基本思想
5. 掌握路由的定义和使用
6. 掌握PHP命名空间和自动加载的使用
7. 掌握Composer在框架中的使用
教学
重点
MVC概念、MVC开发模式、路由、命名空间、自动加载函数、代码规范、自动加载类
教学
难点
命名空间的使用、自动加载
教学
方式
教学采用教师课堂讲授为主
l 概念性知识点:提出为什么,将抽象具体化,配合教学PPT、图例辅助讲解。
l 操作性知识点:提需求,并上机演示如何应用,重点内容总结经验及注意事项。
l 综合实战操作:分析整体的设计思路和步骤,对具体操作进行上机演练。
教
学
过
程
第一学时
(MVC开发模式、路由)
一、提出需求,导入学习任务
(1)先了解框架的基础知识,引出本节所需知识内容。
l ThinkPHP是一种支持MVC开发模式的框架,若要理解ThinkPHP的设计思想,首先需要理解什么是MVC开发模式。
l 在框架中,如何将URL中的请求信息分发到具体的控制器,可以通过定义路由规则来实现,也就是专门编写路由程序对URL进行匹配,找到对应的模块、控制器和操作。
(2)明确学习方向。
【知识点】
MVC概念
ThinkPHP单一入口的框架设计
路由的实现原理
ThinkPHP中的路由
【能力点】
掌握MVC开发模式
掌握路由的设置
二、明确目标,完成任务实现
l 介绍MVC开发模式
l 讲解什么是MVC。
l MVC是Xerox PRAC(施乐帕克研究中心)在20世纪80年代为编程语言Smalltalk-80发明的一种软件设计模式,到目前为止MVC已经成为了一种广泛流行的软件开发模式。MVC采用了人类分工协作的思维方法,将程序中的功能实现、数据处理和界面显示相分离,从而在开发复杂的应用程序时,开发者可以专注于其中的某个方面,进而提高开发效率和项目质量,便于代码的维护。
l MVC是模型(Model)、视图(View)和控制器(Controller)的英文单词首字母的缩写,它表示将软件系统分成三个核心部件:模型(Model)、视图(View)、控制器(Controller),分别用于处理各自的任务。
l 在用MVC进行的Web应用开发中,模型是指处理数据的部分,视图是指显示在浏览器中的网页,控制器是指处理用户交互的程序。例如,用户提交表单时,由控制器负责读取用户提交的数据进行处理,然后向模型发送数据,再通过视图将处理结果显示给用户。
l 写个简单的案例演示MVC开发模式。
l 配置一个虚拟主机,域名为mytp.test,访问的目录为C:/web/www/mytp/public,配置成功后重启Apache使配置生效。
l 管理员身份编辑hosts文件,添加一条解析记录“127.0.0.1 mytp.test”
l 在C:/web/www/mytp目录下创建public/index.php文件,然后使用echo输出字符串“mytp.test”。通过浏览器访问http://mytp.test,如果出现mytp.test,说明虚拟主机创建成功。
l 为mytp数据库中的student表创建模型文件public/StudentModel.php,在StudentModel.php中连接数据库,读取student数据表中的数据。
l 创建student控制器文件public/StudentController.php,在StudentController.php中引入模型文件,实例化模型后调用模型中定义好的查询数据的方法,引入模板文件。
l 模板文件中,创建一份表格,分别显示ID,姓名和性别,通过foreach标签循环显示在页面中。
l 按照以上方式完成MVC的分离后,在public/index.php中编写代码引入StudentController.php文件,实例化Student控制器,调用控制器中的方法,使用浏览器访问http://mytp.test,查看运行结果。
l 采用MVC设计思想后,每一个请求都被拆分成了控制器、模型、视图3部分来完成。对于小型项目来说,如果严格遵循MVC,会增加结构的复杂性,增加工作量,降低运行的效率,因此MVC不适用于小型项目。而对于团队协作开发的大型项目来说,MVC可以使代码的结构更清晰,能形成一定的规范和约束力,使每个人的职责分工更明确。
l 单一入口的框架设计
l 单一入口框架设计的调用流程。
l 框架通常会采用单一入口的设计,单一入口是指整个项目只对外开放index.php一个入口文件,而不是项目中的每个功能都提供一个入口文件。使用单一入口后,项目中的所有功能都需要经过一个统一的处理流程,这个流程会完成框架初始化、载入配置文件、获取请求信息、匹配路由规则等任务,然后根据请求信息找到对应的模块(Module)、控制器(Controller)和操作(Action),来完成具体的功能。
l 模块:对于一个复杂的项目来说,往往需要划分多个模块,通过划分模块可以将一个复杂的问题拆分为若干个小问题来解决。例如,一个电子商务网站系统可以划分成商品管理模块、物流管理模块、广告管理模块、用户管理模块等。
l 控制器:在一个模块内,可以创建多个控制器,每个控制器表示一个可操作的资源。例如,在商品管理模块中,可以创建商品信息控制器、商品分类控制器、商品属性控制器等。在项目中,通常将每个模块单独放在一个目录下,在目录中保存和模块相关的控制器、模型和视图等文件。
l 操作:在一个控制器中,会提供一些具体的操作。例如,商品信息控制器中的操作有商品信息查询、商品信息修改、商品信息添加、商品信息删除等。在项目中,操作就是定义在控制器类中的方法。
l 案例演示如何在入口文件中获取请求信息,并根据请求信息找到对应的模块、控制器和操作。
l 修改public/index.php文件,添加如下代码。
<?php
$pathinfo = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '';
echo $pathinfo;
l 在public目录下创建student目录表示student模块,然后在student目录中创建controller、model和view目录,将原有的文件放入相应目录下面。
public/student/controller/StudentController.php
public/student/model/StudentModel.php
public/student/view/student.html
public/index.php
l 修改public/index.php文件,从$pathinfo中提取出模块、控制器和操作。
<?php
$pathinfo = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '';
$arr = explode('/', trim($pathinfo, '/'));
if (!isset($arr[2])) {
exit('请求信息有误。');
}
list($module, $controller, $action) = $arr;
define('MODULE_PATH', './' . $module . '/');
$controller_name = ucwords($controller) . 'Controller';
$controller_path = MODULE_PATH . 'controller/' . $controller_name . '.php';
require $controller_path;
$obj = new $controller_name();
$obj->$action();
l 修改public/student/StudentController.php文件中的模型路径和视图路径。
public function index()
{
equire MODULE_PATH . 'model/StudentModel.php'; // 修改模型路径
$model = new StudentModel();
$data = $model->getAll();
require MODULE_PATH . 'view/student.html'; // 修改视图路径
}
l 通过浏览器访问http://mytp.test/index.php/student/student/index,如果能看到学生信息的输出结果,说明程序已经执行成功,已经实现了通过统一入口文件index.php进行访问,也可以尝试创建goods模块Goodsinfo控制器add操作,来测试是否能够正确访问。
l 路由
l 路由的实现原理
l Web开发中的路由可以简单理解为URL到具体模块、控制器和操作的映射。
l ThinkPHP中,开发人员不需要专门定义路由规则,框架会自动识别URL地址中的模块、控制器和操作。若定义了路由规则,可以使项目的URL更加灵活。
l 在ThinkPHP中,访问一个控制器中的方法,可以通过3种方式访问,分别是:完整URL、隐藏入口文件的URL、自定义短URL。
l 完整URL:完整URL可以直接找到入口文件index.php,然后对http://mytp.test/index.php/index/user/login进行路由规则匹配。由于在路由表达式中没有定义index/user/login的映射地址,因此路由规则没有生效,最后由框架的自动路由机制识别为index模块User控制器login操作。
l 隐藏入口文件的URL:利用Apache的URL重写功能可以在URL中隐藏入口文件index.php,然后对index/user/login进行路由规则匹配,和完整URL一样,路由规则没有生效,由框架自动路由机制识别为index模块User控制器login操作。
l 自定义短URL:在URL重写后找到index.php,然后对login进行路由规则匹配,通过路由表达式获得路由地址index/User/login,然后找到了index模块User控制器login操作。
l 利用URL重写功能可以隐藏URL中的入口文件index.php,然后通过路由功能可以进一步缩短URL地址。从用户体验来说,一个短的URL更有利于用户记忆。
l 隐藏入口文件。
l 在URL中,index.php是项目的入口文件,为了让URL更加简洁,通常会省略URL中的入口文件。例如,用户登录的URL为http://localhost/index.php/index/user/login,由于这个地址比较长,不利于记忆,希望换成一个简化地址http://localhost/login。
l 使用Apache的重写功能隐藏入口文件index.php。重写功能可以打破URL和文件的对应关系,实现自定义URL的效果。若要使用重写功能,需要在Apache配置文件httpd.conf中开启rewite模块,在配置文件中搜索“LoadModule rewrite_module”找到加载模块的配置,取消“#”注释,开启rewrite模块后,重启Apache服务,就可以通过编写配置实现重写。
l 但由于直接在Apache配置文件中编写重写配置比较麻烦,每次修改配置都需要重启Apache才会生效,一旦配置有误将无法启动,所以推荐将重写的配置写在分布式配置文件.htaccess中。在C:/web/www/mytp/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>
l 在C:/web/www/mytp目录下创建application目录,将原来的public/student目录放入application目录中。经过调整后,新的目录结构如下,将控制器、模型和视图文件放在application目录中后,public目录只有入口文件index.php提供对外访问,这样的目录结构安全性更高,并且不影响重写功能。
application/student/controller/StudentController.php
application/student/model/StudentModel.php
application/student/view/student.html
public/index.php
public/.htaccess
l 将index.php中的模块路径修改为上级目录下的application目录中。
define('MODULE_PATH', '../application/' . $module . '/');
l 通过浏览器访问http://mytp.test/student/student/index,测试在URL中隐藏入口文件的功能是否生效。
l ThinkPHP中的路由
l ThinkPHP5.1中的路由功能非常强大,不仅可以让复杂的访问简单化,而且支持多种定义方式。
l ThinkPHP项目目录下的route目录用于存放路由定义文件,该目录下所有的路由定义文件都会被加载,默认的路由定义文件为route.php。
l 使用Route::rule()定义路由,Route是ThinkPHP中的路由类,该类提供了rule()方法用来注册路由规则,其基本语法格式如下。
Route::rule('路由表达式', '路由地址', '请求类型');
l 演示一些典型的配置。
Route::rule('/', 'index/index2'); // 将首页路由到index2()方法
Route::rule('hello1', 'admin/index/hello'); // 将hello1路由到admin模块
Route::get('hello2', 'index/index/hello'); // 定义GET路由规则
Route::post('hello3', 'index/index/hello'); // 定义POST路由规则
Route::any('hello4', 'index/index/hello'); // 所有请求类型都支持的路由规则
l 在路由表达式中传递固定参数和可选参数,传递固定参数并不是指URL中传递的参数,而是在路由地址中为指定的操作方法传入参数,在访问的URL中是不可见的,能起到一定的安全保护作用;传递可选参数,可以用“[ ]”符号表示可选参数,可选参数必须放在必选参数的后面,如果中间使用了可选参数,后面的参数都会变成可选参数。
Route::rule('user/:id', 'index/detail?name=test'); //传递固定单数
Route::rule('user/:id/:name/[:age]', 'index/detail'); //传递可选参数age为可选参数
Route::rule('user/:id/[:name]/:age', 'index/detail'); //name和age均为可选参数
l 使用闭包方式定义路由,不需要指定对应的控制器和操作方法,将需要执行的代码直接写在闭包函数中即可,用于满足有特殊需求的访问。
Route::get('hello/:name', function ($name) {
return 'Hello,' . $name;
});
l 使用数组方式定义路由,数组的键和值与Route::get()的前2个参数相同,考虑到框架后期的版本升级,建议尽量使用Route类的方法注册路由规则,数组方式定义路由将在后续的版本中取消,不再使用。
return [
'hello/:name' => 'index/hello'
];
三、归纳总结,布置课后作业
(1)回顾上课前的学习目标,对本节课知识点进行总结。
(2)使用博学谷系统下发课后作业。
第二学时
(命名空间、自动加载)
一、提出需求,导入学习任务
(1)回顾上节课的内容,框架的基础知识,引出本节课要讲解的内容。
(2)明确学习方向。
【知识点】
命名空间的定义
命名空间的使用
注册自动加载函数
注册自动加载方法
【能力点】
掌握命名空间的使用
掌握自动加载的使用
二、明确目标,完成任务实现
l 命名空间
l 命名空间的定义。
l PHP中命名空间使用关键字namespace定义,基本语法格式如下。
namespace 空间名称;
l 空间名称遵循基本标识符命名规则,以数字、字母和下划线构成,且不能以数字开头。如果一个脚本的开始处需要定义命名空间,除PHP提供的declare语句外,命名空间必须是程序脚本的第1条语句,如果在PHP开始标记前有空格等都会报“Fatal error”错误提示。
l 定义子命名空间PHP命名空间允许指定多层次的命名空间,通常把这种用法称为定义子命名空间。
<?php
namespace app\index\controller;
/* 此处编写PHP代码 */
l 命名空间的使用
l 虽然任意合法的PHP代码都可以包含在命名空间中,但只有类(包括抽象类和traits)、接口、函数和常量受命名空间的影响。其中,受命名空间影响的代码也称为空间成员。
l 通过案例演示是否可以在一个命名空间中直接访问另一个命名空间中的常量和变量。
l PHP提供了3种访问空间成员的方式,分别为非限定名称访问、限定名称访问、完全限定名称访问。
l 非限定名称访问就是直接访问空间成员名称,不指定命名空间的名称,只能用于访问当前代码向上寻找到的第1个命名空间内的成员,当找到的命名空间中不存在指定的空间成员时,PHP就会报错。
l 限定名称访问的语法为“子空间名称\空间成员名称”,表示从当前空间开始,访问其子空间的成员。这种方式只能用于访问当前空间的子空间成员,不能访问其父空间的成员。
l 完全限定名称访问的语法为“\空间名称\空间成员名称”,可以在任意的命名空间中访问从“\”根命名空间开始的任意空间内的成员。
l 导入命名空间
l 当在一个命名空间中使用其他命名空间中的类和接口时,如果每次都在类名前面加上路径,会显得比较烦琐,这时可以通过use关键字导入指定的空间或空间的成员(类、接口),同时为了简化操作,也可以对导入的内容设置别名。从PHP5.6开始,还允许导入函数和常量,并可为其设置别名。
l 通过一个案例演示use导入与别名的使用。
l 自动加载
l 注册自动加载函数
l 在PHP 7.2版本以前,自动加载的实现方式有两种,分别为__autoload()和spl_autoload_register()。前者在试图使用尚未被定义的类时自动调用,这样PHP会在报告错误之前有最后一次机会加载所需的类,但从PHP 7.2版本开始,此函数已被废弃。后者则需要将用户自定义的函数注册为自动加载函数,注册完成后,其作用与__autoload()函数功能相同。
l 虽然__autoload()自动加载函数会在使用未被定义的类时自动调用,但是该函数自己并不能完成加载类的功能,它只提供了一个时机,具体的加载代码还需要用户自己实现。通过案例进行演示使用__autoload()自动加载类文件。
l PHP提供的spl_autoload_register()函数用于完成注册自动加载函数的功能,其基本语法格式如下。
bool spl_autoload_register ([ callable $autoload_function [, bool $throw = TRUE [, bool$prepend = FALSE ]]] )
l 通过案例演示spl_autoload_register()函数的具体使用。
l 注册多个自动加载函数
l PHP提供的spl_autoload_register()可以注册多个自动加载函数,在需要的文件载入成功之前,会依次按注册的顺序执行,直到找到为止。通过案例演示spl_autoload_register()函数的使用。
l 注册自动加载方法
l PHP中除了可以将函数注册为自动加载函数,还可以根据实际需求将指定的方法注册为自动加载方法。但是在使用时spl_autoload_register()函数的参数与注册自动加载函数有所不同。对于静态方法和非静态方法有以下两种语法,基本格式如下,函数的参数可以是一个索引数组。对于静态方法还可以直接使用字符串的方式设置类名和方法名,通过案例演示注册静态方法和非静态方法。
// 注册静态方法,有以下两种方式
spl_autoload_register(['类名', '方法名'])
spl_autoload_register('类名::方法名')
// 注册非静态方法,只有一种方式
spl_autoload_register([对象, '方法名'])
三、归纳总结,布置课后作业
(1)回顾上课前的学习目标,对本节课知识点进行总结。
(2)使用博学谷系统下发课后作业。
第三学时
(代码规范、Composer)
一、提出需求,导入学习任务
(1)回顾上节课的内容,引出本节课要讲解的内容。
(2)明确学习方向。
【知识点】
PSR代码规范
Composer实现类的自动加载
创建自己的包
【能力点】
了解PSR代码规范
掌握Composer的使用
二、明确目标,完成任务实现
l PSR代码规范
l PSR出现背景
l PHP的开源项目在网络上非常流行,有来自世界各地的开发者编写了各种框架、类库,放在GitHub等平台中分享。后来人们发现,虽然市面上出现了很多流行的框架,但是由于不同开发团队的编码习惯各有不同,缺乏一种约束力,导致这些框架的代码风格各不相同,不同框架之间难以共享代码。有时为了开发一个公共的类库,就要针对不同框架编写不同版本。
l 一些开源框架的开发者于2009年成立了PHP-FIG(PHP Framework Interop Group,PHP框架互用性小组),用于制定PHP代码的编写规范。虽然PHP FIG不是一个官方的组织,但是它也获得了大部分的PHP社区以及框架的支持和认可。
l PSR(PHP Standard Recommendations,PHP推荐标准)是PHP FIG组织制定的PHP代码开发规范。通过最低程度的限制,制定一个协作标准,这样PHP框架(如ThinkPHP、Laravel等)遵循统一的编码规范,避免各家自行发展的风格阻碍PHP的发展,解决PHP开发人员由来已久的困扰。
l 目前已表决通过并正在使用的标准有12套,列举常用的PSR标准并简单介绍其中的一些规范要求。
l Composer
l 实现类的自动加载
l PHP虽然提供了自动加载机制,但是自动加载功能还需要手动设置才能实现,操作起来相对复杂。因此就可以利用Composer提供的功能实现类的自动加载。在mytp.test项目中通过案例演示使用Composer来管理类的自动加载。
l 项目依赖管理
l 在以前的开发模式中,如果在项目中使用了其他的类库,需要手动下载这些类库的代码,并进行引入等相关操作。这种方式不仅麻烦,而且当这些依赖的类库版本更新时,还需要重新再去下载一次。尤其是当一个类库又依赖另一个类库时,这种层叠的依赖关系会让项目的维护变得复杂、低效。
l 为了让PHP的开源社区更好地发展,Composer提供了非常强大的项目依赖管理功能,它可以自动完成各种依赖包的下载和安装,并通过命名空间来自动引入。
l Composer的主要资源库为packagist(https://packagist.org/),在该网站中有大量的开源项目,以包的形式发布。包的命名方式为“用户名/包名”,如topthink/think。
l 以ThinkPHP提供的助手包topthink/think-helper为例进行代码演示。
l 创建自己的包
l 在进行项目开发时,除了可以利用Composer依赖其他人提供的类库包外,还可以将自己实现的功能或项目打成一个包,让其他人也可以使用自己编写的代码。
l 通过一个简单的案例演示如何使用Composer创建自己的包。
三、归纳总结,布置课后作业
(1)回顾上课前的学习目标,对本节课知识点进行总结。
(2)使用博学谷系统下发课后作业。
第四学时
(上机练习)
教师发放本章相关资料和素材,学生进行上机练习,以此检查学生对相关知识点的掌握情况。上机练习完成后将作品通过平台提交给老师。
教
学
后
记
《ThinkPHP5框架
原理与实战》
教学设计
课程名称:ThinkPHP5框架原理与实战
授课年级: 2019年级
授课学期: 2019学年第一学期
教师姓名: 某某老师
年 月 日
课题
名称
第3章 框架的实现原理(上)
计划
学时
6学时
内容
分析
了解了ThinkPHP框架相关的基础知识,在掌握了这些基础知识后,就可以动手编写一个自定义的框架。本章将通过ThinkPHP源码分析的方式,来深入讲解ThinkPHP底层的设计思想和实现原理。
教学目
标及基
本要求
8. 掌握控制反转和依赖注入的思想和代码实现
9. 掌握PHP中的反射的使用
10. 掌握
展开阅读全文