1、以下代码主要介绍了设计模式中的一种单例模式的实例:
<?php //单例模式,一个类仅允许被实例化一次 class Config { private static $instance = null; public $setting = []; //初始化数据 private function __construct() { } private function __clone() { } public static function getSingleton() { 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 '<span style="color:red">非法参数</span>'; } }else{ echo '<span style="color:red">没有参数</span>'; } } //获取参数: 当无参数的时候,默认获取全部的参数 public function get($name='') { if(empty($name)){ //获取所有参数 return $this->setting; } //获取一个参数 return $this->setting[$name]; } } $obj1 = Config::getSingleton(); $obj2 = Config::getSingleton(); echo '<pre>'; var_dump($obj1,$obj2); echo '<hr>'; //设置 $obj1->set('host','127.0.0.1'); echo $obj1->get('host'); echo '<hr>'; $config = ['host'=>'localhost','user'=>'root','pass'=>'root']; $obj1->set($config); print_r($obj1->get()); ?>
说明:单例模式,一个类仅允许被实例化一次,以上主要实现了两个功能:1. 一个站点仅需要创建一个数据库连接;2. 一个站点通常只需要一个配置类。单例模式就是通过静态成员的使用,在类的内部使用类的自身访问静态成员,通过判断条件创建出一个实例化对象,不允许从外部创建对象,达到一个类只允许创建一个实例化对象的功能。
2、以下主要是mvc的架构组成,mvc实现原理通过模板类(Model),视图类(View)和控制器类(Controller)来把各个部分的功能封装起来,把控制器作为中间的枢纽来指挥各个环节的功能,使整个系统更加的有序清晰和安全。
一、模板类(Model)代码:
<?php //模型类 namespace mvc\model; class Model { public $pdo = null; //链接数据库 public $result = []; public function __construct($dbname,$charset,$user,$pass) { $this->pdo = new \PDO('mysql:host=localhost;dbname='.$dbname.';charset='.$charset,$user,$pass); } //查询 public function select($table,$num) { //创建预处理对象 $stmt = $this->pdo->prepare("SELECT `id`,`name`,`chinese` FROM {$table} LIMIT :num"); //绑定参数,执行查询 $stmt->bindValue(':num', $num ,\PDO::PARAM_INT); $stmt ->execute(); $this->result = $stmt->fetchALL(\PDO::FETCH_ASSOC); } } ?>
说明:模板类的作用是连接数据库,然后从数据库中获取到所要查询的数据。
二、视图类(View)代码:
<?php //视图类 namespace mvc\View; class View { public $data = []; //模板赋值 public function __construct($data) { $this->data = $data; } //获取数据 public function getData() { return $this->data; } //渲染模板 public function showTable($data) { $table = '<!DOCTYPE html> <html> <head> <title>MVC简介</title> <meta charset="utf-8"> <style type="text/css"> table ,th,td { border:1px solid black ; } table { border-collapse: collapse; width: 60%; margin: 30px auto; text-align: center; padding: 5px; } table tr:first-child { background-color: lightblue; } table caption { font-size: 1.5rem; margin-bottom: 15px; } </style> </head> <body> <table> <caption>学生成绩表</caption> <tr> <th>ID</th> <th>姓名</th> <th>汉语</th> </tr>'; foreach ($data as $row){ $table .= '<tr>'; $table .= '<td>'.$row['id'].'</td>'; $table .= '<td>'.$row['name'].'</td>'; $table .= '<td>'.$row['chinese'].'</td>'; $table .= '</tr>'; } $table .= '</table></body></html>'; echo $table; } } ?>
说明:视图类的作用是把从数据库中查询到的数据更加美观的展示在浏览器中,展现给用户。
三、控制器类(Controller)代码:
<?php //控制器 namespace mvc\controller; use mvc\model\Model; use mvc\view\View; class Controller { public function index() { require './model/Model.php'; $model = new Model('db100','utf8','root',123456); $model->select('student1', 5); $result = $model->result; require './view/View.php'; $view = new View($result); $data = $view->getData(); $view->showTable($data); } } ?>
说明:控制器类主要的作用是把模板类和视图类连接起来,传入一些查询的条件,让模板类的道德数据通过视图类显示到浏览器。
四、入口文件(index.php)代码:
<?php /** * 框架入口文件 * 首页 */ require './controller/Controller.php'; use mvc\controller\Controller; $controller = new Controller; $controller->index();
说明:入口文件是对控制器类的实例化,使控制器工作起来。
问:MVC设计思想是什么?
答:设计思想就是把整个系统分为模型、视图、控制器三部分,每一部分都相对独立,职责单一,在实现过程中可以专注于自身的核心,降低代码之间的耦合度,当某一部分需要修改时就可以只修改这一部分,不会去修改整体,也有利于系统后期的维护等等。
总结:1,单例模式中最重要的是理解它的实现原理,也就是静态成员的使用,通过类自身创建一个实例化对象,不允许通过外部创建对象。
2,mvc模式最重要的先理清他们之间的关系,其中控制器是中枢,控制另外两个模块,使他们数据结合起来,mvc使每个部分的功能更加具体化,功能实现更加的专一,同时也使代码更加的安全性和易维护。