Correction status:qualified
Teacher's comments:
单例模式
单例模式就是指一个类只能创建一个对象,这个主要应用在数据库连接和配置参数上。
将构造方法和克隆方法私有化,并通过一个方法来创建对象,在创建的时候先进行判断是否存在该对象了,不存在则创建,存在则返回该对象。案例如下:
<?php /** * 单例模式:一个类只允许实例化一次 私有化构造函数,用其他方法创建对象 * 1.一个站点只需创建一个数据库连接 * 2.一个站点通常只需一个配置类 */ class Config { //静态属性被所有对象共享 private static $instance = null; public $setting = [];//配置参数容器 //私有化构造器、克隆方法 private function __construct() { } private function __clone() { } //创建对象 public static function getInstance() { if (empty(self::$instance)){ 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: $value = func_get_arg(1); $name = func_get_arg(0); $this->setting[$name] = $value; break; default: echo '非法参数'; } return $this->setting; } } //获取参数 public function getSetting($name='') { if (empty($name)){ return $this->setting; //默认返回全部参数 } return $this->setting[$name]; } } $config = Config::getInstance(); $config2 =Config::getInstance(); var_dump($config,$config2); echo '<hr>'; //设置参数 $config->set('host','127.0.0.1'); echo $config->getSetting('host'); $data = ['host'=>'localhost','user'=>'root','pass'=>'root']; $config->set($data); echo '<br>'; print_r($config->getSetting());
点击 "运行实例" 按钮查看在线实例
2.mvc设计数据库查询
mvc分工明确,model块是负责从数据库拿取数据并进行相应的处理,view块则是接受数据并渲染视图,而controller则是负责控制整合model和view这两块。
首先是model
<?php /** * 模型类 获取数据 */ namespace mvc\model; class Model { public $pdo = null; public $result = [];//保存查询到的数据 //连接数据库 public function __construct($dbname,$user,$pass) { try{ $this->pdo = new \PDO('mysql:host=localhost;dbname='.$dbname,$user,$pass); }catch (\PDOException $e){ echo '连接错误:',$e->getMessage(); } } //查询数据 public function select($table, $num) { //创建预处理对象 $this->pdo->query('set names utf8');//设置编码 $stmt = $this->pdo->prepare("SELECT `staff_id`,`name`,`age`,`salary` FROM {$table} LIMIT :num;"); $stmt->bindValue(':num',$num,\PDO::PARAM_INT);//绑定参数 $stmt->execute();//执行语句 return $this->result = $stmt->fetchAll(\PDO::FETCH_ASSOC); } }
点击 "运行实例" 按钮查看在线实例
然后是view
<?php /** * Created by PhpStorm. * User: Jackson * Date: 2018/9/16 * Time: 21:13 */ namespace mvc\view; use mvc\model\Model; 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 type="text/css"> table{ text-align: center; margin: 50px auto; border-collapse: collapse; padding: 5px; width: 40%; } table,tr,td,th{ border: 1px solid black; } table tr:first-child{background: skyblue;} 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 $row){ $table.= '<tr><td>'.$row['staff_id'].'</td>'; $table.= '<td>'.$row['name'].'</td>'; $table.= '<td>'.$row['age'].'</td>'; $table.= '<td>'.$row['salary'].'</td></tr>'; } $table .= '</table></body></html>'; echo $table;//打印视图数据 } }
点击 "运行实例" 按钮查看在线实例
3.controller 部分
<?php /** * Created by PhpStorm. * User: Jackson * Date: 2018/9/16 * Time: 21:13 */ namespace mvc\controller; use mvc\model\Model; //可以避免前缀 use mvc\view\View; class controller { public function index() { //整合数据 和 视图 //获取数据 require './model/Model.php';//引入模板类 $model = new Model('php','root','root'); $model->select('staff',5);//调用查询方法 $result = $model->result;//已获得数据 require './view/View.php'; $view = new View($result); //传入数据 $data = $view->getData(); $view->display($data);//显示视图 } }
点击 "运行实例" 按钮查看在线实例
4.首页部分
<?php /**mvc首页 */ require './controller/controller.php';//引入控制类 use mvc\controller\Controller; $controller = new Controller(); $controller->index();
点击 "运行实例" 按钮查看在线实例
3.mvc的设计思想
mvc其实是框架的设计模式,把前端代码和后端代码分开,使得代码的可读性和维护性更高,代码也更简洁,有效地解决代码复用,同时mvc更加方便分组开发,有利于提高工作效率。