这一节课主要讲设计模式和mvc,主要内容是设计模式:单例模式,工厂模式,注册树,mvc的实现原理
代码
<?php class Congig { private static $instance=null; //配置参数容器 public $setting=[]; //禁止从类的外部实例化对象 public function __construct() { } //克隆方法也有私有化 private function __clone() { } //外部仅允许通过一个公共静态方法来创建实例 public static function getInstance() {//检测当前的属性$instance是否已经保存了当前类的实例 if(self::$instance==null){ self::$instance=new self(); } //如果已经存在当前类的实例,返回当前类的实例 return self::$instance; } //配置项的设置操作 public function set() { //获取参数的数量 $num=func_num_args(); if($num>0){ switch ($num){ case 1: //如果只有一个参数,说明这是一个数组 $value=func_get_arg(0); if(is_array($value)){ $this->setting=array_merge($this->setting,$value); } break; case 2: $name=func_get_arg(0); $value=func_get_arg(1); $this->setting[$name]=$value; break; default: echo'没有参数'; } }else{ echo'非法参数'; } } //获取参数:当无参数的时候,默认获取全部参数 public function get($name=''){ if (empty($name)){ return $this->setting; } return $this->setting[$name]; } } $obj1=Congig::getInstance(); $obj2=Congig::getInstance(); $config=['host'=>'127.0.0.1','user'=>'root','pass'=>'5201314']; $obj1->set($config); print_r($obj1->get());
点击 "运行实例" 按钮查看在线实例
预览图
代码
<?php //模型类 namespace model\model; class Model { public $pdo = null; //连接数据库 public $result = []; public function __construct($dbname, $user, $pass) { $this->pdo = new \PDO('mysql:host=127.0.0.1;dbname='.$dbname, $user, $pass); } //查询 public function select($table, $num) { //创建预处理对象 $stmt = $this->pdo->prepare("SELECT `staff_id`,`name`,`age`,`salary` FROM {$table} LIMIT :num"); //执行查询 $stmt->bindValue(':num', $num, \PDO::PARAM_INT); $stmt->execute(); $this->result = $stmt->fetchAll(\PDO::FETCH_ASSOC); } }
点击 "运行实例" 按钮查看在线实例
<?php namespace model\view; class View { public $data = []; //模板赋值 public function __construct($data) { $this->data = $data; } //获取数据 public function getData() { return $this->data; } //渲染模板 public function display($data) { $table = '<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <style> table,th,td { border: 1px solid black; } table { border-collapse: collapse; /*折叠表格线*/ width: 600px; margin: 30px auto; text-align: center; padding: 5px; } table tr:first-child { background-color: lightgreen; } table caption { font-size: 1.5em; margin-bottom: 15px; } </style> <title>MVC简介</title> </head> <body> <table> <caption>员工信息表</caption> <tr> <th>ID</th> <th>姓名</th> <th>年龄</th> <th>工资</th> </tr>'; foreach ($data as $staff) { $table .= '<tr>'; $table .= '<td>'.$staff['staff_id'].'</td>'; $table .= '<td>'.$staff['name'].'</td>'; $table .= '<td>'.$staff['age'].'</td>'; $table .= '<td>'.$staff['salary'].'</td>'; $table .= '</tr>'; } $table .= '</table></body></html>'; echo $table; } }
点击 "运行实例" 按钮查看在线实例
<?php namespace model\controller; use model\model\Model; use model\view\View; class Controller { public function index() { require './model/Model.php'; $model = new Model('php','root','5201314'); $model->select('staff', 10); $result = $model->result; require './view/View.php'; $view = new View($result); $data = $view->getData(); $view->display($data); } }
点击 "运行实例" 按钮查看在线实例
<?php require './controller/Controller.php'; use model\controller\Controller; $controller=new Controller; $controller->index();
点击 "运行实例" 按钮查看在线实例
预览图
MVC的设计思想是什么?
mvc是一种软件架构的思想,将一个软件按照模型、视图、控制器进行划分。其中,模型用来封装业务逻辑,视图用来实现表示逻辑,控制器用来协调模型与视图(视图要通过控制器来调用模型,模型返回的处理结果也要先交给控制器,由控制器来选择合适的视图来显示 处理结果)。
1)模型: 业务逻辑包含了业务数据的加工与处理以及相应的基础服务
2)视图:展现模型处理的结果;另外,还要提供相应的操作界面,方便用户使用。
3)控制器:视图发请求给控制器,由控制器来选择相应的模型来处理;模型返回的结果给控制器,由控制器选择合适的视图。
总结
1、设计模式:单例模式,工厂模式,注册树,单例模式: 一个类仅允许被实例化一次,工厂模式: 不用用new ,而用函数/类方法批量创建对象,注册树: 就是创建一个对象集合/对象池/对象树,对象容器来存储对象
2、使用mvc的思想来设计一个软件,最根本的原因是为了实现模型的复用,代码的维护性更好,方便测试,但是使用mvc,会增加代码量、相应地也会增加软件开发的成文,设计的难度也会增加。
Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号