批改状态:合格
老师批语:
单例模式
<?php
/**
* 单例模式:一个类仅允许被实例化一次
* 1.一个站点仅需要创建一个数据库连接
* 2.一个站点只需要一个配置类
*/
//创建一个使用的配置类
class config
{
/**
*为什么要用静态?因为静态属性属于类的,可以被所有类实例所共享
* 为什么要能实例初始化为null,便于检测是否已经实例化
*/
private static $instance = null;
public $setting = [];
//禁止从类的外部实例化外部
private function __construct()
{
}
//防止克隆
private function __clone()
{
// TODO: Implement __clone() method.
}
public static function getInstance()
{
if(self::$instance ==null)
{
self::$instance = new self();
}
//如果存在,直接返回
return self::$instance;
}
//配置项的设置操作
public function set()
{
//获取参数数量
if(func_num_args()>0)
{
if((func_num_args() ==1) && is_array(func_get_args())){
//数组
$value =func_get_arg(0);
$this->setting=array_merge($this->setting=$value);
}elseif(func_num_args() ==2){
$name = func_get_arg(0);
$value = func_get_arg(1);
$this->setting[$name] = $value;
}else{
echo '非法参数';
}
}else{
echo '没有参数传入';
}
}
//获取参数:当无参数时,默认获取全部
public function get($name='')
{
if(empty($name)){
return $this->setting;
}
return $this->setting[$name];
}
}
$obj = config::getInstance();
//var_dump($obj);
$obj->set('host','127.0.0.1');
echo $obj->get('host'),"<hr>";
$obj->set(['host'=>'127.0.0.1','user'=>'root','password'=>'root']);
print_r($obj->get());点击 "运行实例" 按钮查看在线实例
2.MVC的实现原理
<?php
/**
* 模型层
*/
namespace mvc\model;
class Model
{
public $pdo = null;
//连接数据库
public $result =[];
public function __construct($db,$user,$password)
{
$this->pdo = new \PDO('mysql:host=127.0.0.1;dbname='.$db,$user,$password);
}
//查询
public function select($table,$num){
//创建预处理对象
$stmt = $this->pdo->prepare("SELECT * FROM {$table} LIMIT :num");
//查询
$stmt->bindValue(":num",$num,\PDO::PARAM_INT);
$stmt->execute();
$this->result = $stmt->fetchAll(\PDO::FETCH_ASSOC);
}
}点击 "运行实例" 按钮查看在线实例
<?php
/**
* 视图类
*/
namespace mvc\view;
class View
{
public $data = [];
//模板赋值
public function __construct($data)
{
$this->data = $data;
}
//获取数据
public function getData()
{
return $this->data;
}
//渲染模板
public function dispaly($data)
{
$table = '<!doctype html>
<html lang="zh-Hans">
<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>MVC简介</title>
<style>
table,th,td{
border:1px solid black;
}
table {
border-collapse:collapse;
width:60%;
margin:30px auto;
text-align:center;
}
table tr:first-child{
background: lime;
}
table caption{
font-size:1.5em;
margin-bottom:15px;
}
</style>
</head>
<body>
<table >
<caption>员工信息表</caption>
<tr>
<td>ID</td>
<td>姓名</td>
<td>年龄</td>
<td>工资</td>
</tr>';
foreach ($data as $value) {
$table .= '<tr>';
$table .= '<td>' . $value['id'] . ' </td>';
$table .= '<td>' . $value['name'] . ' </td>';
$table .= '<td>' . $value['age'] . ' </td>';
$table .= '<td>' . $value['salary'] . ' </td>';
$table .= '</tr>';
}
$table .= '</table></body></html>';
echo $table;
}
}点击 "运行实例" 按钮查看在线实例
<?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');
$model->select('staff',12);
$result = $model->result;
require './view/View.php';
$view = new View($result);
$data = $view->getData();
$view->dispaly($data);
}
}点击 "运行实例" 按钮查看在线实例
<?php /** * 入口文件 */ require './controller/Controller.php'; use mvc\controller\Controller; $controller = new Controller; $controller->index();
点击 "运行实例" 按钮查看在线实例
3.MVC的设计思想是什么?
mvc主要应该是把视图,模型分开进行处理,这有助于团队协作,
也为了代码复用. 控制器统一分发请求与动作.交给模型进行逻辑处理,最后传到视图进行显示出来
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号