通过今天的学习,我懂得了单例模式只能实例化一次,工厂模式是在函数中实例化类,以及上树模式就是创建一个对象集合,对象池,对象容器,mvc的核心思想,以下是我的编程代码
1,单例模式
实例
<?php /** * 单例模式,一个类仅仅允许实例一次 */ class Congig { //创建一个数组容器, private $setting=[]; private static $instance; //创建一个私有的构造方法,作用是不让再外部实例化对象 private function __construct() { } //外部允许通过一个公共静态方法创建实例 public static function getInstance() { if (self::$instance==null) { self::$instance=new self(); } return self::$instance; } //将克隆类进行私有化,防止对象被复制 private function __clone() { // TODO: Implement __clone() method. } public function set() { //获取参数的数量 $paramCount= func_num_args(); if ($paramCount>0) { switch ($paramCount) { case 1: $value=func_get_arg(0); if (is_array($value)) { $this->setting= array_merge($this->setting,$value); }else { echo '数组不能为空'; } break; case 2: $name = func_get_arg(0); // 配置项的名称 $value = func_get_arg(1); // 配置项的值 $this->setting[$name] = $value; break; default: echo '非法参数!'; break; } }else { echo '没有参数'; } } public function get($name='') { if (empty($name)) { return $this->setting; } return $this->setting[$name]; } } $obj=Congig::getInstance(); $obj->set('host',"127.0.0.1"); echo $obj->get('host'); echo '<hr>'; $config=['host'=>'127.0.0.1','root'=>'root']; $obj->set($config); $result=$obj->get();
点击 "运行实例" 按钮查看在线实例
2,工厂模式
实例
<meta charset="UTF-8"> <?php /** * 工厂函数 不用new 而用函数创建对象 */ class Factory { public static function factory12($type,array $size=[]) { switch ($type) { //加法 case 'Plus': return new calculate($size[0],$size[1]); break; //减法 case 'Subtract': return new Calculate($size[0],$size[1]); break; //乘法 case 'Multiply': return new Calculate($size[0],$size[1]); break; //除法 case 'Divide': return new Calculate($size[0],$size[1]); break; } } } class Calculate { private $param1; private $param2; public function __construct($param1,$param2) { $this->param1=$param1; $this->param2=$param2; } //计算加 public function plus() { return ($this->param1+$this->param2); } //计算减 public function subtract() { return ($this->param1-$this->param2); } //计算乘 public function multiply() { return ($this->param1*$this->param2); } //计算乘 public function divide() { if ($this->param2==0) { return '分母不能为零'; } return ($this->param1/$this->param2); } } $result=Factory::factory12('Plus',[5,3]); echo $result->divide();
点击 "运行实例" 按钮查看在线实例
3,注册树模式
实例
<?php /** * 注册树,就是创建一个对象集合/对象池,对象容器来处理存贮对象 */ class Demo1{} class Demo2{} class Demo3{} class Register{ //创建存储对象的容器 public static $objs=[]; //将对象挂到树上 public static function set($index,$boj) { self::$objs[$index]=$boj; } public static function get($index) { return self::$objs[$index]; } //销毁对象 public static function del($index) { unset(self::$objs[$index]); } } Register::set('demo1',[1,2]); Register::set('demo2',[1,2]); Register::set('demo3',[1,2]); var_dump(Register::$objs['demo1']); echo '<hr>'; Register::del('demo2'); var_dump(Register::$objs['demo1']); var_dump(Register::$objs['demo2']);
点击 "运行实例" 按钮查看在线实例
4,MVC的实现原理
a,视图层
实例
<?php /** * Created by PhpStorm. * User: admin * Date: 2018/9/9 * Time: 20:05 */ 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"> <title>首页</title> </head> <body> <table border="1" cellpadding="5" cellspacing="0" width="60%" style="text-align: center" align="center"> <caption>信息显示表</caption> <tr><th>姓名</th><th>年龄</th><th>邮箱</th></tr> '; for($i=0;$i<count($data);$i++) { $table .='<tr>'; $table .= '<td>'.$data[$i]['name'].'</td>'; $table .= '<td>'.$data[$i]['age'].'</td>'; $table .= '<td>'.$data[$i]['email'].'</td>'; $table .='</tr>'; } $table .='</table>'; $table .='<div style="text-align: center"><a href="">上一页[</a>1 /<span>'.count($this->data).']</span> <a href="">下一页</a></div>'; $table .='</body></html>'; echo $table; } }
点击 "运行实例" 按钮查看在线实例
b,model层
实例
<?php /** * Created by PhpStorm. * User: admin * Date: 2018/9/9 * Time: 19:56 */ 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) { $sql="SELECT *from `{$table}` LIMIT :num"; //创建预处理对象 $stmt = $this->pdo->prepare($sql); //执行查询 $stmt->bindValue(':num', $num, \PDO::PARAM_INT); $stmt->execute(); $this->result = $stmt->fetchAll(\PDO::FETCH_ASSOC); } }
点击 "运行实例" 按钮查看在线实例
c,控制器层
实例
<?php /** * Created by PhpStorm. * User: admin * Date: 2018/9/9 * Time: 21:00 */ namespace mvc\controller; use mvc\view\View; use mvc\model\Model as m; class Controller { public function index() { require './model/Model.php'; $model=new m('test','root','root'); $model->select('show',2); //对视图进行渲染 $result=$model->result; require './view/View.php'; $view =new View($result); $data=$view->getData(); $view->display($data); } }
点击 "运行实例" 按钮查看在线实例
以下是我的手抄代码