批改状态:合格
老师批语:
作业1.编程: 单例模式
<?php
/**
* 单例模式:一个类,只能有一个实例。
* 创建单利模式,一般都是以"三私一公"为创建线索
* 一个私有的静态属性,一个私用化构造函数,一个私有化克隆魔术方法 一个公用的获取实例的方法;
*/
//举个栗子
class heart{
//每个人只有一个心,所以new出来同一个对象,只能用一个心,好像不太恰当啊。
//创建一个私用的静态属性,用来存储类的实例
private static $instance;
//私有化构造函数,防止外部实例化对象
private function __construct()
{
}
//私有化 clone 方法,防止通过克隆创建实例
private function __clone()
{
// TODO: Implement __clone() method.
}
//通过 一个共有的 静态方法,在不用new对象的情况下就可以通过类来调用
public static function getInstance(){
// 判断以下对象是否已经存在
if( !self::$instance instanceof self){ //如果当前的instance实例不属于self(heart)类的实例
self::$instance = new self; //new 一个实例,赋值给instance
}
return self::$instance;
}
}
//测试一下
$heart1 = heart::getInstance();
$heart2 = heart::getInstance();
var_dump($heart1 == $heart2); // 结果是true,表示heart1和heart2 是同一个实例
echo '<hr>';
//一个连接数据库的单利模式(mysqli 扩展)
class DB{
//定义几个属性 mysql的默认端口和字符集就不写了
private $host;
private $user;
private $pass;
private $dbname;
private $link;
private static $instance; //静态属性
//构造方法
private function __construct(array $arr)
{
//写一个初始化实例的方法
$this->init($arr);
//写一个初始连接数据库的方法
$this->connect();
//默认数据库
$this->dbname;
}
//初始化数据库连接的几个属性
private function init(array $arr){
$this->host = isset($arr['host'])? $arr['host']:'127.0.0.1'; //localhost有时候报错,有时候不报错。。
$this->user = isset($arr['user'])? $arr['user']:'root';
$this->pass = isset($arr['pass'])? $arr['pass']:'root';
$this->dbname = isset($arr['daname'])? $arr['daname']:'';
}
// 数据库连接
private function connect(){
if ($link = mysqli_connect($this->host,$this->user,$this->pass,$this->dbname)) {
$this->link = $link; //如果执行成功就把MySQL连接对象付给$link;
}else{
echo '连接失败:',mysqli_connect_errno(),'<br>';
echo '错误信息:',mysqli_connect_error(),'<br>';
return false;
}
}
// 一个获取实例的公开方法
public static function getInstance(array $arr){
if(!self::$instance instanceof self){
self::$instance = new self($arr);
}
return self::$instance;
}
//私有化克隆方法
private function __clone()
{
// TODO: Implement __clone() method.
}
}
$arr = ['host'=>'localhost','user'=>'root','pass'=>'root','dbname'=>'stu'];
$obj1 = DB::getInstance($arr);
$obj2 = DB::getInstance($arr);
var_dump($heart1 == $heart2);点击 "运行实例" 按钮查看在线实例
作业2.编程: MVC的实现原理
MVC是实现分层模块化编程的思想,
代码1:model层,实现数据库的连接,查询操作,并返回结果集
<?php
/**
* Model 层 主要负责数据操作--连接,查询等功能
*/
namespace mvc\model;
class Model
{
private $pdo ;
private $sql;
public $result = [];
//实现数据库连接
public function __construct($dsn,$user,$pwd)
{
$this->pdo = new \PDO($dsn,$user,$pwd);
}
//实现一个查询功能
public function select($table,$bursary){
$this->sql = "SELECT `name`,`sex`, `class` FROM {$table} where `bursary`>:bursary";
$stmt = $this->pdo->prepare($this->sql);
$stmt->bindParam(':bursary',$bursary);
$stmt->execute();
$this->result = $stmt->fetchAll(\PDO::FETCH_ASSOC);
}
//实现另一个查询功能……
}点击 "运行实例" 按钮查看在线实例
代码2:viewer层,实现数据的渲染功能
<?php
/**
* 实现客*户端视图渲染功能
* 通过controller获取model中的数据(也就是查询的结果集),通过HTML代码渲染
*/
namespace mvc\viewer;
class Viewer
{
public $result = [];//用来准备存放传递过来的结果集
public function __construct($result)
{
$this->result= $result;
}
public function getResult(){
//获取传递过来的数据
return $this->result;
}
public function display($result){
//通过字符串拼接的方式,实现了代码的嵌套
$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>
<style>
table,th,td {
border: 1px solid lightgray;
}
table {
border-collapse:collapse;
width:60%;
margin: 30px auto;
text-align: center;
}
table caption {
font-size: 20px;
margin-bottom: 15px;
}
table tr:first-child{
background-color: lightblue;
}
</style>
</head>
<body>
<table>
<caption>奖学金*表</caption>
<tr>
<th>姓名</th>
<th>年龄</th>
<th>班级</th>
</tr>';
foreach ($result as $student){
$table.= '<tr>';
$table.= '<td>'.$student['name'].'</td>';
$table.= '<td>'.$student['sex'].'</td>';
$table.= '<td>'.$student['class'].'</td>';
$table.='</tr>';
}
$table .='</table></body></html>';
echo $table; //输出这些HTML标签,成功渲染
}
}点击 "运行实例" 按钮查看在线实例
代码3:controller层,调度作用:
<?php
/**
* Created by PhpStorm.
* User: Core
* Date: 2018/9/11
* Time: 15:32
*/
namespace mvc\controller;
use mvc\model\Model;
use mvc\viewer\Viewer;
class Controller
{
private $dsn='mysql:host=localhost;dbname=stu';
private $user= 'root';
private $pwd = 'root';
public function start(){
include './model/Model.php';
$model = new Model($this->dsn,$this->user,$this->pwd);
$model->select('student',500);
$reusult= $model->result;//将结果集付给result
require './viewer/Viewer.php';
$view = new Viewer($reusult); //把result当做参数传给view
$tableData = $view->getResult();//获得数据
$view->display($tableData); //渲染数据
}
}点击 "运行实例" 按钮查看在线实例
代码4:入口文件
<?php /** * 入口文件 */ use mvc\controller\Controller; require './controller/Controller.php'; $controller = new Controller(); $controller->start();
点击 "运行实例" 按钮查看在线实例
本地运行效果图:

作业3.问答: MVC的设计思想是什么?
MVC 是一种分层的设计思想,有利于程序的模块化开发,后期维护及团队分工协作。
* M:既Model层,模型层,可以有很多类,用于操作数据库
* V:既viewer层,视图层,提供客*户端(浏览器)的渲染,展示给用户
* C:既controller,控制层,主要负责M,V的调度。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号