mvc模式与单例模式
主要知识点
1)单例模式
2)工厂模式
3)mvc(模型-视图-控制器)
MVC的设计思想是什么?
* M(model) - 数据模型层
* 业务逻辑包含了业务数据的加工与处理以及相应的基础服务
* C(controller) - 控制层
* 视图发请求给控制器,由控制器来选择相应的模型来处理;模型返回的结果给控制器,由控制器选择合适的视图
* V(view) - 视图层
* 展现模型处理的结果;另外,还要提供相应的操作界面,方便用户使用
代码
单例模式
<?php // 单例模式 class Config { private static $instance; public $setting = []; // 禁止从类的外部实例化对象 private function __construct() { } //克隆方法也私有化 private function __clone() { echo"对象已被克隆"; } public static function getInstance() { if(self::$instance == null) { self::$instance = new self(); } return self::$instance; } public function setArg() { // 数组 // $num = func_get_args(); // return $num; // 个数 $num = func_num_args(); // return $num; 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 '<p style="color:red">非法参数</p>'; } } else{ echo '<p style="color:red">没有参数</p>'; } } public function getArg($name = '') { if(empty($name)) { return $this->setting; } return $this->setting[$name]; } } $obj1 = Config::getInstance(); $obj2 = Config::getInstance(); var_dump($obj1, $obj2); // true echo '<hr>'; var_dump($obj1 === $obj2); echo '<hr>'; // $obj3 = clone $obj1; // var_dump($obj1 === $obj3); // echo '<hr>'; // array(3) { [0]=> string(9) "波斯猫" [1]=> string(9) "喵喵怪" [2]=> string(6) "埃及" } // var_dump($obj1->setArg('波斯猫','喵喵怪','埃及')); echo $obj1->setArg('nickName','喵喵怪'); echo var_dump($obj1->getArg()); echo '<hr>'; echo $obj1->getArg('nickName'); $config = ['host'=>'localhost','user'=>'root','pass'=>'123456']; $obj1->setArg($config); echo '<hr>'; print_r($obj1->getArg());
模拟MVC模式
model.php
<?php namespace mvc\model; class Model { private $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); return $this->result; } }
view.php
<?php/** *视图类 */ namespace mvc\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><head> <meta charset="UTF-8"> <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; } }
controller.php
<?php 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'); $result = $model->select('staff',4); // return $result; require './view/View.php'; $view = new View($result); $data = $view->getData(); $view->display($data); } }
index.php
<?php require './controller/Controller.php'; use mvc\controller\Controller; $runIt = new Controller(); $runIt->index();
运行结果