Web应用安全技术原理与实践 课件 第5章 MVC编程_第1页
Web应用安全技术原理与实践 课件 第5章 MVC编程_第2页
Web应用安全技术原理与实践 课件 第5章 MVC编程_第3页
Web应用安全技术原理与实践 课件 第5章 MVC编程_第4页
Web应用安全技术原理与实践 课件 第5章 MVC编程_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Web应用安全第五章MVC模式本章要求1理解面向对象编程的相关概念和实现方法2理解MVC编程的基本思想3掌握MVC编程的一般过程23面向对象编程基础面向对象编程(ObjectOrientedProgramming,OOP)是一种计算机编程架构,它的一条基本原则是计算机程序由单个能够起到子程序作用的单元或对象组合而成。采用面向对象编程思想可以实现软件工程的三个主要目标:重用性、灵活性和扩展性。面向对象编程主要特点封装性:将对象的成员属性和成员方法结合成一个独立的单元,以隐蔽对象的内部细节,PHP语言通过类和对象实现封装;继承性:建立的一个新的派生类时,从一个先前定义的类中继承属性和方法,同时可以重新定义或加进新的属性和方法,PHP语言支持单继承;多态:同一类的同一成员方法输入不同类型的参数,或者具有继承关系的类多个类对同一成员方法,可以有不同的行为和实现。4面向对象编程基础对象和类对象定义及内涵对象就是描述客观事物的一个实体,如张三、桌子、图书、电脑等每一个对象都有特定的数据模型,用于描述对象的一些具体数据,如姓名、年龄、身高、体重等,这些数据称为对象的属性,也叫对象的成员变量。每一个对象有特定的行为模型,用于描述对象的行为能力或功能,称为对象的方法。类定义及内涵类则是对一类对象的抽象,如人、图书等5面向对象编程基础对象和类定义一个类class类名称{

属性1;

属性i...;

方法1(){}

方法j...(){}}classPerson{

public$name;//姓名

public$sex;//性别

public$age;//年龄

publicfunctionsayHello(){

print("Hello!<br>");

}

publicfunctionwork(){

print("Iamworking......<br>");

}}6面向对象编程基础对象和类实例化类为对象<?phpclassPerson{

public$name;//姓名

public$sex;//性别

public$age;//年龄

publicfunctionsayHello(){

print("Hello!<br>");

}

publicfunctionwork(){

print("Iamworking......<br>");

}}$zhangsan=newPerson();$zhangsan->name="zhangsan";$zhangsan->sex="male";$zhangsan->age="18";$zhangsan->sayHello();//Hello!$zhangsan->work();//Iamworking......?>7面向对象编程基础对象和类构造函数和析构函数classPerson{public$name;//姓名public$sex;//性别public$age;//年龄function__construct($name,$sex,$age){$this->name=$name;$this->sex=$sex;$this->age=$age;}

function__destruct(){

print("Destroyinganobject......<br>");

}}$zhangsan=newPerson("zhangsan","male",18);print("Name:".$zhangsan->name."<br>");//zhangsanprint("Sex:".$zhangsan->sex."<br>");//maleprint("Age:".$zhangsan->age."<br>");//18//Destroyinganobject......没有显性的方法调用--魔术方法8面向对象编程基础对象和类$this属性classPerson{public$name;//姓名public$sex;//性别public$age;//年龄function__construct($name,$sex,$age){$this->name=$name;$this->sex=$sex;$this->age=$age;}

functioninfo(){

//print($name);//这样的方式将报错,变量$name没有定义

print("Name:".$this->name."<br>");

print("Sex:".$this->sex."<br>");

print("Age:".$this->age."<br>");

}}$zhangsan=newPerson("zhangsan","male",18);$zhangsan->info();//zhangsan,male,18$this属性在对象创建时指向对象本身9面向对象编程基础继承和重载继承是指一个类可以拥有其他类中声明的属性和方法的机制。被继承的类称为父类,继承的类称为子类。PHP语言支持单继承。classStudentextendsPerson{

public$id;

function__construct($name,$sex,$age,$id){

$this->id=$id;

parent::__construct($name,$sex,$age);

}

publicfunctioninfo(){

print("MyID:".$this->id."<br>");

print("Myname:".$this->name."<br>");

print("Myage:".$this->age."<br>");

}}$zhangsan=newStudent("zhangsan","male",18,201901009);$zhangsan->sayHello();//Helloeveryone,I'amzhangsan!$zhangsan->work();//Iamworking......$zhangsan->info();//201901009,zhangsan,1810面向对象编程基础继承和重载类在继承过程中,还可以重新声明父类中的属性和方法,这种机制称为重载。classA{

public$attr="Defaultvalue";

publicfunctionoperation(){

print("Something<br>");

print('Thevalueof$attris'.$this->attr."<br>");

}}classBextendsA{

public$attr="Differentvalue";

publicfunctionoperation(){

print("Somethingelse<br>");

print('Thevalueof$attris'.$this->attr."<br>");

}}$a=newA();$a->operation();//Something//Thevalueof$attrisDefaultvalue$b=newB();$b->operation();//Somethingelse//Thevalueof$attrisDiffrentvalue11面向对象编程基础访问控制—属性和方法所有属性或方法的默认访问修饰符是public。被public标记的属性或方法称为公有属性或方法,它可以在类的内部和外部访问,可以被子类继承。publicprivate被private标记的属性或方法称为私有属性或方法,它只能在类的内部访问,不能被子类继承。protected被protected标记的属性或方法称为受保护属性或方法,它只能在类的内部访问,可以被子类继承。12面向对象编程基础文件的自动装载在很多情况下,为了保持代码的整洁,类定义在一个单独的文件中,在使用这些类的定义之前,需要使用文件包含语句(如include)把相应的文件包含进来。classA{/*文件路径:./Class/ClassA.php*/

public$attr;

publicfunctiontest(){

print("ClassA.<br>");

print($this->attr);

}}include("./Class/ClassA.php");$a=newA();$a->attr="abc";$a->test();通过显示文件包含实现类文件装载不足之处:(1)手工添加;(2)可能有一些文件不必要装载13面向对象编程基础文件的自动装载自动装载机制<?phpfunctionmy_autoload($name){print("自动装载类-{$name}的源代码文件!<br>");$file="./Class/Class".$name.".php";include_once($file);}spl_autoload_register("my_autoload");print("程序开始执行......<br>");$a=newA();print("类A的对象创建成功!<br>");$a->attr="abc";$a->test();?>按需、自动装载文件14面向对象编程基础其他常见关键字static—静态通过关键字static来标识的类属性或方法,则它们为静态的,即这些属性或方法不需要依赖于对象。<?phpclassA{publicstatic$count=0;publicfunction__construct(){self::$count++;}publicstaticfunctiongetCount(){returnself::$count;}}print(A::$count);//0$a1=newA;print(A::getCount());//1$a2=newA;print($a2->getCount());//2?>15面向对象编程基础其他常见关键字instanceof--用于确定一个对象是类的实例或子类<?phpclassA{ public$a;}classB{ public$b;}classCextendsA{public$c;}$a=newA;$b=newB;$c=newC;if($ainstanceofA){//输出--A类的对象

print("A类的对象<br>");}else{print("不是A类的对象<br>");}if($binstanceofA){//输出--不是A类的对象

print("A类的对象<br>");}else{print("不是A类的对象<br>");}if($cinstanceofA){//输出--A类的对象

print("A类的对象<br>");}else{ print("不是A类的对象<br>");}?>16MVC编程基本原理—概念MVC是模型(Model)、视图(View)和控制器(Controller)的简写。视图(View)表示用户交互界面,简单来说就是HTML文档界面模型(Model)是Web应用系统业务流程,是系统设计的核心控制器(Controller)作用可以理解为接收操作请求,并将模型和视图关联在一起,完成操作请求并显示操作请求的结果。17MVC编程基本原理—过程单一入口路由分发控制器操作请求模型视图操作响应①②③④⑤⑥⑦⑧耦合性低重用性高可维护性高优点:缺点:结构复杂,不易掌握调试困难18MVC编程编程示例—学生成绩查询系统只有登录成功的学生才能查询成绩。查询时,需要提交学生学号信息。19MVC编程编程示例—学生成绩查询系统

系统分析视图控制器登录界面、成绩查询初始界面、成绩查询结果初始页面请求操作、登录请求操作、成绩查询请求操作模型用户名和密码的数据验证、英语课成绩查询、计算机网络课成绩查询、所有课程成绩查询以用户登录功能为例,说明MVC开发过程,剩余功能实现自行练习20MVC编程编程示例—学生成绩查询系统登录功能实现操作请求参数设计GET参数,?action=index&op=loginaction表示请求的操作,op表示请求的阶段;如果没有请求参数,则设置缺省参数为action=index&op=index基本流程设计index.php(单一入口)

获取操作请求参数,或设置缺省操作参数

根据请求参数找到处理控制器的处理方法访问模型,验证用户名和密码返回处理结果后的视图(成功为查询视图、不成功为登录视图)用户请求路由21MVC编程编程示例—学生成绩查询系统登录功能实现系统文件结构设计Controller—控制器目录Model—模型目录View—视图目录index.php—单一入口文件app.php—系统核心功能文件,包括请求参数获取、路由查询和分发、文件自动装载等route.php—路由配置信息文件22MVC编程编程示例—学生成绩查询系统登录功能实现<?phpdefine("SINGLE","GOON");//定义单一入口标识require("app.php");$app=newAPP;$app->action();?>index.phproute.php<?php//基于标识的单一入口if(!defined('SINGLE'))exit();//路由配置按照[action,op,controller,func]$routes=array(array("index","default","Index","default"),array("index","login","Index","login"),);?>23MVC编程编程示例—学生成绩查询系统登录功能实现app.phpif(!defined('SINGLE'))exit();//基于标识的单一入口classAPP{publicfunction__construct(){spl_autoload_register(“self::load”);//注册自动装载}staticpublicfunctionload($class){//自动装载方法$file=“./Controller/{$class}.php”;//装载控制器类if(file_exists($file))require_once($file);$file="./View/{$class}.php";//装载视图类if(file_exists($file))require_once($file);$file="./Model/{$class}.php";//装载模型类

if(file_exists($file))require_once($file);}publicfunctionaction(){//应用请求处理$action=$this->getRequest();//获取请求操作

$route=$this->getRoute($action);//找到路由

$this->toController($route[2],$route[3]);}

publicfunctiongetRequest(){//获取请求操作$action=array("index","index");//缺省的请求

if(!empty($_GET['action'])){$action[0]=$_GET['action'];if(!empty($_GET["op"]))$action[1]=$_GET["op"];}return$action;}publicfunctiongetRoute($action){//请求分发require("route.php");//获取路由配置信息

foreach($routesas$route){if(($route[0]==$action[0])&&($route[1]==$action[1])){return$route;}}returnarray(“”,“”,“Index”,“default”);//没有找到路由,使用缺省页面}publicfunctiontoController($controller,$func){//将请求发送给控制器$con=new$controller;$con->$func();}24MVC编程编程示例—学生成绩查询系统登录功能实现\Controller\Index.phpif(!defined('SINGLE'))exit();//基于标识的单一入口classIndex{publicfunctiondefault(){$con=newView("./View/index.html",array());$con->display();//展示界面}publicfunctionlogin(){session_start();$id=$_POST['id'];//学号

$pass="";if(!empty($_POST['pass']))$pass=$_POST['pass'];$model=Model::getInstance();$ret=$model->userCheck($id,$pass);if($ret){//用户验证成功

$_SESSION['id']=$id;//注册会话变量

$con=newView("./View/operate.html",array());$con->display();}else{//用户验证失败,显示登View/index.html录页面

$con=newView("./",array());$con->display();//展示界面

return;}}}25MVC编程编程示例—学生成绩查询系统登录功能实现\View\View.php<?phpif(!defined('SINGLE'))exit();//基于标识的单一入口classView{public$file;//存放模板文件

public$data;//存放成绩查询结果

publicfunction__construct($file,$data){$this->file=$file;$this->data=$data;}//显示页面效果

publicfunctiondisplay(){$con=file_get_contents($this->file);$con=$con."</body></html>";print($con);}}?>26MVC编程编程示例—学生成绩查询系统登录功能实现\View\index.html<!DOCTYPEhtml><html><head><title>欢迎登录</title><metacharset="utf-8"></head><body><h1>欢迎访问学生成绩查询系统</h1><h3>登录系统</h3><formaction="index.php?action=index&op=login"method="post"><label>学号:</label><inputtype="text"name="id"><br><label>密码:</label><inputtype="password"name="pass"><br><inputtype="submit"value="登录系统"></form>27MVC编程编程示例—学生成绩查询系统登录功能实现\View\operate.html<!DOCTYPEhtml><html><head><title>成绩查询</title><metacharset="utf-8"></head><body><h1>欢迎访问学生成绩查询系统</h1><h3>成绩查询</h3><formaction="index.php?action=grade&op=query"method="post"><label>查询条件:</label><label>学号</label><inputtype="text"name="id"><inputtype="submit"value="开始查询"></form><formaction="index.php?action=grade&op=logout"method="post"><inputtype="submit"value="退出登录"></form><hr>28MVC编程编程示例—学生成绩查询系统登录功能实现if(!defined('SINGLE'))exit();//基于标识的单一入口classModel{privatestatic$instance;//单例对象

publicstaticfunctiongetInstance(){//获取单例对象

if(!(self::$

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论