第一 单例模式 单例模式指的是不允许类进行多次实例化,应用场景数据库连接对象,HTTP请求等。 将类的__construct和__clone魔术方法设置成private,这个类就变成了单例模式。然后再类里面声明一个静态方法,使得外部可以用这个方法来获取这个类的实例
第二 工厂模式用来批量创建对象,工厂模式可以使用接口和抽象类来创建,然后创建一个子类来继承
第三 MVC设计原理 M-Model,数据,针对数据库的操作,CURD V-View,视图,Html文档,浏览器中展示的页面 C-Controller,控制器,数据和视图都要在控制器中进行调用
第四 依赖注入将模型类和视图类的实例化过程放到控制器类外,以方法参数注入到控制器类中。注入点 控制器中的构造方法。
服务容器将对象的创建与使用的过程进行统一管理 也叫容器。实现类的实例化,门面模式facade,外观模式,静态代理。
第五 路由原理 路由的目标将url中的操作映射到控制器上的方法上
作业:写一个依赖注入的案例, 内容自定义
<?php
//依赖注入
class name{
public $name;
public function __construct($name)
{
$this->name=$name;
}
public function name(){
return '我的名字是'.$this->name;
}
}
class age{
public $age;
public function __construct($age)
{
$this->age=$age;
}
public function age(){
return '我的年龄是'.$this->age;
}
}
class info{
public $getName;
public $getAge;
//使用构造方法注入类的实例化
public function __construct($getName,$getAge)
{
$this->getAge=$getAge;
$this->getName=$getName;
}
public function getInf(){
return $this->getName->name().$this->getAge->age();
}
//直接在普通方法上注入类的实例化
public function getInfo($getName,$getAge){
return $getName->name().$getAge->age();
}
}
//使用魔术方法__construct将名字传入到name类中
$name=new name('小新');
//使用魔术方法__construct将年龄传入到age类中
$age=new age(18);
//使用魔术方法__construct将类的实例化以参数的方式传入到info类中
$info=new info($name,$age);
echo $info->getInf();
echo '<br>';
//在普通方法上
echo $info->getInfo($name,$age);点击 "运行实例" 按钮查看在线实例
作业二:写一个mvc应用的案例, 内容自定义,写了一个查询数据库并展示数据的MVC,但事实上到服务容器和门面模式基本上都是对照着代码写的,尴尬!
Model模型代码
<?php
namespace mvc;
// 模型类: 操作数据库
class Model
{
public function select($table='staff',$flieds='*',$where=''){
//直接将数据库的链接参数写到了这里
$dsn='mysql:host=127.0.0.1;dbname=www.html.io';
$pdo=new \PDO($dsn,'root','root');
$where=empty($where) ? ' ':' WHERE '.$where;
$sql='SELECT '.$flieds.' FROM '.$table.$where;
$stmt=$pdo->prepare($sql);
if($stmt->execute()){
$list=$stmt->fetchAll();
return $list;
}else{
return $stmt->errorInfo();
}
}
}点击 "运行实例" 按钮查看在线实例
View视图代码
<?php
namespace mvc;
class View{
public function fetch($data){
$table='<table border="1" cellpadding="5" cellspacing="0">';
$table.='<caption>信息表</caption>';
$table.='<tr bgcolor="#fffff00"><td>姓名</td><td>年龄</td><td>职位</td><td>电话</td><td>上任时间</td></tr>';
foreach($data as $value){
$table.='<tr><td>'.$value['name'].'</td><td>'.$value['age'].'</td><td>'.$value['position'].'</td><td>'.$value['mobile'].'</td><td>'.date('Y年m月d日',$value['hiredate']).'</td></tr>';
}
$table.='</table>';
return $table;
}
}点击 "运行实例" 按钮查看在线实例
Controller控制器代码
<?php
namespace mvc;
require 'Model.php';
require 'View.php';
class Container{
//创建一个空数组用来保存类的实例化过程
protected $instance=[];
//将类实例的实例化保存到之前的数组中
public function bind($alias,\Closure $closure){
$this->instance[$alias]=$closure;
}
//将类的实例化从容器池中取出来
public function make($alias){
return call_user_func_array($this->instance[$alias],[]);
}
}
//实例化服务容器
$container=new Container();
//绑定Model类到容器中
$container->bind('model',function(){
return new Model();
});
//绑定View类容器中
$container->bind('view',function(){
return new View();
});
//门面Facade
class Facade{
//创建一个静态属性用来保存服务容器
protected static $container=null;
//创建一个空的数组用来保存模型中获取的数据
protected static $data=[];
//给容器赋值
public static function initialize(Container $container){
static::$container=$container;
}
//将获取数据的select方法进行一个静态处理
public static function select(){
static::$data=static::$container->make('model')->select();
}
//将渲染数据的fetch方法进行一个静态处理
public static function fetch(){
return static::$container->make('view')->fetch(static::$data);
}
}
class Controller{
//使用构造方法注入容器对象
public function __construct(Container $container)
{
Facade::initialize($container);
}
public function index(){
//获取数据
Facade::select();
//返回并渲染
return Facade::fetch();
}
}
$controller=new Controller($container);
echo $controller->index();点击 "运行实例" 按钮查看在线实例
最后的实现效果

作业:写一个简单的路由, 理解路由的原理与目标
<?php
$uri=$_SERVER['REQUEST_URI'];
$list=explode('/',$uri);
echo '<br><pre>';
print_r($list);
echo '</pre>';
// http://www.html.io/1011/demo4.php/home/user/add/name/xiaoxin/age/18/gender/1/hobby/ball
$value=array_slice($list,6,8);
echo '<br><pre>';
print_r($value);
echo '</pre>';
$params=[];
for($i=0;$i<count($value);$i+=2){
$params[$value[$i]]=$value[$i+1];
}
echo '<br><pre>';
print_r($params);
echo '</pre>';
class userInfo{
public $name;
public $age;
public $hobby;
public function __construct($name,$age,$hobby)
{
$this->name=$name;
$this->age=$age;
$this->hobby=$hobby;
}
public function user(){
return '姓名:'.$this->name.',年龄:'.$this->age.',爱好:'.$this->hobby;
}
}
$userInfo=new userInfo($params['name'],$params['age'],$params['hobby']);
echo $userInfo->user();点击 "运行实例" 按钮查看在线实例
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号