批改状态:合格
老师批语:
单例模式
单例模式就是指一个类只能创建一个对象,这个主要应用在数据库连接和配置参数上。
将构造方法和克隆方法私有化,并通过一个方法来创建对象,在创建的时候先进行判断是否存在该对象了,不存在则创建,存在则返回该对象。案例如下:
<?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更加方便分组开发,有利于提高工作效率。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号