1、编程: 单例模式
<?php echo '<pre>'; class Config1{} $obj1=new Config1(); $obj2=new Config1(); var_dump($obj1,$obj2); var_dump($obj1==$obj2); echo '<hr>'; class Config{ private static $instance=null; public $setting=[]; //禁止从类的外部实例化对象 private function __construct() { } //禁止克隆 private function __clone() { } //外部睛允许通过一个公共静态方法创建实例 public static function getInstance(){ if(self::$instance ==null){ self::$instance=new self(); } return self::$instance; } //设置操作 public function set(){ $num= func_num_args(); if($num<=0){ echo '<span style="color:red">无参数</span>'; return; } switch ($num){ case 1: $value= func_get_args(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 '<span style="color:red">非法参数</span>'; } } //get public function get($name=''){ if(empty($name)){ return $this->setting; } return $this->setting[$name]; } } //$obj3=new Config(); //$obj4=new Config(); $obj3 = Config::getInstance(); $obj4 = Config::getInstance(); var_dump($obj3,$obj4); var_dump($obj3===$obj4); $obj3->set('host','127.0.0.1'); print_r($obj3->get()); echo '<hr>'; //test array $config=['host'=>'Localhost','user'=>'root','password'=>'123']; $obj4->set($config); print_r($obj3->get());
点击 "运行实例" 按钮查看在线实例
2、编程: MVC的实现原理
(1)model
<?php //模型类 namespace mvc\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); } }
点击 "运行实例" 按钮查看在线实例
(2)view
<?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 lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <style> table,th,td{ border:1px solid black; } </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; } }
点击 "运行实例" 按钮查看在线实例
(3)controllor
<?php namespace mvc\controllor; use mvc\model\Model; use mvc\view\View; class Controllor{ public function index(){ require './model/Model.php'; $model=new Model('php','root','root123'); $model->select('staff',10); $result=$model->result; require './view/View.php'; $view=new View($result); $data=$view->getData(); $view->display($data); } }
点击 "运行实例" 按钮查看在线实例
3、问答: MVC的设计思想是什么?
在课堂上老师演示了这样一幅图
以下引自网络查找资料:
(1)mvc是一种软件架构的思想,将一个软件按照模型、视图、控制器进行划分。其中,模型用来封装业务逻辑,视图用来实现表示逻辑,控制器用来协调模型与视图(视图要通过控制器来调用模型,模型返回的处理结果也要先交给控制器,由控制器来选择合适的视图来显示 处理结果)。
1)模型: 业务逻辑包含了业务数据的加工与处理以及相应的基础服务(为了保证业务逻辑能够正常进行的事务、安全、权限、日志等等的功能模块)
2)视图:展现模型处理的结果;另外,还要提供相应的操作界面,方便用户使用。
3)控制器:视图发请求给控制器,由控制器来选择相应的模型来处理;模型返回的结果给控制器,由控制器选择合适的视图。
(2)为什么要使用mvc
1)使用mvc的思想来设计一个软件,最根本的原因是为了实现模型的复用:
a,模型不用关心处理结果如何展现。 比如,模型返回一些数据,然后交给不同的视图来展现(表格的方式、图形的方式等等)。
b,可以使用不同的视图来访问同一个模型。
2)代码的维护性更好
修改模型不会影响到视图,反过来,修改视图,也不会影响到模型。
3)方便测试